Должен проверить каждую цифру числа и получить плохой вывод - PullRequest
0 голосов
/ 28 января 2020

У меня есть задача: получить диапазон на входе [x; y], затем я должен проверить каждое число из этого диапазона и проверить каждую цифру в числе. если он нечетный, я должен напечатать его, например: 3, 20 я должен напечатать 4,6,8,20

def check(num):
if int(num) % 2 == 0:
    return True


x, y = int(input()), int(input())

numbers = []
if x <= y:
while x != y:
    for i in str(x):
        if check(i):
            numbers.append(x)
    x += 1

else:
while y != x:
    for i in str(y):
        i = int(i)
        if check(i):
            numbers.append(y)
    y += 1
if y == x:
    for i in str(x):
        if check(i):
            numbers.append(x)
print(numbers)

он печатает [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 20, 21, 22, 22, 23, 24, 24, 25, 26, 26, 27, 28, 28, 29] вместо 2,4,6,8,20,22,24, 26,28

1 Ответ

0 голосов
/ 28 января 2020

Вы проверяете и утверждаете на основе одного ди git для каждого номера. Вы должны проверить все из них перед добавлением всего номера. Вот почему вы получаете 22 дважды: один раз за первый 2 и один раз за второй. Вы получаете 10, потому что даже если 1 нечетно, 0 является четным и вы добавляете его в свой список.

Переместите чек для всего числа в функцию check и получите он возвращает True только , если все цифры четные. Это сокращает ваш код. Также обратите внимание, что вы можете тривиально поменять местами x и y, если пользователь ввел их в неправильном порядке.

Функция check немедленно возвращает False, как только она находит ди git i нечетно, и вы можете видеть, что он может возвратить True, только если l oop закончился и все цифры были четными.

    def check(num):
        for i in str(num):
            if int(i) % 2 != 0:
                return False
        return True


    x, y = int(input()), int(input())
    if x > y:
        x,y = y,x

    numbers = []

    while x <= y:
        if check(x):
            numbers.append(x)
        x += 1
    print (numbers)

Результат, с введенными 3 и 20 (но 20 и 3 также будут работать):

[4, 6, 8, 20]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...