列表索引验证问题求助:编写统计数字出现次数及索引的程序
问题分析与代码修正
首先,咱们来拆解下你的代码里存在的几个核心问题:
- 输入数量不符:
range(0,21)会让你输入21个数字,但需求是20个,应该改成range(20)或者range(0,20)。 - 索引获取逻辑错误:
x.index(y)只会返回第一个匹配值的索引,而且如果目标数字不在列表里,这个方法会直接抛出报错,不会返回False,所以你的if r == True判断完全不成立,还会导致程序崩溃。 - 未实现核心需求:你没有统计目标数字的出现次数,也没收集所有对应的索引位置。
下面是修正后的完整代码:
# 初始化空列表用于存储数字 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
相关产品推荐
相关产品推荐

