课后习题
有一组由程序处理的浮点数,为了输出时保持工整,希望输出的字面值为 10 个数字,且小数点后最多包含 3 位,请你用 F-strings 对它们的格式进行调整并输出。
例:
数字为:123.4567 输出为:'000123.457'
课程代码、课件及其他相关资料地址
https://gitee.com/wilsonyin/zero-basics-python
作者回复: 在 Python 的格式化字符串(f-string)中,`f` 标记用于表示浮点数格式。当你使用格式如 `:4f` 时,`4` 并不表示要保留的小数位数,而是表示整个数字的最小宽度。而小数部分默认保留 6 位。 如果你想指定保留的小数位数,你应该使用 `.Nf` 格式,其中 `N` 是你想要保留的小数位数。例如: ```python number = 123.456789 formatted_string = f"{number:.2f}" # 保留小数点后 2 位 print(formatted_string) # 输出:123.46 ``` 所以,`f"{number:4f}"` 将默认保留小数点后 6 位,因为 `f` 格式默认就是这样做的,而 `4` 只指定了整个数字的最小宽度。
作者回复: 结论是正确的。让我们一步步解释: f":表示这是一个f-string,或者说格式化字符串。 {number::这是我们要格式化的变量的名字。 0:这意味着我们想要使用0作为填充字符。 10:这是总的最小字符宽度。但这是最小限制,如果内容需要更多的空间,Python会为其分配更多的空间。 .3:这意味着我们想要小数点后面只有3位。 f}:这告诉Python我们正在格式化一个浮点数。 因此,当你有一个值像12345678901.98764这样大时,为了满足.3f(小数点后三位)的要求,Python会自动调整整数部分的宽度。这就是为什么你得到的字符串比10个字符还要长。 简而言之,10代表的是最小宽度,不是最大宽度。
作者回复: 感谢指正, 此处确实有错误。另附正确写法代码如下: text = "Hello World" width = 20 formatted_text = f"{text:<{width}}" print(formatted_text)