Python列表赋值报错:需整数或切片而非字符串,求修复方案
修复列表索引报错:字符串不能作为列表下标
嘿,我来帮你排查这个问题~你遇到的「必须是整数或切片,而非字符串」错误,核心原因是你没有把输入的字符串真正转换成整数并赋值给变量,还有几个小细节也需要调整,我一步步给你拆解:
问题点分析
变量初始化错误
你写的Choice = int是把Python的整数类型赋值给了Choice,不是一个具体的整数值,这会导致第一次循环判断Choice != 0时直接出错。应该把初始值设为一个非0的整数,比如Choice = 1。类型转换未保存结果
int(Choice)这行只是临时做了类型转换,但没有把转换后的整数存回Choice变量里,所以Choice始终是input()返回的字符串类型。用字符串当列表下标肯定会触发报错,必须把转换结果重新赋值给Choice:
要么直接合并写:Choice = int(input("Prompt: enter hobby")),要么分两步:Choice = input("Prompt: enter hobby") Choice = int(Choice)缺少输入合法性检查
如果用户输入非数字(比如字母),直接转int会崩溃;另外你的Tally列表只有5个元素(索引0-4),如果用户输入5或更大的数,会触发索引越界错误,所以要限制输入范围在0-4之间(对应你最后打印的1-4索引)。
修复后的完整代码
Tally = [0, 0, 0, 0, 0] Choice = 1 # 初始化非0整数,确保能进入循环 while Choice != 0: try: Choice = int(input("Prompt: enter hobby (1-4, 0 to quit): ")) # 检查输入范围,避免索引越界 if 1 <= Choice <= 4: Tally[Choice] = Tally[Choice] + 1 elif Choice != 0: print("请输入1-4之间的数字,或者0退出!") except ValueError: print("请输入有效的整数!") Choice = 1 # 重置为非0,让循环继续 # 打印统计结果,优化输出可读性 for Index in range(1, 5): print(f"Hobby {Index}: 选中次数 {Tally[Index]}")
代码改进说明
- 新增
try-except捕获输入非数字的情况,避免程序直接崩溃 - 增加输入范围检查,防止列表索引越界
- 优化了提示语,让用户明确知道该输入什么
- 最后打印用了f-string,让输出结果更清晰直观
内容的提问来源于stack exchange,提问作者lau
相关产品推荐
相关产品推荐

