我目前正在尝试制作a子手游戏。我已经在任何函数外部定义了变量“生存”,但是当尝试在start_game函数内部使用它时,编辑器会说该变量已定义但从未使用过。但是,当我尝试将其声明为全局函数时,无论它是在函数内部还是函数外部,它都会给我一个“无效语法”错误-特别是在赋值运算符'='处。
import random
words = "dog cat log hog etc" # <-- just a huge string of a bunch of words
words = words.split()
word = random.choice(words)
# Difficulties: Easy:12 Medium:9 Hard:6
lives = 0
current = "_" * len(word)
def gameLoop():
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():
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()
答案 0 :(得分:1)
当我写这个问题的时候,我意识到自己做错了,所以我决定自己回答。
当您将变量定义为全局变量时,您不想再为变量分配变量,就像这样:
global lives = 0
那会给你一个错误。为什么?当您要将变量定义为全局变量时,您会告诉计算机:“嘿,此变量在全局范围内使用,而不是局部使用。”上面的代码行的问题在于,当您在此时要告诉计算机变量是全局变量时,您还正在为变量分配一个值。如果要为变量分配一个值(无论是第一次还是重新分配),则需要在另一行代码上分配该值。
当我查找此内容时,我没有发现任何明确的说法,因此希望这对使用python进行编码的新手或忘记了python的工作原理的人有所帮助。
答案 1 :(得分:0)
首先,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()