python第二版 28讲第3题解析看不懂
3. 请问下面代码执行的结果是 A 还是 B 抑或是 C 呢(为了你可以更容易地计数,下面使用 * 表示空格)?print(x)
print(x.expandtabs(2))
print(x.expandtabs(5))
print(x.expandtabs(10))
A:
Hello****FishC
Hello**ishC
Hello*****FishC
Hello**********FishC
B:
Hello***FishC
Hello*FishC
Hello*****FishC
Hello*****FishC
C:
Hello***FishC
Hello*FishC
Hello*****FishC
Hello**********FishC
答:B。
答案为什么是b,看星号数5跟10的返还结果是一样的,包括我在idle上试也是一样的。题的解析附有图片,5的输出,是两个单词之间有五个空格。而10的输出是按照开头算起,把第一个单词也算作空格数。这是为什么 关于expandtabs()方法的详细解析
这个问题关键在于理解 str.expandtabs(n) 的工作机制:
1. \t(制表符)的替换规则是:
- 从字符串开头开始计数字符
- 每 n 个字符为一个制表位
- 遇到 \t 时,补充 n - (当前字符数 % n) 个空格
原题分析(假设x = "Hello\tFishC")
原始字符串:H e l l o \t F i s h C (共5个字符后接\t)
↑ 第5个字符位置
1. 执行 x.expandtabs(5):
- 当前字符数:5
- 需要补充空格数:5 - (5 % 5) = 5
- 结果:"Hello" + 5空格 + "FishC"
2. 执行 x.expandtabs(10):
- 当前字符数:5
- 需要补充空格数:10 - (5 % 10) = 5
- 结果:"Hello" + 5空格 + "FishC"
为什么选项B正确?
观察选项B的两种输出:
Hello*FishC (expandtabs(2))
Hello*****FishC (expandtabs(5))
Hello*****FishC (expandtabs(10))
当参数为5和10时结果相同,这是因为:
[*]在位置5处,两种参数都需要补充5个空格
[*]只有当字符数超过参数值时,不同参数才会产生差异
验证建议
可以在Python中运行这个测试代码:
x = "Hello\tFishC"
print(repr(x.expandtabs(5))) # 'Hello FishC'
print(repr(x.expandtabs(10)))# 'Hello FishC'
print(len(x.expandtabs(5))) # 15
print(len(x.expandtabs(10))) # 15
这说明虽然参数不同,但在当前字符位置下计算结果相同,最终输出长度一致,符合选项B的描述。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]