我正在尝试制作二十一点游戏,并且在玩家手,发牌手的全局变量方面存在很大的麻烦,并且在完成一手牌之后下注重置或清除,因此可以玩新手。如何在多个函数中引用这些全局变量时摆脱这些全局变量?
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()
您应该再次查看python中的Scopes Scopes。在给定的代码中,您根本不需要任何global
标识符(无论如何,您都应尽量避免使用它们,这对您有好处)。只需删除其中所有带有global
的行,就可以很好地工作。