选择随机硬币和卡时程序无法正常工作

时间:2014-10-15 12:11:18

标签: python

嗨,我对编码很新,我不知道为什么这不起作用!我们必须制作一个程序,用户要么选择硬币并且显示随机硬币投掷​​结果,要么他们选择卡片并随机显示卡片套装和号码。它一直在说 回溯(最近一次调用最后一次):

 File "\\fs1epa\intake2010data$\cresm011.311\My Documents\Year 11\Computer Science\Python Practise question\Card_or_coin.py", line 30, in <module>
    program()
  File "\\fs1epa\intake2010data$\cresm011.311\My Documents\Year 11\Computer Science\Python Practise question\Card_or_coin.py", line 9, in program
    if r == (1):
UnboundLocalError: local variable 'r' referenced before assignment

这是我的代码:

def program():
Choice = input("Pick either 'Card' or 'Coin' ")
if Choice == "Coin":
    import random
    r = random.randint(1,2)
if r == (1):
    print ("Heads!")
elif r == (2):
        print ("Tails!")

if Choice == ("Card"):
    import random
card_number = random.randint(1,13)
if card_number == 1:
    print("Ace")
elif card_number == 11:
    print("Jack")
elif card_number == 12:
    print("Queen")
elif card_number == 13:
    print("King")
else:
    print(card_number)

flag = True
while flag:
    program()
    flag = input('Would you like to run the program again? [yes/no]') == 'yes'

print ("The program will now terminate.")

正如你所看到的,我不是最好的编码,但任何帮助?此外,当我输入'Coin'时,它仍然可以工作,但仍会计算随机卡号,当我输入'Card'时,它会给我上述错误。此外,我还没有为随机套装添加代码。

我添加了一个人员代码,现在它可以工作!但是,当我输入'Coin'时,它也会获得随机卡号。

def program():
    Choice = input("Pick either 'Card' or 'Coin' ")
    if Choice == "Coin":
        import random
        r = random.randint(1,2)
        if r == (1):
            print ("Heads!")
        elif r == (2):
            print ("Tails!")

    if Choice == "Card":
        import random
    card_number = random.randint(1,13)

    if card_number == 1:
        print("Ace")
    elif card_number == 11:
        print("Jack")
    elif card_number == 12:
        print("Queen")
    elif card_number == 13:
        print("King")
    else:
        print(card_number)

flag = True
while flag:
    program()
    flag = input('Would you like to run the program again? [yes/no]') == 'yes'

print ("The program will now terminate.")

4 个答案:

答案 0 :(得分:1)

你想要的是打算将if和elif置于

之下
if Choice == "Coin":

线。

像这样,你通过程序检查r ==(1)每次运行。如果你写“卡片”,你想跳过它。

什么是编译器抱怨的是,他不做任何分配

r = random.randint(1,2)

行,因为如果选择不是“硬币”,他会跳过if。

然后他试图将它与(1)比较,他不能,因为他没有做任务。

答案 1 :(得分:1)

正如错误消息所说:

  

本地变量&#39; r&#39;在分配前引用

我认为这将是您查看错误的足够信息。

如果您运行NameError: name 'r' is not defined,通常会获得if r == 1:,但如果认为r的分配r = random.randint(1,2),则认为UnboundLocalError是一个局部变量,因此抛出import random if Choice == "Coin": r = random.randint(1,2) if r == 1: print("Heads!") elif r == 2: print("Tails!") 1}}。

您的程序有很多错误,对于您提出的问题,更正是:

{{1}}

答案 2 :(得分:1)

您对r的分配超出了您在初选中的选择范围。

基本上,您在声明if r == 1之前调用r。这导致了您的错误。

请记住,Python使用空格,因此您需要相应地缩进。

我已经为您重新编写(添加了2个缩进)代码并进行了测试。

def program():
    Choice = input("Pick either 'Card' or 'Coin' ")
    if Choice == "Coin":
        import random
        r = random.randint(1,2)
        if r == (1):
            print ("Heads!")
        elif r == (2):
            print ("Tails!")

if Choice == ("Card"):
    import random
    card_number = random.randint(1,13)
    if card_number == 1:
        print("Ace")
    elif card_number == 11:
        print("Jack")
    elif card_number == 12:
        print("Queen")
    elif card_number == 13:
        print("King")
    else:
        print(card_number)

flag = True
while flag:
    program()
    flag = input('Would you like to run the program again? [yes/no]') == 'yes'

print ("The program will now terminate.")

答案 3 :(得分:0)

谢谢大家的帮助。我有它的工作,我非常感激!我希望我不必再次寻求帮助,我将能够像我一样帮助其他人。

完成的计划:

def program():
    Choice = input("Pick either 'Card' or 'Coin' ")
    if Choice == "Coin":
        import random

        r = random.randint(1,2)
        if r == (1):
            print ("Heads!")
        elif r == (2):
            print ("Tails!")

    if Choice == "Card":
        import random
        card_number = random.randint(1,13)

        if card_number == 1:
            print("Ace")
        elif card_number == 11:
            print("Jack")
        elif card_number == 12:
            print("Queen")
        elif card_number == 13:
            print("King")
        else:
            print(card_number)

flag = True

while flag:
    program()
    flag = input('Would you like to run the program again? [yes/no] ') == 'yes' , 'Yes'

print ("The program will now terminate.")

糟糕,这是我的缩进,当我看到它时,我没有意识到,谢谢大家的帮助。