21点,不会用python重新启动游戏

2024-09-29 21:48:56 发布

您现在位置:Python中文网/ 问答频道 /正文

现在重新启动代码时遇到问题。它会重新启动,但不会回到开始。它总是问我要不要重新开始。在

例如它说

The player has cards [number, number, number, number, number] with a total value of (whatever the numbers add up too.)

--> Player is busted!

Start over? Y/N

我输入Y,它一直在说

The player has cards [number, number, number, number, number] with a total value of (whatever the numbers add up too.)

--> Player is busted!

Start over? Y/N

谁能修好它,让它重新启动吗。-或者告诉我我的代码在下面。在

from random import choice as rc
def playAgain():
# This function returns True if the player wants to play again, otherwise it returns False.
print('Do you want to play again? (yes or no)')
return input().lower().startswith('y')
def total(hand):
# how many aces in the hand
aces = hand.count(11)
t = sum(hand)
# you have gone over 21 but there is an ace
if t > 21 and aces > 0:
    while aces > 0 and t > 21:
        # this will switch the ace from 11 to 1
        t -= 10
        aces -= 1
return t
cards = [2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11]
c2win = 0 # computer2 win
cwin = 0  # computer win 
pwin = 0  # player win 
while True:
player = []
player.append(rc(cards))
player.append(rc(cards))
pbust = False  # player busted 
cbust = False  # computer busted
c2bust = False # computer2 busted
while True:
    tp = total(player)
    print ("The player has cards %s with a total value of %d" % (player, tp))
    if tp > 21:
        print ("--> Player is busted!")
        pbust = True
        print('Start over? Y/N')
        answer = input()
        if answer == 'n':
            done = True
            break
    elif tp == 21:
        print ("\a BLACKJACK!!!")
        print("do you want to play again?")
        answer = input()
        if answer == 'y':
            done = False
        else:
            break
    else:
        hs = input("Hit or Stand/Done (h or s): ").lower()
        if 'h' in hs:
            player.append(rc(cards))
        if 's' in hs:
            player.append(rc(cards))
while True:
    comp = []
    comp.append(rc(cards))
    comp.append(rc(cards))
while True:
    comp2 = []
    comp.append(rc(cards))
    comp.append(rc(cards))
    while True:
        tc = total(comp)                
        if tc < 18:
            comp.append(rc(cards))
        else:
            break
    print ("the computer has %s for a total of %d" % (comp, tc))
    if tc > 21:
        print ("--> Computer is busted!")
        cbust = True
        if pbust == False:
            print ("Player wins!")
            pwin += 1
            print('Start over? Y/N')
        answer = input()
        if answer == 'y':
            playAgain()  
        if answer == 'n':
            done = True
    elif tc > tp:
        print ("Computer wins!")
        cwin += 1
    elif tc == tp:
        print ("It's a draw!")
    elif tp > tc:
        if pbust == False:
            print ("Player wins!")
            pwin += 1
        elif cbust == False:
            print ("Computer wins!")
            cwin += 1
    break
print
print ("Wins, player = %d  computer = %d" % (pwin, cwin))
exit = input("Press Enter (q to quit): ").lower()
if 'q' in exit:
    break
print
print
print ("Thanks for playing blackjack with the computer!")

Tags: theanswerfalsetruenumberiftotalcards
1条回答
网友
1楼 · 发布于 2024-09-29 21:48:56

有趣的小游戏,我删除了第二个经销商为简单,但它应该很容易添加回来。我将input改为raw_input,这样您就可以从中获取一个字符串,而不必输入引号。对逻辑进行了一些修改,重新设置格式并添加了注释。在

from random import choice as rc

def play_again():
    """This function returns True if the player wants to play again,
    otherwise it returns False."""
    return raw_input('Do you want to play again? (yes or no)').lower().startswith('y')

def total(hand):
    """totals the hand"""
    #special ace dual value thing
    aces = hand.count(11)
    t = sum(hand)
    # you have gone over 21 but there is an ace
    while aces > 0 and t > 21:
        # this will switch the ace from 11 to 1
        t -= 10
        aces -= 1
    return t

cards = [2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11]
cwin = 0  # computer win
pwin = 0  # player win
while True:
    # Main Game Loop (multiple hands)
    pbust = False  # player busted
    cbust = False  # computer busted
    # player's hand
    player = []
    player.append(rc(cards))
    player.append(rc(cards))
    pbust = False  # player busted
    cbust = False  # computer busted
    while True:
        # Player Game Loop (per hand)
        tp = total(player)
        print ("The player has cards %s with a total value of %d" % (player, tp))
        if tp > 21:
            print (" > Player is busted!")
            pbust = True
            break
        elif tp == 21:
            print ("\a BLACKJACK!!!")
            break
        else:
            hs = raw_input("Hit or Stand/Done (h or s): ").lower()
            if hs.startswith('h'):
                player.append(rc(cards))
            else:
                break
    #Dealers Hand
    comp = []
    comp.append(rc(cards))
    comp.append(rc(cards))
    tc = total(comp)
    while tc < 18:
        # Dealer Hand Loop
        comp.append(rc(cards))
        tc = total(comp)
    print ("the computer has %s for a total of %d" % (comp, tc))
    if tc > 21:
        print (" > Computer is busted!")
        cbust = True

    # Time to figure out who won
    if cbust or pbust:
        if cbust and pbust:
            print ("both busted, draw")
        elif cbust:
            print ("Player wins!")
            pwin += 1
        else:
            print ("Computer wins!")
            cwin += 1
    elif tc < tp:
        print ("Player wins!")
        pwin += 1
    elif tc == tp:
        print ("It's a draw!")
    else:
        print ("Computer wins!")
        cwin += 1

    # Hand over, play again?
    print ("\nWins, player = %d  computer = %d" % (pwin, cwin))
    exit = raw_input("Press Enter (q to quit): ").lower()
    if 'q' in exit:
       break

print ("\n\nThanks for playing blackjack with the computer!")

相关问题 更多 >

    热门问题