Как напечатать двоичные числа, используя f "" строку вместо .format ()? - PullRequest
0 голосов
/ 17 октября 2018

Для печати некоторых чисел в их двоичных форматах мы просто используем метод .format(), например, так:

# Binary
for i in range(5+1):
    print("{0:>2} in binary is {0:>08b}".format(i))

0 in binary is 00000000
1 in binary is 00000001
2 in binary is 00000010
3 in binary is 00000011
4 in binary is 00000100
5 in binary is 00000101

Аналогично для печати в других форматах (шестнадцатеричных и восьмеричных), которые просто требуют заменыпоследние скобки для цифр, которые мы хотим напечатать.Но есть ли способ использовать новую строку f"" для замены команды .format()?Я знаю, что это может показаться тривиальным, но я озадачился этим, играя с новой функцией, кроме того, что f"" делает код короче и более читабельным.

for i in range(5+1):
    print(f'{0:>2} in binary is {0:>08b}')
# This prints out just 0s

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вот мой дубль:

В старом .format() 0 представлял 1-й элемент, переданный функции форматирования."{0:>2} in binary is {0:>08b}".format(i).0 дважды использовался для доступа к первой переменной дважды.Другой способ записать это будет: "{:>2} in binary is {:>08b}".format(i,i) без учета индексов.

В новом формате f'' вместо этого мы передаем переменные / выражения.

0 голосов
/ 17 октября 2018

В вашей f-строке должны быть выражения, а не индексы:

f'{i:>2} in binary is {i:>08b}'

Везде, где у вас было 0 в исходной строке формата, следует заменить фактический первый аргумент: в этом случае i.

Предостережение

Выражение в f-строке оценивается дважды, но аргумент format оценивается только один раз, когда вы обращаетесь к нему по индексу.Это важно для более сложных выражений.Например:

"{0:>2} in binary is {0:>08b}".format(i + 10)

Здесь сложение i + 10 происходит только один раз.С другой стороны,

f"{i+10:>2} in binary is {i+10:>08b}"

выполняет сложение дважды, поскольку оно эквивалентно

"{:>2} in binary is {:>08b}".format(i + 10, i + 10)

или

"{0:>2} in binary is {1:>08b}".format(i + 10, i + 10)

Обходной путь - предварительный расчет результатов.выражений, которые появляются в вашей f-строке более одного раза:

j = i + 10
f"{j:>2} in binary is {j:>08b}"

Теперь j вычисляется несколько раз, но это просто простая ссылка.

...