二十一点,不会在python中重启游戏

时间:2013-03-29 14:37:50

标签: python python-3.x

现在我无法重启代码。它重新启动但它不会回到开头。它一直在问我是否要重新启动。

例如它说

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!")

1 个答案:

答案 0 :(得分:1)

有趣的小游戏,为了简单起见,我删除了第二个经销商,但它应该很容易重新添加。我将输入更改为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!")