元豪 发表于 2022-8-14 09:42:12

这是怎么回事? ? ?

为什么会这样? ? ? {:10_285:}

>>>x = """
        12345               
    67890"""        #12345为1个Tab, 67890为4个空格
>>>x.expandtabs(4)
'\n    12345       \n    67890'
>>>

我原本想让它把Tab变成4个空格的, 为什么会这样? {:5_94:}

liuzhengyuan 发表于 2022-8-14 09:53:33

tab 在字符串中的表示方法应该是 \t 吧,我不知道直接输入空格会不会生效

jackz007 发表于 2022-8-14 10:42:29

    12345为1个Tab, 67890为4个空格 这句话是何意?完全是风马牛不相干的事情!

suchocolate 发表于 2022-8-14 11:24:22

shell为了照顾输入和回显,当直接输入tab时,实际自动转成了空格。
print(ord(' '))# 输入tab,ord可以显示字符的ascii码,32是空格,9是tab,这里我实际输入了tab,但ord检测是空格,也就是shell自动转成了空格。
32
print(ord(' '))
32
print(ord('\t'))
9


如果想输入tab,两种方式:\t或者字符串前加r
s = """\tfishc"""
s = r"""[一个tab]fishc"""

元豪 发表于 2022-8-15 10:54:56

jackz007 发表于 2022-8-14 10:42
这句话是何意?完全是风马牛不相干的事情!

前面的空格{:10_250:}

元豪 发表于 2022-8-15 10:56:52

suchocolate 发表于 2022-8-14 11:24
shell为了照顾输入和回显,当直接输入tab时,实际自动转成了空格。




把一个Tab的空白换成4个空格的空白{:10_250:}

Brick_Porter 发表于 2022-8-15 22:15:22

其实你的操作已经成功了。问题在于你没有理解expandtabs这个方法的效果,它不会在原来的字符串x上做修改,而是给你一个新的字符串,这个字符串就是修改后的结果。

在你使用x.expandtabs(4)之前先打印一下x,你会发现因为Tab和空格的宽度不同导致12345和67890确实没有对齐;
但是print(x.expandtabs(4))你会发现,12345和67890已经对齐了,也就是说expandtabs确实成功把Tab替换为4个空格了,只是因为你没有对这个新的字符串做进一步操作,所以IDLE会把这个新的字符串直接显示给你看。如果你把两行代码写到文件中你甚至不会看到任何输出,因为程序认为你主动舍弃了expandtabs的结果。

阳顺 发表于 2022-8-15 22:57:53

元豪 发表于 2022-8-15 10:54
前面的空格

我也看不懂

阳顺 发表于 2022-8-15 22:58:47

jackz007 发表于 2022-8-14 10:42
这句话是何意?完全是风马牛不相干的事情!

真是令人头大的陈述句

suchocolate 发表于 2022-8-15 23:01:40

元豪 发表于 2022-8-15 10:56
把一个Tab的空白换成4个空格的空白

还有什么问题吗?

阳顺 发表于 2022-8-16 00:31:39

4楼正解,验证过了看图片
页: [1]
查看完整版本: 这是怎么回事? ? ?