编写一个Python程序来查找120到200之间的数字,这些数字可以被7整除,5的倍数不使用" for循环"。
我试着以这种方式解决这个问题......
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'
答案 0 :(得分:2)
由于您不允许使用for
构造,您可以使用filter
方法完成此操作:
valid_nums = filter(lambda x: x % 35 == 0, range(120, 200))
请注意,问题不是要求您打印数字而是“找到”它们,这意味着创建某种形式的列表或有效值的集合
PS:我做x % 35 == 0
因为“divisble by”和“multiples of”意思相同,因此35来自7*5
。
PPS:filter
返回一个过滤器对象,它是一个生成器。如果要通过list(valid_nums)
查看列表,则需要将其转换为列表。如果您只需要迭代值并将其用于其他内容,则无需进行转换,因为生成器可以正常工作
答案 1 :(得分:1)
你的老师喜欢它扭曲。可被7除以及5的倍数只是意味着可以被7和5整除,所以35 ......
原始代码需要循环。但是python的内置函数生成没有for
或while
语句的循环(它们比for
或while
快得多,因为它们通常使用本机编译C代码)
sshashank124给出了一个很好的答案,但它可以更简化:
range
起点range
>>> list(range(((120//35)+1)*35,200,35))
[140, 175]
它可能要快得多,因为它只使用一个分区&amp;乘法,然后只有加法。
答案 2 :(得分:1)
我认为使用列表推导对于Python而言比filter
更为惯用(当然,如果允许的话)。
x = range(120, 200)
valid_nums = [num for num in x if num % 35 == 0]
或在创作时:
valid_nums = [num for num in range(120, 200) if num % 35 == 0]
答案 3 :(得分:0)
你要做的是将x定义为一系列数字,但这会使x成为一个数字列表,你仍然需要通过每个数字来检查它。因为&#34; for循环&#34;不允许使用while循环或从下限开始递归调用函数直到passable参数达到上限。
def func(x):
if (condition satisfied):
print(x)
if x<upper_limit:
func(x+1)
return
答案 4 :(得分:0)
我刚遇到一个非常相似的问题。如此相似,实际上,我想知道OP是否将问题写错了。在我的阅读中,挑战在于找到可以被7整除而不是被5整除的所有数字。这与简单地将问题减少到x%35有很大的不同。答案仍然是创建列表理解。这是对我有用的东西:
x =范围(2000,3201) num = [如果n%7 == 0且n%5!= 0,则x中的n为n]
完成后,只需打印(num)就可以得到答案。