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

如何在输入'n'时仅终止对应玩家的Blackjack游戏询问循环?

改进Blackjack游戏代码

原代码

import random

# yes or no
yrn = input("R u going to play black jack? (Y/N): ").upper()
if yrn == "Y":
    player1 = random.randint(1,19)
    player2 = random.randint(1,19)
    print(player1,player2)

    while True:
        player1_yrn = input("Player 1, Do you want more numbers? (Y/N): ").upper()
        if player1_yrn == "Y":
            player1 = player1 + random.randint(1,19)
            print(f"Player 1's number is {player1}")
        else:
            print(f"Player 1's number is {player1}")
            quit()


        player2_yrn = input("Player 2, Do you want more numbers? (Y/N) : ").upper()
        if player2_yrn == "Y":
            player2 = player2 + random.randint(1,19)
            print(f"Player 2's number is {player2}")
        else:
            print(f"Player 2's number is {player2}")

需求说明

当玩家输入N时,仅终止对应玩家的询问循环。例如玩家2输入N后,程序不再询问玩家2,仅继续询问玩家1是否需要加牌。

修改后的代码

import random

# 询问是否开始游戏
start_game = input("要玩Blackjack吗?(Y/N): ").upper()
if start_game == "Y":
    player1_score = random.randint(1, 19)
    player2_score = random.randint(1, 19)
    print(f"初始得分:玩家1 {player1_score},玩家2 {player2_score}")

    # 标记玩家是否还在继续游戏
    player1_playing = True
    player2_playing = True

    # 只要有一个玩家还在玩就继续循环
    while player1_playing or player2_playing:
        # 处理玩家1的回合(如果还在玩)
        if player1_playing:
            choice = input("玩家1,要加牌吗?(Y/N): ").upper()
            if choice == "Y":
                player1_score += random.randint(1, 19)
                print(f"玩家1当前得分:{player1_score}")
                # 判断是否爆牌(超过21),直接结束该玩家游戏
                if player1_score > 21:
                    print("玩家1爆牌了!")
                    player1_playing = False
            else:
                print(f"玩家1最终得分:{player1_score}")
                player1_playing = False

        # 处理玩家2的回合(如果还在玩)
        if player2_playing:
            choice = input("玩家2,要加牌吗?(Y/N): ").upper()
            if choice == "Y":
                player2_score += random.randint(1, 19)
                print(f"玩家2当前得分:{player2_score}")
                if player2_score > 21:
                    print("玩家2爆牌了!")
                    player2_playing = False
            else:
                print(f"玩家2最终得分:{player2_score}")
                player2_playing = False

    # 游戏结束,判定胜负
    print("\n游戏结束!")
    # 处理爆牌情况
    player1_valid = player1_score <= 21
    player2_valid = player2_score <= 21

    if not player1_valid and not player2_valid:
        print("双方都爆牌,平局!")
    elif not player1_valid:
        print("玩家1爆牌,玩家2获胜!")
    elif not player2_valid:
        print("玩家2爆牌,玩家1获胜!")
    else:
        if player1_score > player2_score:
            print("玩家1获胜!")
        elif player2_score > player1_score:
            print("玩家2获胜!")
        else:
            print("平局!")

修改要点

  • 新增player1_playing和player2_playing两个布尔变量,分别控制对应玩家是否继续参与加牌询问
  • 主循环条件改为player1_playing or player2_playing,确保只要有玩家还在玩就继续运行
  • 当玩家输入N或爆牌时,将对应玩家的状态设为False,后续不再询问该玩家
  • 补充了爆牌判定和最终胜负逻辑,让游戏更完整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:05:19