我正在尝试编写俄罗斯轮盘游戏的代码,但在一行特定代码上却不断出现错误。我已经进行了一些研究,无法找出问题所在。我在行的+ =部分得到了无效的语法错误
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="")
答案 0 :(得分:1)
您说global pot += global aibet
在较低范围(如函数或类)中使用global
关键字将告诉python使用该变量的全局版本,而不是本地版本。 (您可以使用globals()
访问全局变量的字典)。
这意味着在每个修改pot
和aibet
的函数中,都需要在使用变量之前将其声明为global
。
这可能会变得混乱,除非绝对必要(对于您的情况而言,这是不必要的),否则不赞成使用global
这样的变量。
因此,首先,要解决您的问题,您将需要:
AIbet
函数中。请记住,这是告诉解释器使用这些变量的全局版本而不是本地版本。global pot
global aibet
AIspin
函数中。您稍后将在代码的全局范围内的dead
语句中使用if
,因此dead
也需要为global
。global dead
if dead == deathspin:
语句应该缩进并放在AIspin
函数中。在这种情况下,您唯一要做的更改就是像为pot
所做的那样为aibet
,aibudget
和dead
添加全局声明,并替换{{ 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 :(得分:0)
这不是全球化的原理。试试这个:
global pot
global aibet
pot += aibet