2 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
在我寫(xiě)這個(gè)問(wèn)題的時(shí)候,我意識(shí)到我做錯(cuò)了什么,所以我決定繼續(xù)自己回答這個(gè)問(wèn)題。
當(dāng)您將變量定義為全局變量時(shí),您不想像這樣為變量分配一個(gè)變量:
global lives = 0
那會(huì)給你一個(gè)錯(cuò)誤。為什么?當(dāng)你想將一個(gè)變量定義為全局變量時(shí),你是在告訴計(jì)算機(jī),“嘿,這里的這個(gè)變量是全局使用的,而不是本地使用的。” 上面這行代碼的問(wèn)題在于,您還為變量分配了一個(gè)值,而此時(shí)您應(yīng)該做的就是告訴計(jì)算機(jī)該變量是全局的。如果你想給變量賦值(無(wú)論是第一次還是重新賦值),那么你需要在不同的代碼行上賦值。
當(dāng)我查找這個(gè)時(shí),我沒(méi)有發(fā)現(xiàn)任何明確的說(shuō)法,所以我希望這有助于任何使用 python 編碼的新人或者像我一樣忘記它是如何工作的人。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
首先,global語(yǔ)句是聲明,而不是可執(zhí)行語(yǔ)句。它只是告訴解釋器查看模塊命名空間而不是函數(shù)調(diào)用命名空間。它只需要在函數(shù)內(nèi)部使用。
在外面,本地和全局命名空間是同一個(gè)東西(模塊命名空間),所以該global語(yǔ)句什么都不做。
該語(yǔ)句必須是關(guān)鍵字,global后跟要被視為全局名稱(chēng)的逗號(hào)分隔列表。如果要為任何名稱(chēng)賦值,無(wú)論是否為全局名稱(chēng),都必須在單獨(dú)的賦值語(yǔ)句中進(jìn)行。
您可能想要更像下面的代碼的東西,它會(huì)按照您的需要“工作”(我意識(shí)到這只是開(kāi)發(fā)中的部分程序)。我修復(fù)了縮進(jìn)以符合 PEP 8,因?yàn)槲业睦涎劬Πl(fā)現(xiàn)否則很難閱讀代碼!
import random
words = "tom dick harry".split()
word = random.choice(words)
# Difficulties: Easy:12 Medium:9 Hard:6
lives = 0
current = "_" * len(word)
def gameLoop():
global lives
while current != word and lives > 0:
print("Guess a letter. If you wish to exit the game, enter 'exit'")
input("")
print(lives)
def start_game():
global lives
while True:
print(
"Welcome to Hangman! What game mode would you like to play? Easy, medium, or hard?"
)
game_mode = str.lower(input(""))
if game_mode == "easy":
lives = 12
gameLoop()
break
elif game_mode == "medium":
lives = 9
gameLoop()
break
elif game_mode == "hard":
lives = 6
gameLoop()
break
start_game()
添加回答
舉報(bào)