Python问题:无for循环找120-200间被7和5整除的数报错求解
解决你的Python代码问题
先来看你遇到的问题——你写的代码触发了TypeError,咱们先拆解原因:
你的尝试代码:
x = range(120, 200) if x % 7 == 0 and x % 5 == 0: print(x)报错信息:
Traceback (most recent call last): File "C:\Users\User\Desktop\skillshare-code\if else statements\4.py", line 11, in <module> if x % 7 == 0 and x % 5 == 0: TypeError: unsupported operand type(s) for %: 'range' and 'int'
错误根源
你把x赋值成了range(120, 200),这是一个range对象,它代表的是一个整数序列,而不是单个整数。Python没办法对一个序列和整数做取模(%)运算,所以直接报错了。
满足需求的解决方案(无for循环)
你的需求是:找出120到200之间能同时被7和5整除的数,且不能用for循环。咱们有两种简洁的实现方式:
方法一:利用数学规律 + range步长(最优解)
能同时被7和5整除的数,一定是它们最小公倍数的倍数。7和5互质,最小公倍数是35,所以咱们只需要找120-200之间所有35的倍数即可,不用逐个遍历。
步骤:
- 找到第一个≥120的35的倍数:
35 × 4 = 140(35×3=105小于120,不符合) - 用
range生成从140开始,步长为35,到201结束的序列(因为range是左闭右开,所以终点设为201才能包含200以内的数) - 直接打印序列里的所有数
代码:
# 生成符合条件的数的序列 valid_numbers = range(140, 201, 35) # 展开打印所有数 print(*valid_numbers)
运行结果:140 175
方法二:用while循环替代for循环
如果不想用range的步长技巧,也可以用while循环逐个检查(完全不涉及for循环):
current = 120 while current <= 200: if current % 7 == 0 and current % 5 == 0: print(current) current += 1
这个逻辑很直观:从120开始逐个检查每个数,符合条件就打印,直到current超过200为止。
内容的提问来源于stack exchange,提问作者Nelson M
相关产品推荐
相关产品推荐

