如何创建一个函数以查找可以被7整除但不能被5整除的数字

时间:2018-10-20 06:10:25

标签: python python-3.x function

我正在尝试编写一个名为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))

4 个答案:

答案 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)

逻辑上有几处错误:

  1. 它只会打印找到的最后一个值
  2. return语句不正确
  3. 如果该范围内没有数字怎么办

我会这样修改它:

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))
      );