В Python, как мы можем объединить механизм форматирования для строк и процентов? - PullRequest
2 голосов
/ 03 апреля 2019

В python я хочу отформатировать строку, объединяющую две строки с процентом. Из этого поста как показать Процент в Python Я знаю, чтобы отформатировать процент, который мы можем использовать

>>> print "{:.0%}".format(1/3)
33%

В моем случае я хочу сделать что-то вроде

>>> print "{0}/{1} = {:.0%}".format('1', '3', 1/3)
1/3 = 33%

Но приведенный выше код возвращает

ValueError: cannot switch from manual field specification to automatic field numbering

Так, как правильно форматировать строку, как это? Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

Что означает, что вы предоставляете пронумерованное размещение для первых двух аргументов {0} и {1}, а затем внезапно появляется один без позиционного номера, поэтому он не может экстраполировать, какой из них поместить туда. (Как и в случае нумерации, они могут быть в любом порядке или повторяться). Поэтому необходимо убедиться, что последний элемент также пронумерован.

print "{0}/{1} = {2:.0%}".format('1', '3', 1/3)

В качестве альтернативы, пусть он вычисляет расположение аргументов формата:

print("{}/{} = {:.0%}".format('1', '3', 1/3))
1 голос
/ 03 апреля 2019

В Python2.7

>>> print "{:.0%}".format(1/3)
0%

Я полагаю, это должен быть неподдерживаемый процент

В python3.5

может нормально работать

  1. с позиционными параметрами
>>> print("{}/{} = {:.0%}".format('1', '3', 1/3))
1/3 = 33%
нет позиционных параметров
>>> print("{0}/{1} = {2:.0%}".format('1', '3', 1/3))
1/3 = 33%

поэтому два способа записи не могут быть смешаны

...