簡體   English   中英

基於字典的switch case中的NameError

[英]NameError in dictionary-based switch case

我沒有使用python的經驗,所以我想我會開始考慮我的新興趣。 我有一個問題,當談到一個開關案例,python沒有,谷歌搜索后我發現大多數使用字典樣式方法,你可以在下面看到。 這是一個小的.py文件,我正在構建復制ATM風格的系統,只是為了讓我熟悉所有python的選項。

while True:
    print ("Who are you?")
    name = input().lower()

    if re.match("^[A-Za-z]*$", name):
        break
    else:
        print('Please enter a valid name')


print('Hello ' + name)

print("Please enter your PIN " + name)
pin = input()


accounts = {"stephen" : stephen,
           "Dean" : Dean,
           "Jennifer" : Jennifer,
           "Liam" : Liam,
           "Billie" : Billie,
           "Decky" : Decky,
           "Joel" : Joel,
}

accounts[name]()

def stephen():
    if pin == 1234:
        print("Pin Accepted")
    else:
        print("Wrong PIN")

def Dean():
    if pin == 1344:
        print("Pin Accepted")
    else:
        print("Wrong PIN")

現在的問題是,當我進入輸入引腳部分時,它返回時出現錯誤,說明如下:

options = {“stephen”:stephen,NameError:name'stephen'未定義

任何想法可能是什么? 看看這個例子,我覺得我的一切都是正確的,但是我無法通過Google搜索特定的錯誤找到答案。

由於您嘗試使用stephen而導致錯誤,因此尚未定義。 在定義函數創建該字典。

Python是一種解釋型語言 ,這意味着代碼是由解釋器逐行執行的,無需事先編譯。 因此,當您嘗試將其輸入字典時,未定義函數stephen因為它僅在稍后的腳本中定義。 在將函數輸入字典之前定義函數stephen ,您的腳本將起作用。

accounts = {"stephen" : stephen,
           "Dean" : Dean,
           "Jennifer" : Jennifer,
           "Liam" : Liam,
           "Billie" : Billie,
           "Decky" : Decky,
           "Joel" : Joel,
}

1)您的accounts字典中的值會導致錯誤。 無論是變量還是函數,都必須在使用前定義它們。

2)刪除account詞典中的最后一個逗號

這里有一個簡單的樣本:

>>> mydict ={"a":A}  # A is not defined, will raise Error
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'A' is not defined
>>> mydict ={"a":"A"}  # A is string here, it is okay
>>> A = "A"  # declares A and assigns value to it
>>> mydict ={"a":A}  # good now.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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