Как я могу заставить программу возвращать True для целого числа со всеми нечетными цифрами? - PullRequest
0 голосов
/ 05 ноября 2019

Вопрос состоит в том, чтобы сделать программу, которая возвращала бы значение true, если заданное целое число имеет цифры, которые нечетные, и ложь в противном случае.

Я получил что-то простое, работающее, но оно работает только тогда, когда числа находятся всписок, а не только когда они заданы как целые числа.

вход:

def test3(n):

  for x in n:
    print (x%2 != 0)

test3([13579])

вывод:

True

ввод:

def test3(n):

  for x in n:
    print (x%2 != 0)

test3(13579)

output:

Traceback (most recent call last):
  File "main.py", line 86, in <module>
    test3(13579)
  File "main.py", line 83, in test3
    for x in n:
TypeError: 'int' object is not iterable

Ожидаемый результат:

True

Был также дан подсказка для вопроса, а именно: Подсказка:

To extract the lowest digit of a positive integer n, use the expression n % 10. To extract all other digits except the lowest one, use the expression n // 10. Or, if you don't want to be this fancy, first convert the number into a string and work there. (There is a more general and fundamental idea hidden in plain sight in this technique.)```

1 Ответ

2 голосов
/ 05 ноября 2019

Вы возитесь с целочисленными и строковыми типами. Для перебора цифр мы должны сначала превратить целое число в строку, а затем преобразовать каждую цифру в целое число, чтобы проверить, является ли оно нечетным или четным. Это любезно игнорируя намек дал, но я думаю, что это еще более элегантно, чем то, как намек наводит на мысль :) (Но это спорно.)

def odd_digits_only(number: int) -> bool:  # this is equal to
# def odd_digits_only(number):
   for digit in str(number):
       if int(digit) % 2 == 0:
           return False
   return True

Это может быть сокращено с помощью списка понимание и all:

def odd_digits_only(number: int) -> bool:
    return all([int(digit) % 2 != 0 for digit in str(number)])
...