我正在尝试编写一个名为find_numbers的函数,该函数将查找所有可以被7整除而不是被5整除的数字。
我的问题是实际功能 这是我到目前为止的内容:
def find_numbers(lower_bound, upper_bound):
for i in range(lower_bound,upper_bound):
if (i % 7 == 0 and i % 5 !=0):
print(i)
return ()
我有正确的参数吗?我到底要返回什么?我觉得我已经接近正确的解决方案了,但是我真的很困惑:(它正在打印出我想要的内容,但不是正确的。非常感谢您的帮助!谢谢!
lower_bound = int( input("Lower bound to search for numbers: ") )
upper_bound = int( input("Upper bound to search for numbers: ") )
found_numbers = find_numbers(lower_bound, upper_bound)
print("The numbers that are divisible by 7 but not by 5
are:\n{}".format(found_numbers))
答案 0 :(得分:5)
def find_numbers(lower_bound, upper_bound):
results=[]
for i in range(lower_bound,upper_bound):
if (i % 7 == 0 and i % 5 !=0):
results.append(i)
return results
lower_bound = int( input("Lower bound to search for numbers: ") )
upper_bound = int( input("Upper bound to search for numbers: ") )
found_numbers = find_numbers(lower_bound, upper_bound)
print("The numbers that are divisible by 7 but not by 5
are:\n{}".format(found_numbers))
答案 1 :(得分:3)
您可以为此使用简单的列表理解。
result = [x for x in range(lower_bound, upper_bound) if x % 7 == 0 and x % 5 != 0]
如果您想使它更加优雅和可重复使用,则可以将其包装在函数中。
def find_numbers(lower_bound, upper_bound):
return [x for x in range(lower_bound, upper_bound) if x % 7 == 0 and x % 5 != 0]
lower_bound = int( input("Lower bound to search for numbers: ") )
upper_bound = int( input("Upper bound to search for numbers: ") )
found_numbers = find_numbers(lower_bound, upper_bound)
print("The numbers that are divisible by 7 but not by 5 are:\n{}".format(found_numbers))
可以看出,这种列表理解方法的运行速度比传统的循环解决方案要快。
答案 2 :(得分:1)
逻辑上有几处错误:
我会这样修改它:
In [1]: def find_numbers(L, U):
...: r = []
...: for i in range(L, U):
...: if i % 7 == 0 and i % 5 != 0:
...: r.append(i)
...: if not r:
...: return None
...: else:
...: return r
...:
答案 3 :(得分:0)
您可以将其视为模式,偏移量,而不是上下限。
7 * 5 = 35 =>您将得到一个长度为35的谐波图案,其中7、14、21、28是您感兴趣的数字,而35是您跳过的数字。添加n * 35作为偏移量,您就可以在手触及的范围内获得无限
很抱歉使用Java。随身携带手机,让我脑海中的一切变得更加轻松。
List<Integer> pattern = Arrays.asList(7, 14, 21, 28);
Stream.iterate(0, offset -> offset + 1)
.forEach(offset -> pattern.stream()
.forEach(p -> print(35 * offset + p))
);