为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 f“” 字符串而不是 .format() 打印二进制数?

如何使用 f“” 字符串而不是 .format() 打印二进制数?

收到一只叮咚 2021-06-30 14:35:20
要将一些数字打印为二进制格式,我们只需使用该.format()方法,如下所示:# Binaryfor i in range(5+1):    print("{0:>2} in binary is {0:>08b}".format(i))0 in binary is 000000001 in binary is 000000012 in binary is 000000103 in binary is 000000114 in binary is 000001005 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 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

这是我的看法:

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

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


查看完整回答
反对 回复 2021-07-21
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

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

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

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

警告

f 字符串中的表达式被计算两次,但是format当您通过索引访问它时,参数 to只被计算一次。这对于更复杂的表达式很重要。例如:

"{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被评估了多次,但这只是一个简单的参考。


查看完整回答
反对 回复 2021-07-21
  • 2 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信