1

現在、コードの再起動に問題があります。再起動しますが、最初に戻りません。再起動するかどうかを尋ね続けます。

たとえば、それは言う

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

1 に答える 1

1

楽しい小さなゲームです。簡単にするために 2 番目のディーラーを削除しましたが、元に戻すのは簡単なはずです。入力を 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!")
于 2013-03-29T17:48:43.340 に答える