Почему этот номер заполнителя не работает? - PullRequest
0 голосов
/ 10 ноября 2019

Я написал скрипт, который принимает пользовательский ввод в командной строке и выполняет вычисление, чтобы определить чей-то приблизительный возраст.

Что я не могу понять, так это почему эта часть работает неправильно (invalid syntax ошибка):

print("That makes you approximately %d years old", % (int(year - int(sys.argv[2]))))

Полный сценарий выглядит следующим образом:

from datetime import date
import sys

greeting = sys.argv[1]
year = int(date.today().year)

if __name__ == '__main__':
    print("This script is called: ", sys.argv[0])
    print("Your message is: ", greeting)
    print("Your year of birth is: ", sys.argv[2])
    print("That makes you approximately %d years old", % (int(year - int(sys.argv[2]))))

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 10 ноября 2019

% - бинарный оператор, первый операнд которого должен быть строкой. В конце концов, одна запятая слишком много:

print("format %d", % (num))  # wrong
print("format %d" % (num))  # correct

в дополнение к этому, вы можете быть удивлены, что круглые скобки здесь ничего не делают:

print("format %d" % num)  # also correct

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

print("format %d" % (num,))  # the best way

Почему это лучше? Возьмите этот пример:

tup = ()
print("format %s" % tup)  # TypeError: not enough arguments for format string
print("format %s" % (tup))  # same
print("format %s" % (tup,))  # correct

Это одна из причин, по которой я предпочитаю более новую функцию форматирования или даже лучшие f-строки.

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