如何在输入'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
相关产品推荐
相关产品推荐

