簡體   English   中英

NameError,變量未在 Python 中定義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM