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

Python中while循环内列表无法添加元素的问题求助

石头剪刀布代码列表仅存最后一个元素的原因分析
  • 输入错误导致跳过添加步骤
    首次运行时,你大概率多次输入了不符合要求的内容(比如拼写错误、输入了指令外的字符),触发了代码里的else分支。这个分支会打印错误提示并执行continue,直接跳过lis.append(res)的步骤。只有最后一次输入是有效的(符合rock/paper/scissors的要求),所以列表里只添加了这最后一次的结果。而次日运行时你每次输入都符合规则,所有结果都被正常追加到列表中。

  • 代码存在未注意的语法问题
    你提供的代码有两个明显的语法问题:

    1. while True:语句前有多余缩进,这会直接触发Python的缩进错误,导致程序无法正常执行。如果首次运行时你没修正这个缩进,程序可能中途崩溃,只保留了之前成功添加的单个元素;次日运行时你可能无意中修正了缩进,程序才完整运行。
    2. 代码缺少import random语句,调用random.choice时会抛出NameError。如果首次运行时你忘记导入这个模块,程序会在第一次生成电脑选择时崩溃,此时若之前有一次有效输入,列表就只会有一个元素;次日运行时你补上了导入语句,程序才能正常循环执行。

修正后的完整可运行代码:

import random

lis = []

while True:
    cho = ["rock", "paper", "scissors"]
    us_in = input("rock, paper or scissors:\n")
    co_in = random.choice(cho)

    if us_in == co_in:
        res = "draw"
    elif us_in == "rock":
        res = "lost" if co_in == "paper" else "win"
    elif us_in == "paper":
        res = "lost" if co_in == "scissors" else "win"
    elif us_in == "scissors":
        res = "lost" if co_in == "rock" else "win"
    elif us_in == "done":
        break
    else:
        print("wrong input")
        continue

    lis.append(res)

print(lis)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:36:25