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

Python入门纸牌游戏项目while循环运行异常问题求助

问题修复方案

原代码核心问题

  • 输入指令仅读取一次:input() 写在while循环外部,程序只会在循环启动前获取一次用户输入,后续循环始终复用第一次的输入值,导致无法响应新的指令,出现重复执行同一分支的问题。
  • 卡牌数值存储格式错误:sample() 返回的是列表,直接append到cards会让列表内嵌套子列表,后续求和时会触发类型错误。
  • 循环终止逻辑错误:输入stay后没有直接设置终止标记,仅在总和≥21时才停止循环,不符合需求;同时每次hit添加卡牌后没有判断总和是否超限,无法触发自动终止逻辑。
  • 缺少随机模块导入:代码中用到的seed()、sample()都属于random模块,未导入会直接报错。
  • 变量命名冲突:使用内置函数名sum作为自定义变量名,会覆盖原有内置功能。

修正后完整代码

import random

def cards_game():
    cards = []
    random.seed(1)
    sequence = [i for i in range(10)]
    print("现在你可以抽取随机卡牌,输入\"hit\"抽卡,输入\"stay\"停止抽卡")
    loop_running = True
    while loop_running:
        # 每次循环重新读取用户指令
        command = input("请输入操作指令:\n>>> ")
        if command == 'hit':
            # 直接获取单个随机数值,避免嵌套列表
            cards.append(random.choice(sequence))
            # 每次抽卡后判断是否超限
            total = sum(cards)
            if total >= 21:
                print(f"当前卡牌总和为{total},已达到或超过21,游戏结束")
                loop_running = False
        elif command == 'stay':
            total = sum(cards)
            print(f"你选择停止抽卡,当前卡牌总和为{total}")
            # 输入stay直接终止循环
            loop_running = False
        else:
            print("无效指令,请重新输入")

cards_game()

关键改动说明

  • 将input()移入while循环内部,每次循环都重新获取用户输入,响应不同指令,解决重复执行同一分支的问题。
  • 用random.choice()替代sample()直接获取单个数值,避免列表嵌套问题,求和逻辑可以直接用内置sum()函数实现。
  • 调整终止逻辑:输入stay直接终止循环;每次抽卡后自动计算总和,≥21时直接终止,符合需求。
  • 补充random模块导入,替换自定义变量名避免和内置函数冲突。

内容的提问来源于stack exchange,提问作者Mayuresh U. Satam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:45:03