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

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]}")

代码改进说明

  1. 新增try-except捕获输入非数字的情况,避免程序直接崩溃
  2. 增加输入范围检查,防止列表索引越界
  3. 优化了提示语,让用户明确知道该输入什么
  4. 最后打印用了f-string,让输出结果更清晰直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:05:53