Python 从21点游戏中获取全局变量
我正在尝试做一个21点游戏,我在玩家手牌、交易商手牌和赌注的全局变量方面遇到了很大的问题,在完成一手牌后重置或清除,以便可以玩新的手牌。在多个函数中引用这些变量时,如何去掉这些全局变量Python 从21点游戏中获取全局变量,python,blackjack,Python,Blackjack,我正在尝试做一个21点游戏,我在玩家手牌、交易商手牌和赌注的全局变量方面遇到了很大的问题,在完成一手牌后重置或清除,以便可以玩新的手牌。在多个函数中引用这些变量时,如何去掉这些全局变量 import os import random import sys d = [] p = [] c = input("How many chips do you want: ") chips = int(c) b = input("Place your bet: ") bet = int(b) def c
import os
import random
import sys
d = []
p = []
c = input("How many chips do you want: ")
chips = int(c)
b = input("Place your bet: ")
bet = int(b)
def card(x):
x.append(random.randint(1, 11))
def clear():
os.system("clear")
def main():
global p
global d
card(p)
card(p)
card(d)
card(d)
show1()
check()
answer = input("Play again? y or n: ")
if answer == "y":
bb = list(b)
bb.clear()
bet.clear()
p.clear()
d.clear()
main()
else:
sys.exit(0)
def show1():
global d
global p
print(str(d[0]) + " []")
print(p)
def show2():
global d
global p
print(d)
print(p)
def win():
print("You win")
chip = chips
bett = bet
stash = chip + bett
print(stash)
def lose():
print("You lose")
chip = chips
bett = bet
stash = chip - bett
print(stash)
def check2():
global p
global d
dealer = sum(d)
player = sum(p)
if player == 21:
win()
elif player > 21:
lose()
elif dealer > 21:
win()
elif dealer == 21:
lose()
elif dealer > player:
lose()
else:
win()
def check():
global d
global p
while sum(p) < 21:
player = sum(p)
dealer = sum(d)
choice = input("Hit or stay? Type h or s: ")
if choice == "h":
clear()
card(p)
show1()
elif player >= 21:
break
else:
break
while sum(d) < sum(p):
dealer = sum(d)
player = sum(p)
card(d)
clear()
show2()
if dealer > player:
break
elif dealer >= 21:
break
else:
check2()
main()
导入操作系统
随机输入
导入系统
d=[]
p=[]
c=输入(“您想要多少芯片:”)
芯片=整数(c)
b=输入(“下注:”)
bet=int(b)
def卡(x):
x、 追加(random.randint(1,11))
def clear():
操作系统(“清除”)
def main():
全局p
全球d
卡片(p)
卡片(p)
卡片(d)
卡片(d)
show1()
检查()
回答=输入(“再次播放?y或n:”)
如果答案=“y”:
bb=列表(b)
bb.clear()
打赌
p、 清除()
d、 清除()
main()
其他:
系统出口(0)
def show1():
全球d
全局p
打印(str(d[0])+“[]”)
印刷品(p)
def show2():
全球d
全局p
印刷品(d)
印刷品(p)
def win():
打印(“你赢了”)
芯片=芯片
打赌
隐藏=芯片+电池
打印(隐藏)
def lose():
打印(“你输了”)
芯片=芯片
打赌
藏=芯片-贝特
打印(隐藏)
def check2():
全局p
全球d
经销商=金额(d)
玩家=总和(p)
如果player==21:
赢()
elif player>21:
失去
elif经销商>21:
赢()
elif经销商==21:
失去
elif经销商>玩家:
失去
其他:
赢()
def check():
全球d
全局p
当总和(p)<21时:
玩家=总和(p)
经销商=金额(d)
选择=输入(“命中或停留?类型h或s:”)
如果选项==“h”:
清除()
卡片(p)
show1()
elif播放器>=21:
打破
其他:
打破
而sum(d)玩家:
打破
elif经销商>=21:
打破
其他:
检查2()
main()
您应该再次查看python中的作用域。在给定的代码中,您根本不需要任何全局
标识符(无论如何,您应该尽量避免使用它们,这对您很有好处)。只要去掉所有带有global
的行就可以了
我试着运行你的代码,看起来你在做一些奇怪的设计。如果我是你,我会再次坐下来,让你的结构(什么函数调用哪个方法,什么时候发生…)正确,因为正如我所看到的,你在做一些糟糕的决定
只是一个简单的例子。当你被问到你想“留下”还是“打”,而你选择“留下”时,这会导致一个循环,玩家失去对他的牌的控制。
另一个例子是
if choice == "h":
clear()
card(p)
show1()
elif player >= 21:
break
else:
break
结构。您的elif
和else
做了相同的事情,那么为什么您同时拥有这两个呢?在这种情况下,只需去掉elif
-语句即可
还有一件事是,使用
os.\u exit(1)
而不是sys.exit(0)
sys.exit(0)
将抛出某种警告,并且您的程序也不会按您希望的方式关闭。您可以利用它来包含和访问与游戏相关的功能,这将使您能够更合理地将事情放在一起。这里有太多的垂直空间。我还通过black
格式化程序运行了您的代码,以使其可读。此外,在codereview.stackexchange.comA上可能更好。起点是将所有全局状态放入名为Game
或GameState
的类中。然后,所有其他方法要么接受GameState
作为参数,要么是Game
的成员函数。