python-3.x 当我尝试在任何地方定义全局变量时,出现“无效语法”[重复]

vvppvyoh  于 2022-12-14  发布在  Python
关注(0)|答案(2)|浏览(122)

此问题在此处已有答案

Invalid syntax on '=' when using global(1个答案)
Python - Change variable outside function without return(4个答案)
4小时前关门了。
我目前正在尝试制作一个hangman game。我已经在任何函数之外定义了变量lives,但是当我尝试在start_game函数中使用它时,编辑器会说变量已经定义但从未使用过。然而当我尝试将它声明为全局变量时,无论它是在函数内部还是外部,它都会给我一个“invalid syntax”错误-特别是在赋值运算符“=”处。

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()
ffx8fchx

ffx8fchx1#

当我写这个问题的时候,我意识到我做错了什么,所以我决定继续自己回答这个问题。
当你把一个变量定义为全局变量时,你不想像这样当场给这个变量赋值:

global lives = 0

字符串
这会给予你一个错误,为什么?当你想定义一个全局变量时,你告诉计算机,“嘿,这个变量是全局使用的,以上代码行的问题是,您也在为变量赋值,而此时您应该做的只是告诉计算机该变量是全局变量。如果您想为变量赋值(无论是第一次还是重新赋值),那么您需要在不同的代码行上赋值。
当我查阅这篇文章时,我没有发现任何明确说明这一点的内容,所以我希望这篇文章能帮助那些不熟悉python编码的人,或者像我一样忘记了它是如何工作的人。

n1bvdmb6

n1bvdmb62#

首先,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()

相关问题