Как создать функцию, чтобы найти числа, делимые на 7, но не на 5 - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь написать функцию с именем 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 голосов
/ 11 ноября 2018

Вы можете думать об этом как о структуре, смещении, вместо нижних и верхних границ.

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))
      );
0 голосов
/ 20 октября 2018
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))
0 голосов
/ 20 октября 2018

Вы можете использовать простое понимание списка для этой цели.

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

Видно, что этот метод понимания списков будет работать немного быстрее, чем обычное решение для циклических операций.

0 голосов
/ 20 октября 2018

В логике есть несколько неправильных вещей:

  1. Он напечатает только последнее найденное значение
  2. оператор возврата неправильный
  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
...:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...