Невозможно точно понять строку кода Python - PullRequest
1 голос
/ 25 июня 2009

ответ Алекса имеет следующую строку при переводе на английский

print "%2d. %8.2f %8.2f %8.2f" % (    
            i, payment, interest, monthPayment)

Я не уверен насчет линии

"%2d. %8.2f %8.2f %8.2f" %         #Why do we need the last % here?

Кажется, это означает следующее

  1. применить% 2d. чтобы я
  2. применить% 8,2f к оплате
  3. применять% 8,2f к процентам
  4. применить% 8.2f к месяцу. Оплата

% -слов, по-видимому, означают следующее

  1. % 2d .: десятичное представление двух десятичных знаков

    2-4. % 8.2f: представление с плавающей запятой с двумя десятичными знаками

Я не уверен, почему мы используем 8 в% 8,2f.

Как вы понимаете сложную линию?

Ответы [ 6 ]

7 голосов
/ 25 июня 2009

8 в 8.2 это ширина
«Минимальное количество символов для печати. ​​Если значение для печати короче этого числа, результат заполняется пробелами. Значение не усекается, даже если результат больше» *
2 - это количество десятичных знаков

Последний% просто связывает строку формата (в кавычках) со списком аргументов (в скобках). Это немного сбивает с толку, что они выбрали%, чтобы сделать это - возможно, есть какая-то глубокая причина питона.

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

4 голосов
/ 25 июня 2009

Последний% - это оператор, который берет строку перед ней и кортеж после и применяет форматирование, как вы заметили. См. Python учебник для более подробной информации.

1 голос
/ 25 июня 2009

Как обычно, требуется цитата из документа - форматирование строки :

Объекты String и Unicode имеют одну уникальную встроенную операцию: оператор% (по модулю). Это также известно как форматирование строки или оператор интерполяции . При заданных значениях формата% (где формат представляет собой строку или объект Unicode), спецификации преобразования% в формате заменяются на ноль или более элементов значений. Эффект похож на использование sprintf в языке Си.

И описание спецификатора преобразования для объяснения %8.2f

Спецификатор преобразования содержит два или более символов и содержит следующие компоненты, которые должны располагаться в следующем порядке:

  1. Символ '%', отмечающий начало спецификатора.
  2. Ключ сопоставления (необязательно), состоящий из последовательности символов в скобках (например, (somename)).
  3. Флаги преобразования (необязательно), которые влияют на результат некоторых типов преобразования.
  4. Минимальная ширина поля (необязательно). Если указано как «*» (звездочка), фактическая ширина считывается из следующего элемента кортежа в значениях, а объект для преобразования следует после минимальной ширины поля и необязательной точности.
  5. Точность (необязательно), указывается как «.» (точка), за которой следует точность . Если указано как «*» (звездочка), фактическая ширина считывается из следующего элемента кортежа в значениях, а значение для преобразования следует после точности.
  6. Модификатор длины (необязательно).
  7. Тип конверсии.

Когда правильным аргументом является словарь (или другой тип отображения), строка формата включает ключи отображения (2). Если разбить пример на 2 шага, у нас есть словарь и формат, который включает ключи из словаря (ключ #):

>>> mydict = {'language':'python', '#':2}
>>> '%(language)s has %(#)03d quote types.' % mydict
'python has 002 quote types.'
>>> 
1 голос
/ 25 июня 2009

% после строки указывает Python попытаться заполнить переменные в левой части оператора «%» пунктами в списке в правой части оператора «%».

Оператор '%' знает, как найти переменную в строке путем поиска символа в строке, начинающейся с%.

Ваша путаница в том, что вы думаете, что оператор% и символ% в строке совпадают.

Попробуйте посмотреть на это так, вне строки% - это оператор, внутристрока это возможно шаблон для подстановки.

1 голос
/ 25 июня 2009

% - это оператор, который создает строку формата. Простой пример будет:

"%s is %s" % ( "Alice", "Happy" )

Что будет оцениваться до строки "Alice is Happy". Предоставленная строка формата определяет, как передаваемые значения помещаются в строку; синтаксис доступен здесь . Короче говоря, d - это «обрабатывать как десятичное число», а 8.2 - «заполнять до 8 символов и округлять до 2 десятичных знаков». По сути, похоже, что именно этот формат используется, так что ответы выстраиваются в линию при просмотре моноширинным шрифтом. :)

В моем примере кода s означает «обрабатывать как строку».

0 голосов
/ 25 июня 2009

% 8,2f означает, что в 8 символьных пробелах может содержаться число, данное переменной-ответчиком, содержащей число с плавающей запятой, а затем десятичная точность равна 2.

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