【问题标题】:How to print binary numbers using f"" string instead of .format()?如何使用 f"" 字符串而不是 .format() 打印二进制数?
【发布时间】:2019-03-21 20:36:16
【问题描述】:

为了将一些数字打印成二进制格式,我们只需使用.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

【问题讨论】:

  • 你不应该在这里把0改成i吗?

标签: python python-3.x binary f-string


【解决方案1】:

你的 f-string 应该有表达式而不是索引:

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

原始格式字符串中的0 应替换为实际的第一个参数:在本例中为i

警告

f-string 中的表达式被计算两次,但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 被多次评估,但这只是一个简单的参考。

【讨论】:

    【解决方案2】:

    这是我的看法:

    在旧的.format() 中,0 表示传递给格式函数的第一个元素。 "{0:>2} in binary is {0:>08b}".format(i)。 0 被使用两次来访问第一个变量两次。另一种写法是:"{:>2} in binary is {:>08b}".format(i,i) 省略索引。

    在新的f'' 格式中,我们改为传递变量/表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 2017-12-20
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多