Python digit格式化规则及PCAP认证练习题解析
Python 百分号风格整数格式化逻辑(PCAP考题解析)
首先明确%d整数格式化的硬规则,所有运行结果都严格遵循以下逻辑:
%d是整数类型占位符,无论传入参数是整数还是浮点数,都会先直接截断小数部分取整(注意是直接丢弃小数,哪怕小数部分是0.99也不会进位,和四舍五入逻辑完全不同),再执行后续格式化操作。%d占位符的完整格式为%[填充标记][最小宽度]d:- 最小宽度:指定格式化后数字部分的最小字符长度,如果数字本身转成字符串后的长度大于等于这个值,宽度和填充规则全部失效,直接输出数字原始字符串即可。
- 填充标记:只有写
0的时候生效,代表数字长度不足最小宽度时,在数字左侧补0凑够长度;如果不写0,默认在左侧补空格凑长度。 - 格式串里不在
%占位符范围内的字符,全部原样输出,不参与格式化逻辑。
各选项正误判断
选项1
代码对比:
print("-%07d"%555.55) print("%7d"%555.55)
输出计算:
- 第一行:555.55截断取整为555,
%07d要求数字部分最小宽度7、补0,555长度为3,补4个0得到0000555,加上前面原样输出的-,最终输出为-0000555。 - 第二行:555.55截断取整为555,
%7d要求数字部分最小宽度7、默认补空格,555长度为3,补4个空格得到555,且格式串没有前置-,最终输出为555。
两个输出完全不同,该选项错误。
选项2
原题代码对比:
print("-%07d"%555.55) print("-07d"%555)
注:结合正确标注判断,这里存在明显排版疏漏:第二行格式串
"-07d"中没有%占位符,执行时会直接抛出TypeError,不可能和第一行输出相等。实际应为漏写了占位符起始标记%,修正后第二行代码为print("-%07d"%555),按修正后的逻辑判断:
输出计算:
- 第一行:输出为
-0000555(计算逻辑同选项1第一行)。 - 第二行:传入参数是整数555,
%d直接取555做格式化,同样得到数字部分0000555,加前置-,最终输出为-0000555。
两个输出完全一致,该选项正确。
选项3
代码对比:
print("-%02d"%555.55) print("-%2d"%555.55)
输出计算:
- 第一行:555.55截断取整为555,数字本身长度为3,已经大于指定的最小宽度2,因此宽度、补0规则全部失效,直接输出
-555。 - 第二行:555.55截断取整为555,数字长度3大于指定宽度2,补空格规则失效,直接输出
-555。
两个输出完全一致,该选项正确。
选项4
代码对比:
print("-%02d"%555.55) print("-%02d"%555)
输出计算:
- 第一行:555.55截断取整为555,宽度2小于数字长度3,规则失效,输出
-555。 - 第二行:传入整数555,转字符串长度3大于宽度2,规则失效,输出
-555。
两个输出完全一致,该选项正确。
内容的提问来源于stack exchange,提问作者Achilles
相关产品推荐
相关产品推荐

