Python中while循环内列表无法添加元素的问题求助
石头剪刀布代码列表仅存最后一个元素的原因分析
输入错误导致跳过添加步骤
首次运行时,你大概率多次输入了不符合要求的内容(比如拼写错误、输入了指令外的字符),触发了代码里的else分支。这个分支会打印错误提示并执行continue,直接跳过lis.append(res)的步骤。只有最后一次输入是有效的(符合rock/paper/scissors的要求),所以列表里只添加了这最后一次的结果。而次日运行时你每次输入都符合规则,所有结果都被正常追加到列表中。代码存在未注意的语法问题
你提供的代码有两个明显的语法问题:while True:语句前有多余缩进,这会直接触发Python的缩进错误,导致程序无法正常执行。如果首次运行时你没修正这个缩进,程序可能中途崩溃,只保留了之前成功添加的单个元素;次日运行时你可能无意中修正了缩进,程序才完整运行。- 代码缺少
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
相关产品推荐
相关产品推荐

