尝试在函数中添加两个全局变量时出现语法错误

时间:2019-12-12 18:36:49

标签: python

我正在尝试编写俄罗斯轮盘游戏的代码,但在一行特定代码上却不断出现错误。我已经进行了一些研究,无法找出问题所在。我在行的+ =部分得到了无效的语法错误

global pot += global aibet

不确定为什么会这样吗?这是上下文的其余代码:

import random

pot = 0
playerbudget = 500
aibudget = 500
playerbet = 0
aibet = 0
deathspin = 6


def AIbet():
    print()
    aibet = random.randint(50,250)
    print("The AI bets: $",aibet,sep="")

def AIspin():
    print()
    print("The AI spins the chamber...")
    print("...And pulls the trigger.")
    print()
    dead = 6

if dead == deathspin:
    print("The AI lands on the bad cartridge")
    print()
    global pot += global aibet
    aibudget -= aibet
    print("The pot is currently: $",pot,sep="")
    print("The AI has a hand of $",aibudget,".",sep="")

2 个答案:

答案 0 :(得分:1)

您说global pot += global aibet

时对global的使用不正确

在较低范围(如函数或类)中使用global关键字将告诉python使用该变量的全局版本,而不是本地版本。 (您可以使用globals()访问全局变量的字典)。

这意味着在每个修改potaibet的函数中,都需要在使用变量之前将其声明为global

这可能会变得混乱,除非绝对必要(对于您的情况而言,这是不必要的),否则不赞成使用global这样的变量。

因此,首先,要解决您的问题,您将需要:

  1. 在使用任何一个变量之前,将其添加到您的AIbet函数中。请记住,这是告诉解释器使用这些变量的全局版本而不是本地版本。
global pot
global aibet
  1. 将此添加到您的AIspin函数中。您稍后将在代码的全局范围内的dead语句中使用if,因此dead也需要为global
global dead
  1. 我推测您的if dead == deathspin:语句应该缩进并放在AIspin函数中。在这种情况下,您唯一要做的更改就是像为pot所做的那样为aibetaibudgetdead添加全局声明,并替换{{ 1}}和global pot += global aibet。这样做为您的pot += aibet函数提供了此功能:
AIspin

但是,您是否不认为这看起来很糟糕,并且充满了不必要的def AIspin(): global dead global pot global aibet global aibudget print() print("The AI spins the chamber...") print("...And pulls the trigger.") print() dead = 6 if dead == deathspin: print("The AI lands on the bad cartridge") print() pot += aibet aibudget -= aibet print("The pot is currently: $",pot,sep="") print("The AI has a hand of $",aibudget,".",sep="") 语句?相反,请改用基于global的方法,您无需传递那么多的全局变量。看起来像这样:

class

然后您将使用此类:

import random

class RussianRoulette:
    def __init__(self):
        self.pot = 0
        self.playerbudget = 500
        self.aibudget = 500
        self.playerbet = 0
        self.aibet = 10
        self.deathspin = 6
        self.dead = 6

    def ai_bet(self):
        print()
        self.aibet = random.randint(50,250)
        print(f"The AI bets: ${self.aibet:.2f}")
        return

    def ai_spin(self):
        print()
        print("The AI spins the chamber...")
        print("...And pulls the trigger.")
        print()
        if self.dead == self.deathspin:
            print("The AI lands on the bad cartridge")
            print()
            self.pot += self.aibet
            self.aibudget -= self.aibet
            print(f"The pot is currently: ${self.pot:.2f}")
            print(f"The AI has a hand of ${self.aibudget:.2f}")
        return

哪个输出:

game = RussianRoulette()
game.ai_spin()
game.ai_spin()
game.ai_spin()

摘要:避免使用The AI spins the chamber... ...And pulls the trigger. The AI lands on the bad cartridge The pot is currently: $10.00 The AI has a hand of $490.00 The AI spins the chamber... ...And pulls the trigger. The AI lands on the bad cartridge The pot is currently: $20.00 The AI has a hand of $480.00 The AI spins the chamber... ...And pulls the trigger. The AI lands on the bad cartridge The pot is currently: $30.00 The AI has a hand of $470.00 ,并尽可能使用类方法。您可以将“共享”变量打包到类实例中。类实例就像变量的容器一样(在您的情况下)。我们可以在类的方法中的任何位置访问变量,方法是在变量名前添加global(假设这就是您命名的第一个参数)。

考虑阅读:

  1. Easy to follow tutorial on python classes
  2. Official documentation on python classes

答案 1 :(得分:0)

这不是全球化的原理。试试这个:

global pot 
global aibet
pot += aibet