首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >摇滚剪刀Python程序: winOrLose()接受两个参数(0给定)

摇滚剪刀Python程序: winOrLose()接受两个参数(0给定)
EN

Stack Overflow用户
提问于 2015-05-20 10:04:45
回答 4查看 284关注 0票数 0

我正在编写一个程序,发挥岩石剪刀与用户。我得运行这个程序5次。我用的是蟒蛇。每当我运行程序并输入"R“、"S”或"P“时,程序将导致错误:

代码语言:javascript
复制
TypeError: winOrLose() takes exactly 2 arguments (0 given)  

以下是我的节目:

代码语言:javascript
复制
from myro import *  
from random import *  

def userOptions():  
    print "Press R for Rock"  
    print "Press P for Paper"
    print "Press S for Scissors"

choice = raw_input("Your choice is: ")

if choice == "R":
    return "Rock"
if choice == "P":
    return "Paper"
if choice == "S":
    return "Scissors"
else:
    userOptions()


def computerRandom():
    options = ["Rock", "Paper", "Scissors"]
    cGuess = randint(0,2)
    return options[cGuess]

def winOrLose(userChoice, computerChoice):
    if userChoice == computerChoice:
        return "Tie"
    if userChoice == "Rock" and computerChoice == "Paper":
        return "Computer Wins"
    if userChoice == "Paper" and computerChoice == "Scissors":
        return "Computer Wins"
    if userChoice == "Scissors" and computerChoice == "Rock":
        return "Computer Wins"
    else:
        return "User Wins"

    while True:
        userChoice = userOptions()
        computerChoice = computerRandom()
        print "User Chose: ", userChoice
        print "Computer Chose: ", computerChoice
        result = winOrLose(userChoice, computerChoice)
        if result == "Tie":
            print "It is a tie"
        elif result == "Computer Wins":
            print "Computer Wins"
        else:
            print "User Wins"

def main():
    for index in range(1,5,1):
        speak("Rock Paper Scissors Shoot")
        userOptions()
        computerRandom()
        winOrLose()

main()

请有人帮帮我,我现在有点绝望,想办法解决这个问题。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-20 10:13:20

在主函数中不传递任何参数。

代码语言:javascript
复制
def main():
    for index in range(1,5,1):
        speak("Rock Paper Scissors Shoot")
        userOptions()
        computerRandom()
        winOrLose()

应:

代码语言:javascript
复制
def main():
    for index in range(1,5,1):
        speak("Rock Paper Scissors Shoot")
        userChoice = userOptions()
        computerChoice = computerRandom()
        winOrLose(userChoice, computerChoice)

另一个问题是,您尝试使用for index in range(1,5,1)运行5次,但是您的winOrLose函数中有一个无限循环,所以在第一次调用它之后永远不会退出它:

代码语言:javascript
复制
def winOrLose(userChoice, computerChoice):
    if userChoice == computerChoice:
        return "Tie"
    if userChoice == "Rock" and computerChoice == "Paper":
        return "Computer Wins"
    if userChoice == "Paper" and computerChoice == "Scissors":
        return "Computer Wins"
    if userChoice == "Scissors" and computerChoice == "Rock":
        return "Computer Wins"
    else:
        return "User Wins"

    while True: # <=== infinite loop here.
        userChoice = userOptions()
        computerChoice = computerRandom()
        print "User Chose: ", userChoice
        print "Computer Chose: ", computerChoice
        result = winOrLose(userChoice, computerChoice)
        if result == "Tie":
            print "It is a tie"
        elif result == "Computer Wins":
            print "Computer Wins"
        else:
            print "User Wins"

再次播放的决定最有可能不是在winOrLose函数中,而是在它自己的函数中。

您还在userOptions函数中出现了缩进错误,尽管可能只是在这里复制它。

代码语言:javascript
复制
def userOptions():  
    print "Press R for Rock"  
    print "Press P for Paper"
    print "Press S for Scissors"
# below code block should be indented too.
choice = raw_input("Your choice is: ")

if choice == "R":
    return "Rock"
if choice == "P":
    return "Paper"
if choice == "S":
    return "Scissors"
else:
    userOptions()
票数 2
EN

Stack Overflow用户

发布于 2015-05-20 10:09:59

正如错误消息告诉您的那样,您需要为您的winOrLose函数提供两个参数。您从userOptions()computerRandom()返回值,但没有将这些值赋值给任何变量:

代码语言:javascript
复制
def main():
    for index in range(1,5,1):
        speak("Rock Paper Scissors Shoot")
        user_choice = userOptions()
        computer_choice = computerRandom()
        winOrLose(user_choice, computer_choice)

main()
票数 1
EN

Stack Overflow用户

发布于 2015-05-20 10:09:14

正如错误中所指定的,您没有将参数传递给主函数中的函数winOrLose。

代码语言:javascript
复制
def main():
    for index in range(1,5,1):
        ...
        ...
        winOrLose()     # in this statement you are not passing any arguments
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30346487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档