выведите все числа, кратные 7 и содержащие 7 от 0 до 100 - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь создать цикл for, который будет печатать все числа, делимые на 7 от 0 до 100, а также числа, содержащие 7, как в следующем примере: 7 14 17 21 27 28 и т. Д.

Я пытался сделать это:

for i in range(101):
    if i%7==0 or i==range(7,98,10):
        print(i)

, но он печатает это:

7 14 21 и так далее

что мне делать?

Ответы [ 4 ]

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

, если вы не хотите делать '7' in number и математически сделать это, вот как вы можете

n = 7
i = 0
j = 100

# largest_multiple_of_n_smaller_than_j = (j - j%n) # 100 - 100%7 --> 100 -2 --> 98
# 98//7 --> 14 
# therefore we can say 7 multiply i( where i goes from 0 --> 14) will be less than equal to 100

multiples_of_n = [n*i for i in range(0, ((j - j%n) // n) +1)] # 0 7 14 21 ....98

# 17 27 37..(dont pick 77 here)..97 and 71 72 73...77..79
contains_n = [i*10+n for i in range(1,10) if i != n] + [n*10+x  for x in range(1,10) if (n*10+x) % n !=0] 

'''
or use this 

contains_n = [x for x in range(10+n,j,10) if x != n*11] + [x for x in range(n*10+1,n*10+10) if x % n !=0] 
'''

mult_and_contain_n =  sorted(multiples_of_n + contains_n)
print(mult_and_contain_n)


Вывод

n = 7

[0, 7, 14, 17, 21, 27, 28, 35, 37, 42, 47, 49, 56, 57, 63, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 84, 87, 91, 97, 98]


n = 5

[0, 5, 10, 15, 15, 20, 25, 25, 30, 35, 35, 40, 45, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65, 65, 70, 75, 75, 80, 85, 85, 90, 95, 95, 100]
0 голосов
/ 04 октября 2018

Использование списка и использование not i % 7 вместе с проверкой str(i) содержимого для 7

print([i for i in range(7, 101) if not i % 7 or '7' in str(i)])
# [7, 14, 17, 21, 27, 28, 35, 37, 42, 47, 49, 56, 57, 63, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 84, 87, 91, 97, 98]
0 голосов
/ 04 октября 2018

Как указано в другом месте, i == range(7,98,10) на самом деле не имеет смысла, так как вы не можете сравнить целое число с объектом диапазона.То, что вы на самом деле пытаетесь сделать, - это тест на членство, который в python использует ключевое слово in: i in range(7,98,10)

Следующая проблема, которую вы обнаружите, - это то, что вам не хватает класса чисел, которыйсодержит цифру 7. А именно, диапазон 70-79 (хотя вы получите 70 и 77 из других правил).Следуя вашей текущей стратегии, ваш окончательный ответ может выглядеть следующим образом:

for i in range(101):
    if i % 7 == 0 or i in range(7, 98, 10) or i in range(70, 80):
        print(i)

Это совершенно верно.Вы также можете приблизиться к нему математически, заметив, что числа с цифрой 7 единиц будут иметь остаток от 7 при делении на 10 (известный как оператор по модулю %), а числа с цифрой 7 десятков будут иметь частноеиз 7 при делении на 10 (с использованием целочисленного деления, //).

for i in range(101):
    if i % 7 == 0 or i % 10 == 7 or i // 10 == 7:
        print(i)

Наконец, есть изящный трюк, который вы можете сделать, поскольку вы проверяете деление и мод на одно и то же число;эти два результата будут даны одновременно встроенной функцией divmod().Вам просто нужно проверить, равен ли один из них 7. (Обратите внимание, что это не сработает, если вы выйдете за пределы двухзначных чисел.)

for i in range(101):
    if i % 7 == 0 or 7 in divmod(i, 10):
        print(i)

(Примечание: я оставил диапазон forВыполните цикл, аналогичный вашему примеру кода. Это будет включать 0 в выводе, так как он делится на 7. Если вы не хотите 0, просто измените диапазон на range(1, 101).)

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

ну, на самом деле, когда вы делаете:

i == range(7, 98, 10)

вы сравниваете целое число с итерацией.Таким образом, это условие всегда оценивается как False.


. Вы хотите проверить, содержит ли строковое представление вашего числа 7.Вы можете сделать:

'7' in str(i)

Таким образом, вы можете написать следующее:

for i in range(0, 101):
    if i % 7 == 0 or '7' in str(i):
        print i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...