[英]NameError, variable not defined in Python
所以最終目標是在搖滾、剪紙、剪刀、蜥蜴、史波克的 3 場比賽中跑出最好的 2 場。 我還沒有添加循環或類似的東西,我試圖讓游戲本身首先運行,但我遇到了NameError
,它表示'result'
變量未定義。
我試過退回它,但這似乎不起作用,但我也可能不知道我在做什么?
def number_to_name(number):
if number == 1:
return 'scissors'
elif number == 2:
return 'rock'
elif number == 3:
return 'paper'
elif number == 4:
return 'lizard'
elif number == 5:
return 'spock'
else:
print ("Error: Invalid number")
def name_to_number(name):
if name == 'scissors':
return 1
elif name == 'rock':
return 2
elif name == 'paper':
return 3
elif name == 'lizard':
return 4
elif name == 'spock':
return 5
else:
print ("Error: Invalid number")
def rpsls(name):
player_score, computer_score = (0, 0)
player_input = name_to_number(name)
computer_input = random.randint(1,5)
result = (player_input - computer_input) % 5
if result == 1 or result == 2:
print("player wins")
player_score += 1
print("Player {}, Computer {}". format(player_score, computer_score))
elif result == 3 or result == 4:
game = "computer wins"
computer_score += 1
print("Player {}, Computer {}". format(player_score, computer_score))
elif result == 0:
game = "it's a tie"
print("Player {}, Computer {}". format(player_score, computer_score))
else:
print("error")
rpsls("rock")
rpsls("spock")
rpsls("paper")
rpsls("lizard")
rpsls("scissors")
您的條件應該在rpsls function 內。因為您的結果變量是局部變量。 您無法全局獲取此變量。
> def rpsls(name):
> player_score, computer_score = (0, 0)
> player_input = name_to_number(name)
> computer_input = random.randint(1, 5)
> result = (player_input - computer_input) % 5
>
>
> if result == 1 or result == 2:
> print("player wins")
> player_score += 1
> print("Player {}, Computer {}".format(player_score, computer_score))
>
> elif result == 3 or result == 4:
> game = "computer wins"
> computer_score += 1
> print("Player {}, Computer {}".format(player_score, computer_score))
>
> elif result == 0:
> game = "it's a tie"
> print("Player {}, Computer {}".format(player_score, computer_score))
>
> else:
> print("error")
首先,由於result
僅在 function 中定義,因此只能在特定的 function 中訪問,除非您選擇使用global
方法,我不推薦。
其次,由於您在調用實際定義result
的 function之前調用了 result , result
即使您使用global
,它仍然不會為該特定行定義。
您的變量result
在 function rpsls
內。 所以result
的 scope 只屬於 function。
一個簡單的解決方案是在 function 'rpsls' 之前為結果分配0
值,這樣您就可以更新 function 中的全局定義變量。
result = 0
def rpsls(name):
#Your code
最好的方法是編寫一個 class,有一個 class 級別變量result
,並將所有這些代碼放入 class。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.