2014-10-24 2 views
0

Сканирующие ножницы для бумаги, когда я запускаю его, программа говорит, что решение ссылается до того, как оно назначено, хотя пользовательский выбор и выбор компьютера отображаются в порядке, я застрял в этом довольно долгое время и новичок в программирование.unboundlocalerror с отображением вывода

import random 

def main(): 
    userinput = int(input("First just enter 0 for rock, 1 for paper, or 2 for scissors! ")) 
    computernumber = random.randint(0,2) 
    while userinput != 0 and userinput != 1 and userinput != 2: 
     userinput = int(input("Enter 0 for rock, 1 for paper, or 2 for scissors! ")) 
    print ("You chose ",userchoice(userinput),) 
    print ("Computer chose ",computerchoice(computernumber),) 
    print (decision(userchoice,computerchoice)) 

def userchoice(userinput): 
    if userinput == 0: 
     userchoice = "rock"; 
    elif userinput == 1: 
     userchoice = "paper"; 
    elif userinput == 2: 
     userchoice = "scissors"; 
    return userchoice 

def computerchoice(computernumber): 

    if computernumber == 0: 
     computerchoice = "rock"; 
    elif computernumber == 1: 
     computerchoice = "paper"; 
    elif computernumber == 2: 
     computerchoice = "scissors"; 
    return computerchoice 

def decision(userchoice,computerchoice): 

    if (userchoice == computerchoice): 
     decision = "It's a draw!"; 
    elif (userchoice == "rock"): 
     if(computerchoice == "paper"): 
     decision = "Computer wins!"; 
    elif (userchoice == "paper"): 
     if(computerchoice == "rock"): 
     decision = "You win!"; 
     else: 
     decision = "Computer wins!"; 
    elif (userchoice == "scissors"): 
     if(computerchoice == "rock"): 
     decision = "Computer wins!"; 
     else: 
     decision = "You win!"; 
    return decision 


main() 

выход:

first just enter 0 for rock, 1 for paper, or 2 for scissors! 1 
You chose paper 
Computer chose rock 
Traceback (most recent call last): 
    File "MorerockpaperscissorsEM.py", line 60, in <module> 
    main() 
    File "MorerockpaperscissorsEM.py", line 17, in main 
    print(decision(userchoice,computerchoice)) 
    File "MorerockpaperscissorsEM.py", line 57, in decision 
    return decision 
UnboundLocalError: local variable 'decision' referenced before assignment 
+0

Какая трассировка вы получаете? Одна из проблем может заключаться в том, что вы повторно используете имя функции 'userchoice' как локальную переменную внутри функции (что может быть ОК, это просто мешает вам вызывать функцию рекурсивно), а также как аргумент' решение (что скорее всего будет логической ошибкой). – chepner

+0

Я добавил traceback –

ответ

1

При вызове функции 'решение' в этой строке

print (decision(userchoice,computerchoice)) 

вы передаете функций 'userchoice' и 'computerchoice' в качестве аргументов. Правильный способ назвать эту функцию будет:

+0

Спасибо, я понимаю. –

+0

Обратите внимание, что это также является основной причиной фактической трассировки; поскольку вы передаете ссылку на функцию вместо строки, ни одно из условий в функции 'decision' не будет выполнено, поэтому значение переменной' decision' никогда не будет установлено до того, как вы ее вернете. – chepner

Смежные вопросы