You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现War卡牌游戏时如何设置循环直到列表所有元素被弹出

Python卡牌游戏War的循环实现方案

核心修改点

你只需要在注释下方的代码段外层加while循环即可,循环条件设置为牌堆剩余卡牌数量≥2,刚好可以把整副牌全部消耗完后自动终止。同时你原来的代码存在两处逻辑错误需要同步修正:

  • 平局加赛后的加分行u1points + drawturns没有赋值操作,无法正常累加额外积分,需要修改为u1points += drawturns,玩家2的对应逻辑同理修改为u2points += drawturns
  • 平局循环的终止条件if u1card == u2card == False语法逻辑错误,修改为if u1card != u2card即可正常生效

修改后完整代码

import random
def shuffled_deck():
  deck = list(range(2, 15)) *4
  random.shuffle(deck)
  return deck


userdeck = shuffled_deck()
print("welcome to War!")
user1 = input("Player-1 name: ")
user2 = input("Player-2 name: ")
u1points = 0
u2points = 0
drawturns = 0
# 外层循环:牌堆剩余卡牌≥2时持续运行
while len(userdeck) >= 2:
    usercard = userdeck.pop()
    u1card = usercard
    print(user1 + ": " + str(u1card))
    usercard = userdeck.pop()
    u2card = usercard
    print(user2 + ": " + str(u2card))
    if u1card > u2card:
        print(str(u1card) + " is greater than " + str(u2card) + ".")
        print(user1 + " won this round.")
        u1points +=1
    elif u2card > u1card:
        print(str(u2card) + " is greater than " + str(u1card) + ".")
        print(user2 + " won this round.")
        u2points +=1
    else:
        print("It's a draw, try again.")
        # 平局循环也加卡牌数量判断,避免牌堆耗尽时报错
        while u1card == u2card and len(userdeck)>=2:
            drawturns +=1
            usercard = userdeck.pop()
            u1card = usercard
            print(user1 + ": " + str(u1card))
            usercard = userdeck.pop()
            u2card = usercard
            print(user2 + ": " + str(u2card))
            if u1card > u2card:
                print(str(u1card) + " is greater than " + str(u2card) + ".")
                print(user1 + " won this round.")
                u1points +=1
                u1points += drawturns
            elif u2card > u1card:
                print(str(u2card) + " is greater than " + str(u1card) + ".")
                print(user2 + " won this round.")
                u2points +=1
                u2points += drawturns
            else:
                print("It's a draw, try again.")
            if u1card != u2card:
                drawturns = 0
                break

# 循环结束后结算最终结果
print("\n=== 最终结算 ===")
print(f"{user1} 得分:{u1points}")
print(f"{user2} 得分:{u2points}")
if u1points > u2points:
    print(f"恭喜{user1}获得最终胜利!")
elif u2points > u1points:
    print(f"恭喜{user2}获得最终胜利!")
else:
    print("双方平局!")

内容的提问来源于stack exchange,提问作者Collin Dehmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 04:15:04