当尝试在任何地方定义全局变量时,我得到“无效语法”

2024-05-15 01:42:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试做一个刽子手游戏。我已经在任何函数外定义了变量“lives”,但是当试图在start\u 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()

Tags: ofto函数game定义modeeasyrandom
2条回答

首先,global语句是一个声明,而不是一个可执行语句。它只是告诉解释器查看模块名称空间,而不是函数调用名称空间。它只需要在函数内部使用

在外部,本地和全局名称空间是相同的(模块名称空间),因此global语句不起任何作用

语句必须是关键字global,后跟逗号分隔的列表 将被视为全局的名称。如果要将值赋给任何名称(全局或非全局),则必须在单独的赋值语句中这样做

你可能想要一些更像下面的代码,它将“工作”(我意识到这只是一个开发中的部分程序),因为你想要它。我修正了缩进以符合pep8,因为我的老眼睛发现它太难阅读代码否则

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

当我写这个问题的时候,我意识到我做错了什么,所以我决定自己来回答这个问题

当您将一个变量定义为全局变量时,您不希望将该变量指定为一个变量,就像这样:

global lives = 0

那会给你一个错误。为什么?当你想将一个变量定义为全局变量时,你告诉计算机,“嘿,这里的这个变量是全局使用的,而不是局部使用的。”上面这行代码的问题是,当你要做的就是告诉计算机这个变量是全局变量时,你也在给这个变量赋值。如果要为变量赋值(无论是第一次还是重新赋值),则需要在不同的代码行上赋值

当我查到这个时,我没有发现任何明确的说法,所以我希望这能帮助任何新使用python编码的人,或者像我一样忘记它是如何工作的人

相关问题 更多 >

    热门问题