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

时间:2018-12-12 14:32:59

标签: python python-3.x syntax

我目前正在尝试制作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()

2 个答案:

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