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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:46:21