从二十一点游戏中获取全局变量

问题描述 投票:0回答:1

我正在尝试制作二十一点游戏,并且在玩家手,发牌手的全局变量方面存在很大的麻烦,并且在完成一手牌之后下注重置或清除,因此可以玩新手。如何在多个函数中引用这些全局变量时摆脱这些全局变量?

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 blackjack
1个回答
0
投票

您应该再次查看python中的Scopes Scopes。在给定的代码中,您根本不需要任何global标识符(无论如何,您都应尽量避免使用它们,这对您有好处)。只需删除其中所有带有global的行,就可以很好地工作。

© www.soinside.com 2019 - 2024. All rights reserved.