Python for循环报错TypeError:整数不可迭代,求问题排查
问题描述
本人刚接触Python,习惯Java的for循环写法,现需实现一个判断绳索组合长度的函数:输入短绳数量、长绳数量和目标长度,短绳长1米、长绳长5米,若目标长度可通过绳索组合得到则返回True,否则返回False。但编写的代码运行时抛出TypeError: argument of type 'int' is not iterable错误,已尝试修改for循环但无效,附上代码及回溯信息。
代码
def wantedLength(short_amount, long_amount, wanted_length): short_rope_length = 1 long_rope_length = 5 for i in range(short_amount + 1): for j in range(long_amount + 1): my_length = [short_rope_length * i + long_rope_length * j, ", "] if wanted_length in my_length: return True else: return False
回溯信息(中文翻译)
回溯(最近的调用最后):
文件 "C:\Users\barva\PycharmProjects\Giraffe\Ariel-Exc\Exc_2.py", 第89行, 在中
print(wantedLength(a,b,c))
文件 "C:\Users\barva\PycharmProjects\Giraffe\Ariel-Exc\Exc_2.py", 第73行, 在 wantedLength 中
if wanted_length in my_length:
TypeError: 'int'类型的参数不可迭代
错误原因分析
- 变量赋值逻辑错误:循环内每次都会重新给
my_length赋值,导致它最终只保留最后一次循环计算的[长度值, ", "]列表,完全没有收集所有可能的绳索组合长度。 - 潜在的变量类型问题:如果实际运行的代码中不小心将
my_length赋值为单个整数(比如去掉列表包裹,写成my_length = short_rope_length * i + long_rope_length * j),执行wanted_length in my_length时就会触发int不可迭代的错误——因为in操作符要求右侧是可迭代对象(比如列表、元组),单个整数不满足要求。 - 逻辑效率低下:即使收集了所有长度再检查也是冗余操作,完全可以在循环中找到符合条件的组合时直接返回结果。
修正后的代码
方式一:提前返回(推荐,更高效)
def wantedLength(short_amount, long_amount, wanted_length): short_len = 1 long_len = 5 # 遍历所有可能的长绳使用数量 for j in range(long_amount + 1): used_long = j * long_len remaining = wanted_length - used_long # 剩余长度需非负且不超过短绳可用数量 if remaining >= 0 and remaining <= short_amount: return True return False
这种方式无需嵌套循环,直接计算剩余长度是否能被短绳覆盖,执行效率更高。
方式二:嵌套循环收集并检查
def wantedLength(short_amount, long_amount, wanted_length): short_len = 1 long_len = 5 possible_lengths = [] for i in range(short_amount + 1): for j in range(long_amount + 1): possible_lengths.append(i * short_len + j * long_len) return wanted_length in possible_lengths
这种方式先收集所有可能的组合长度,再检查目标值是否在其中,逻辑更直观。
内容的提问来源于stack exchange,提问作者Bar Vakrat
相关产品推荐
相关产品推荐

