镜花丿水月 发表于 2022-1-20 16:16:09

print中的空格和\t的区别

本帖最后由 镜花丿水月 于 2022-1-20 16:18 编辑

做列表第六课的动动手作业的时候
通过print空格怎么也不能将中间的数字对齐
而print \t就能够对齐。。。。。
但是数了数   明明计算的方式一样的为什么会出现这种情况呢???
数字和数字之间的间距是完全一样的
两种tab和空格的2种方式数字都被算作额外单独的一格。。。

明明算的距离是一样的为什么看起来差别这么大

wp231957 发表于 2022-1-20 16:24:50

第一个图的代码呢

镜花丿水月 发表于 2022-1-20 16:27:39

wp231957 发表于 2022-1-20 16:24
第一个图的代码呢

第一个图的代码就是把图二里print里的\t的部分 换成4个空格其余完全没变

python爱好者. 发表于 2022-1-20 16:40:42

因为制表符本身就是 8 个空格组成的,在 python 中可以得到验证:
print("\t1")
打印出来的结果就是:
                1
这里的 1 前面跟了 8 个空格,而并不是 4 个,
由此可得知:制表符对应的长度在不同的地方是不同的!


懂了吗?不懂可以再问!懂了就给个好评呗!!!
{:10_257:}{:10_297:}{:10_281:}{:10_298:}
打字不易!请给个好评!!!
兄弟!给个好评!求求了!!!
{:10_254:}{:10_254:}{:10_254:}{:10_254:}

tomok 发表于 2022-1-20 16:58:24

来学习

镜花丿水月 发表于 2022-1-20 17:00:26

python爱好者. 发表于 2022-1-20 16:40
因为制表符本身就是 8 个空格组成的,在 python 中可以得到验证:

打印出来的结果就是:


h = int(input('请输入杨辉三角形的高:'))
while h <= 1:
    print('请输入大于1的整数')
    h = int(input('请输入杨辉三角形的高:'))

triangle = [ * ( i + 1 ) for i in range(h)]
i = 0

t = h
for k in triangle:
    i += 1
    print((t - i) * '      ',end = '')
    if i >= 3:
      for j in range(1,i-1):
            k = triangle + triangle

    for a in k:
      print(a,end = 2 * '      ')

    print()



我把\t换成8个空格还是 错位的呀 你自己试试
你把空格换成\t就会发现中间竟然对齐了。。。。

镜花丿水月 发表于 2022-1-20 17:11:34

h = int(input('请输入杨辉三角形的高:'))
while h <= 1:
    print('请输入大于1的整数')
    h = int(input('请输入杨辉三角形的高:'))

triangle = [ * ( i + 1 ) for i in range(h)]
i = 0

t = h
for k in triangle:
    i += 1
    print((t - i) * '      ',end = '')
    if i >= 3:
      for j in range(1,i-1):
            k = triangle + triangle

    for a in k:
      print(a,end = 2 * '      ')

    print()



将\t换成8个空格也没法做到中线对齐
但是把空格换成\t其余什么都不动竟然对齐了神奇

镜花丿水月 发表于 2022-1-20 17:12:58

将\t换成8个空格仍然不会对齐。。。。

python爱好者. 发表于 2022-1-20 18:12:07

这......没理由啊!
@Stubborn @傻眼貓咪
救救我!

hrpzcf 发表于 2022-1-20 18:24:03

本帖最后由 hrpzcf 于 2022-1-20 18:31 编辑

\t是横向制表符。
制表符是制表符,空格是空格,制表符占用的宽度有时候等于8个空格宽度但不能认为制表符等于8个空格,一个制表符永远是一个制表符。
空格是固定的一个字符宽度,
制表符却不是固定宽度,一个制表符可以是4个字符宽度,也可以是8个字符宽度,甚至可以出现非整数倍的字符宽度,总之它的宽度取决于最近的一个对齐位所需的宽度。

python爱好者. 发表于 2022-1-20 18:25:55

hrpzcf 发表于 2022-1-20 18:24
\t是横向制表符。
制表符是制表符,空格是空格,制表符占用的宽度有时候等于8个空格宽度但不能认为制表符 ...

但是 8 个空格 ~ 0个空格 我都试了,
不行啊,大佬?{:10_277:}

python爱好者. 发表于 2022-1-20 18:27:13

声明刚才的帖子:
那个 “不行” 不是说您不行,是说您的方法不行,
没有其他意思!{:10_297:}

hrpzcf 发表于 2022-1-20 18:30:44

python爱好者. 发表于 2022-1-20 18:25
但是 8 个空格 ~ 0个空格 我都试了,
不行啊,大佬?

甚至可以出现非整数倍的字符宽度

python爱好者. 发表于 2022-1-20 18:35:23

hrpzcf 发表于 2022-1-20 18:30


所以请问这里对应的是几个空格{:10_254:}

hrpzcf 发表于 2022-1-20 18:37:48

python爱好者. 发表于 2022-1-20 18:35
所以请问这里对应的是几个空格

这我就不知道了,我只是说说我的见解。
如果我说是9.5个字符宽度,你能打出来9.5各字符吗?

python爱好者. 发表于 2022-1-20 18:39:23

hrpzcf 发表于 2022-1-20 18:37
这我就不知道了,我只是说说我的见解。
如果我说是9.5个字符宽度,你能打出来9.5各字符吗?

eee......
感谢大佬的回答,回去慢慢理解{:10_256:}

hrpzcf 发表于 2022-1-20 19:02:47

本帖最后由 hrpzcf 于 2022-1-20 19:07 编辑

python爱好者. 发表于 2022-1-20 18:39
eee......
感谢大佬的回答,回去慢慢理解

我理解的也不一定对,也有可能楼主用的是非等宽字体造成的。但是仔细想想觉得非等宽字体下用制表符能对齐更能说明"制表符非整数个字符宽度"。

傻眼貓咪 发表于 2022-1-20 21:04:39

本帖最后由 傻眼貓咪 于 2022-1-20 21:24 编辑

想知道自己的 '\t' 输出到底是多少个空格,试一下就知道了:print("A\tA")
print("ABBBBBBBA")A       A
ABBBBBBBA我这里是 7 个空格,这就是出现问题的地方,一般认为是 8 个。正解请看楼下大佬解说

Stubborn 发表于 2022-1-20 21:07:54

本帖最后由 Stubborn 于 2022-1-20 21:10 编辑

python爱好者. 发表于 2022-1-20 18:12
这......没理由啊!
@Stubborn @傻眼貓咪
救救我!

atbe = [ , ,,]
for idx, e in enumerate(atbe):
    print((len(atbe) - idx) * '' + " ".join(" ".join(['%s'%x for x in e])))

Stubborn 发表于 2022-1-20 21:16:52

傻眼貓咪 发表于 2022-1-20 21:04
想知道自己的 '\t' 输出到底是多少个空格,试一下就知道了:我的是 7 个空格,这就是出现问题的地方,一般 ...

\t是属于补齐8个字符, (a + \t) %8 = 0。 比如输出两个字符再输出制表符,此时制表符输出6个空格。如果输出8个字符,此时制表符输出8个空格。
页: [1] 2
查看完整版本: print中的空格和\t的区别