2 回答

TA贡献1812条经验 获得超5个赞
在我写这个问题的时候,我意识到我做错了什么,所以我决定继续自己回答这个问题。
当您将变量定义为全局变量时,您不想像这样为变量分配一个变量:
global lives = 0
那会给你一个错误。为什么?当你想将一个变量定义为全局变量时,你是在告诉计算机,“嘿,这里的这个变量是全局使用的,而不是本地使用的。” 上面这行代码的问题在于,您还为变量分配了一个值,而此时您应该做的就是告诉计算机该变量是全局的。如果你想给变量赋值(无论是第一次还是重新赋值),那么你需要在不同的代码行上赋值。
当我查找这个时,我没有发现任何明确的说法,所以我希望这有助于任何使用 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()
添加回答
举报