Как напечатать объекты типов str и int в одной строчке, и почему str превращается в NoneType (Python 3)

289 просмотра
0
0 Комментариев

Добрый день, коллеги. Необходимо напечатать в одной строчке обычные слова в кавычках (простите за отсутствие терминологии) и переменную, имеющую числовое значение.

Вот первый вариант кода:

score = 1
 
def gameover(score):
    print ("Игра пройдена на ") + (score)
 
gameover(score)

Он выдает ошибку:

TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

Попробовал убрать плюсик, ошибка стала

TypeError: 'NoneType' object is not callable

Попробовал изменить центральную часть кода на это:

def gameover(score):
    print ("Игра пройдена на %s процетнов") % (score)

Ошибка, как и в первом примере:

TypeError: unsupported operand type(s) for %: 'NoneType' and 'int'

Как это понимать, и что с этим делать? Заранее спасибо.


Добавить комментарий

1 Ответы

Python Опубликовано 18.12.2018
0

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

В первом варианте правильно будет так:

print("Игра пройдена на", score)  # запятая сама добавляет пробел, поэтому пробел в конце строки не нужен

Или так:

print("Игра пройдена на " + str(score))

Обратите внимание, что тут нужно явное преобразование числа к строке через str() (нельзя просто взять и «сложить» строку с числом).

Для второго варианта правильно вот так:

print("Игра пройдена на %s процентов" % score)

Оператор % действует между строкой и подставляемыми значениями, и результат операции опять же должен находиться внутри скобок, «принадлежащих» функции print. В принципе, можно было бы просто добавить еще одни общие скобки, но тогда скобки вокруг строки и score будут излишними:

print(("Игра пройдена на %s процентов") % (score))  # Не делайте так!

По поводу ошибок:

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

print ("Игра пройдена на ") + (score)

то после вызова print это выражение превращается в

None + score

Отсюда ошибка, что None и int нельзя складывать.

Если плюс убрать, то получится

None(score)

т.е. попытка вызова None как функции с параметром score.

Во втором варианте после вызова print получается вот это:

None % score

Опять же, ошибка как раз и говорит о том, что оператор % не поддерживает аргументы типов NoneType и int.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up