Blackjack游戏stick函数异常:循环结束后胜负判断语句未执行
问题分析与解决
你的stick函数中胜负判断逻辑未正常执行(尤其是失败分支无输出,部分场景还会触发报错),核心问题有以下几点:
1. 失败分支缺少输出语句
代码最后一个else块仅定义了格式化字符串,但未调用print()函数输出内容,导致程序不会打印失败结果:
else: # 仅创建字符串,未执行输出 (f"You lose!\n The NPC had a final score of {npc_final_score} while yours was {user_final_score}")
2. randomCard变量可能未定义
当NPC初始手牌总分就≥16时,不会进入补牌的while循环,randomCard变量从未被赋值。此时若NPC总分超过21,执行第一个print语句时会因引用未定义变量报错。
3. 冗余代码与索引越界隐患
while循环内的if npc_final_score >=16: break是多余的:循环条件本身就是npc_final_score <16,分数达标后循环会自动终止,无需手动中断。random.randint(0, len(cards))会触发索引越界:列表索引范围是0到len(cards)-1,原代码的上限值会导致取到超出列表长度的索引。
修改后的代码
def stick(): global randomCard global npc_final_score global user_final_score npc_final_score = int(npc_card[0]) + int(npc_card[1]) user_final_score = int(user_card[0]) + int(user_card[1]) print(f"The NPCs cards are {npc_final_score} ") # 初始化变量,避免未定义报错 randomCard = "" if npc_final_score < 16: while npc_final_score < 16: # 修正索引范围,避免越界 randomInt = random.randint(0, len(cards)-1) randomCard = cards[randomInt] npc_final_score += int(randomCard) print(f"The NPC drew a {randomCard}, their score is {npc_final_score}") if npc_final_score > 21: # 根据是否补牌调整提示语 if randomCard: print(f"You win!\n Your final score is {user_final_score}\n The NPC drew a {randomCard}, meaning they went bust with a final score of {npc_final_score}") else: print(f"You win!\n Your final score is {user_final_score}\n The NPC went bust with a final score of {npc_final_score}") elif npc_final_score == user_final_score: print(f"You draw!\n Your final score was {user_final_score} and the NPCs final score was also {npc_final_score}") else: # 补全print语句,输出失败结果 print(f"You lose!\n The NPC had a final score of {npc_final_score} while yours was {user_final_score}")
内容的提问来源于stack exchange,提问作者Charlie Cure
相关产品推荐
相关产品推荐

