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

列表索引验证问题求助:编写统计数字出现次数及索引的程序

问题分析与代码修正

首先,咱们来拆解下你的代码里存在的几个核心问题:

  1. 输入数量不符:range(0,21)会让你输入21个数字,但需求是20个,应该改成range(20)或者range(0,20)。
  2. 索引获取逻辑错误:x.index(y)只会返回第一个匹配值的索引,而且如果目标数字不在列表里,这个方法会直接抛出报错,不会返回False,所以你的if r == True判断完全不成立,还会导致程序崩溃。
  3. 未实现核心需求:你没有统计目标数字的出现次数,也没收集所有对应的索引位置。

下面是修正后的完整代码:

# 初始化空列表用于存储数字
num_list = []

# 接收20个1-10的有效数字
for _ in range(20):
    while True:
        # 循环确保输入符合要求
        try:
            num = int(input("Introduza numeros: "))
            if 1 <= num <= 10:
                num_list.append(num)
                break
            else:
                print("Por favor, insira um número entre 1 e 10!")
        except ValueError:
            print("Por favor, insira um número válido!")

# 接收用户要查询的数字
target = int(input("Escreva um numero: "))

# 收集所有匹配目标数字的索引
indices = [idx for idx, val in enumerate(num_list) if val == target]
# 计算出现次数
count = len(indices)

# 根据结果输出内容
if count > 0:
    print(f"O número {target} aparece {count} vezes.")
    print(f"Seus índices são: {indices}")
else:
    print("Não ha esse numero")

关键改进说明:

  • 输入验证:添加了循环和异常处理,确保用户输入的是1-10之间的有效整数,避免非法输入导致程序出错。
  • 索引收集:用列表推导式结合enumerate()函数,遍历列表时同时获取索引和对应的值,一次性收集所有目标数字的索引。
  • 次数统计:直接通过匹配索引列表的长度得到出现次数,简单高效。
  • 错误规避:不再依赖index()方法,避免了找不到元素时的崩溃问题,通过判断索引列表长度来决定输出内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:13:01