Выведите числа от 1 до 100, пропустив числа, делимые на 3 и 5 - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу напечатать числа от 1 до 100, пропуская числа, делимые на 3 и 5, и когда я использую код-1, я не получаю правильный вывод, я получаю полный подсчет 1-100

#CODE1
i=1
a=1
while i<=100:
    if (a%3==0 and a%5==0) :
           a=a+1
    else:
        print(a)
        a=a+1
    i=i+1

но когда я использую CODE-2, я получаю желаемый результат

#CODE2
i=1
a=1
while i<=100:
    if ((a%3 and a%5)==0) :
        a=a+1
    else:
        print(a)
        a=a+1
    i=i+1

обратите внимание на четвертую строку кода, почему не так с 1-м кодом?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Первая программа неверна, потому что вы в строке 6-7 увеличиваете счетчик, не проверяя, нужно ли вам печатать номер.

Более понятный способ написать это можно было бы:

for counter in xrange(1, 101):
    if not ((counter % 5 == 0) or (counter % 3 == 0)):
        print (a)
0 голосов
/ 13 ноября 2018

Учтите это:

a = 10

(a%3 == 0) and (a%5 == 0)  # False
(a%3 and a%5) == 0         # True

Первая попытка дает False неправильно, потому что для этого необходимо оба условия; вам нужно or вместо этого. Если вы посмотрите внимательно, некоторые числа (например, 15) исключаются, совпадая с числами, которые имеют как 3, так и 5 как факторы.

Вторая попытка верна, потому что если a не делится на или 3 или 5, выражение оценивается как False, а 0 == False дает True. Более идиоматично было бы написать:

not (a%3 and a%5)
...