2} in binary -6ren">
gpt4 book ai didi

python - 如何使用 f""string 而不是 .format() 打印二进制数?

转载 作者:行者123 更新时间:2023-11-28 20:32:23 24 4
gpt4 key购买 nike

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

最佳答案

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

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 被计算了多次,但它只是一个简单的引用。

关于python - 如何使用 f""string 而不是 .format() 打印二进制数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52850229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com