Python问卷数据处理程序报错:int对象不可迭代问题求助
问题分析与修复方案
核心错误原因
你遇到的TypeError: 'int' object is not iterable错误,是因为在ask()函数中,你尝试直接遍历整数points:
for i in points:
整数不是可迭代对象,Python的for循环只能遍历列表、元组、range生成器这类可迭代结构。
修复步骤
1. 修复ask()函数的循环
把循环行改成使用range()生成指定次数的迭代器,同时去掉多余的i += 1(range会自动完成迭代计数):
# 原错误代码 # for i in points: # ... # i += 1 # 修复后 for _ in range(points): a1 = input("please enter a1 \n") a2 = input("please enter a2 \n") a = [int(a1), int(a2)] self.dat.append(a) os.system("cls")
这里用_作为循环变量,因为我们不需要用到这个变量的值,只是需要循环指定次数。
2. 清理冗余变量
ask()函数里的x = True、y = 1、n = 2等变量完全没用到,可以直接删除,简化代码。
3. 修复filt()函数的潜在错误
你的filt()函数同样存在整数不可迭代的问题,而且遍历列表时直接pop()元素会导致索引错乱(列表长度变化后,后续索引指向的元素会偏移),建议修改如下:
def filt(self): # 用列表推导式过滤,避免索引问题 # 假设你要过滤掉第二个元素为1的条目(对应原代码中j初始为1的判断逻辑) self.dat = [item for item in self.dat if item[1] != 1] print(self.dat)
如果你的过滤逻辑有其他需求,可以调整列表推导式的条件,但避免在遍历列表时直接修改原列表。
完整修复后的核心代码片段
class question(): def __init__(self,qst): self.qst = qst self.dat = [] print(self.qst) def filt(self): # 过滤掉第二个元素为1的条目,可根据需求调整条件 self.dat = [item for item in self.dat if item[1] != 1] print(self.dat) def ask(self): points = input("how many answers did you get?") points = int(points) print(points) for _ in range(points): a1 = input("please enter a1 \n") a2 = input("please enter a2 \n") a = [int(a1), int(a2)] self.dat.append(a) os.system("cls") os.system("cls") print(self.dat) def search(self): print("TODO: make this work")
内容的提问来源于stack exchange,提问作者Lincoln
相关产品推荐
相关产品推荐

