Почему выводит none в консоль??? (python 3.7.8)

Знаю, что если убрать print во второй строке эта вещь уходит.

def is_year_leap():
    year_input = str(input(print('Enter year: ')))
    year_div = int(year_input) % 4
    if year_div == 0:
        print('{} is leap year.'.format(year_input))

    else:
        return print('{} year is not leap year'.format(year_input))
is_year_leap()

Кто нибудь может объяснить почему выводит эту ошибку???


Ответы (3 шт):

Автор решения: DD_N0p

В вашем коде input берет аргумент print('Enter year: '), функция print печатает Enter year: , а потом input печатает значение функции print, которая возвращает None. Так же input возвращает тип str, поэтому не нужно прописывать str()

def is_year_leap():
    year_input = input('Enter year: ')
    year_div = int(year_input) % 4
    if year_div == 0:
        print('{} is leap year.'.format(year_input))

    else:
        print('{} year is not leap year'.format(year_input))
is_year_leap()
→ Ссылка
Автор решения: S. Nick

смотрим строку year_input = str(input(print('Enter year: ')))

  1. str - убираем, т.к. результат и так str

    year_input = input(print('Enter year: '))

  2. так как вы написали, это все равно что:

    val = print('Enter year: ')

    input(val)

    посмотрите что такое val

    print(val)

  3. пишем так:

    year_input = input('Enter year: ')

→ Ссылка
Автор решения: MarianD

В строке

return print('{} year is not leap year'.format(year_input))

вы возвращаете то, что возвращает функция print(), а функция print() всегда возвращает None.


Вы наверно хотели вернуть строку — значит, удалите print из команды return и добавите еще одно return:

if year_div == 0:
    return '{} is leap year.'.format(year_input)

else:
    return '{} year is not leap year'.format(year_input)
→ Ссылка