2 回答

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

TA貢獻1804條經驗 獲得超3個贊
首先,global語句是聲明,而不是可執行語句。它只是告訴解釋器查看模塊命名空間而不是函數調用命名空間。它只需要在函數內部使用。
在外面,本地和全局命名空間是同一個東西(模塊命名空間),所以該global語句什么都不做。
該語句必須是關鍵字,global后跟要被視為全局名稱的逗號分隔列表。如果要為任何名稱賦值,無論是否為全局名稱,都必須在單獨的賦值語句中進行。
您可能想要更像下面的代碼的東西,它會按照您的需要“工作”(我意識到這只是開發中的部分程序)。我修復了縮進以符合 PEP 8,因為我的老眼睛發現否則很難閱讀代碼!
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()
添加回答
舉報