当卡在Python中是并列的时,程序不能正确循环

2024-09-26 22:55:40 发布

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

我正在创建一个Python应用程序来模拟纸牌游戏战争。在游戏大战中,两个玩家都抽一张牌。获胜者是价值最高的牌。如果抽到的两张牌是平局,玩家必须先抽另一张牌,直到他们抽到不匹配的牌,然后再转入下一回合。在

我写的应用程序应该提示用户,如果他们准备玩一轮。当他们输入“是”时,程序将随机处理两张卡片并打印出赢家。shell中的结果应如下所示:

准备好打一局了吗?是的 玩家甲:4 玩家乙:Q 赢家:玩家B

我几乎把整个程序都写了,但我最纠结的是两张牌打成平手。当两张牌打成平手时,程序应该再抽两张牌,直到两张牌不平手为止。结果如下:

准备好打一局了吗?是的 玩家甲:5 球员乙:5 领带 玩家甲:A 球员乙:3 获胜者:玩家A

目前,当我运行下面的代码时,如果卡牌平局,程序会提示用户再玩一轮。这是不正确的,因为当牌打成平手时,在同一轮中应该再发两张牌。基本上,我认为我需要的是函数war中的while循环,但是我不知道如何设置循环。我目前设置的while循环只是默认回到主功能,然后再画另一张卡。谁能给我提个建议吗?非常感谢大家的帮助。在

import random
def shuffleDeck():
    suits = {'\u2660','\u2661','\u2662','\u2663'}
    ranks = {'2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'}

    deck = []

    for suit in suits:
        for rank in ranks:
            deck.append(rank + ' ' + suit)

    random.shuffle(deck)
    return deck

def total(hand):
    values = {'2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, '1':10, 'A':14, 'K':13, 'Q':12, 'J':11}
    result = values[hand[0]]
    return result

def dealCard(deck):
    card = deck.pop(0)
    return card

def compareHands(playerOne, playerTwo):
    playerOneTotal, playerTwoTotal = total(playerOne), total(playerTwo)
    if playerOneTotal > playerTwoTotal:
        result = 1
    elif playerOneTotal < playerTwoTotal:
        result = -1
    else:
        result = 0
    return result

def war(playerOneDeck, playerTwoDeck):
    playerOneWins = 0
    playerTwoWins = 0
    ties = 0
    if len(playerOneDeck) > 0:
        playGame = input('Ready to play a round? ')
        if playGame == 'y':
            playerOneCard = dealCard(playerOneDeck)
            playerTwoCard = dealCard(playerTwoDeck)
            print('Player A: ', playerOneCard[0], '\nPlayer B: ', playerTwoCard[0])
            result = compareHands(playerOneCard, playerTwoCard)
            if result == 1:
                playerOneWins += 1
                print('Winner: Player A')
            elif result == -1:
                 playerTwoWins += 1
                 print('Winner: Player B')
            else:
                ties += 1
                print('Tie')
                while result == 0:
                    war(playerOneDeck, playerTwoDeck)


            war(playerOneDeck, playerTwoDeck)
    else:
        print('End of game.  Player A won {} rounds and Player B won {} rounds.'.format(playerOneWins, playerTwoWins))

deck = shuffleDeck()
playerOneDeck = deck[26:]
playerTwoDeck = deck[:26]
war(playerOneDeck, playerTwoDeck)

Tags: 程序returnifdef玩家resulttotalplayer
1条回答
网友
1楼 · 发布于 2024-09-26 22:55:40

我找到了一个有效的while循环。我不确定这是否是编写它的最简洁的方式,但是函数war中的while循环现在可以正常工作了。在

import random
def shuffleDeck():
    suits = {'\u2660','\u2661','\u2662','\u2663'}
    ranks = {'2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'}

    deck = []

    for suit in suits:
        for rank in ranks:
            deck.append(rank + ' ' + suit)

    random.shuffle(deck)
    return deck

def total(hand):
    values = {'2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, '1':10, 'A':14, 'K':13, 'Q':12, 'J':11}
    result = values[hand[0]]
    return result

def dealCard(deck):
    card = deck.pop(0)
    return card

def compareHands(playerOne, playerTwo):
    playerOneTotal, playerTwoTotal = total(playerOne), total(playerTwo)
    if playerOneTotal > playerTwoTotal:
        result = 1
    elif playerOneTotal < playerTwoTotal:
        result = -1
    else:
        result = 0
    return result

def war(playerOneDeck, playerTwoDeck):
    playerOneWins = 0
    playerTwoWins = 0
    ties = 0
    if len(playerOneDeck) > 0:
        playGame = input('Ready to play a round? ')
        if playGame == 'y':
            playerOneCard = dealCard(playerOneDeck)
            playerTwoCard = dealCard(playerTwoDeck)
            print('Player A: ', playerOneCard[0], '\nPlayer B: ', playerTwoCard[0])
            if compareHands(playerOneCard, playerTwoCard) == 1:
                playerOneWins += 1
                print('Winner: Player A')
            elif compareHands(playerOneCard, playerTwoCard) == -1:
                playerTwoWins += 1
                print('Winner: Player B')

            while compareHands(playerOneCard, playerTwoCard) == 0:
                ties += 1
                print('Tie')
                playerOneCard = dealCard(playerOneDeck)
                playerTwoCard = dealCard(playerTwoDeck)
                print('Player A: ', playerOneCard[0], '\nPlayer B: ', playerTwoCard[0])
                if compareHands(playerOneCard, playerTwoCard) == 1:
                    playerOneWins += 1
                    print('Winner: Player A')
                elif compareHands(playerOneCard, playerTwoCard) == -1:
                    playerTwoWins += 1
                    print('Winner: Player B')                  

            war(playerOneDeck, playerTwoDeck)

    else:
        print('End of game.  Player A won {} rounds and Player B won {} rounds.'.format(playerOneWins, playerTwoWins))

deck = shuffleDeck()
playerOneDeck = deck[26:]
playerTwoDeck = deck[:26]
war(playerOneDeck, playerTwoDeck)

相关问题 更多 >

    热门问题