鱼C论坛

 找回密码
 立即注册
查看: 2874|回复: 23

[已解决]print中的空格和\t的区别

[复制链接]
发表于 2022-1-20 16:16:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

明明算的距离是一样的  为什么看起来差别这么大
最佳答案
2022-1-20 23:01:56
print("w\t*")
print("ww\t*")
print("www\t*")
print("wwww\t*")
print("wwwww\t*")
print("wwwwww\t*")
print("wwwwwww\t*")
print("wwwwwwww\t*")
(, 下载次数: 0)


使用空格每个数之间的距离都是一样的,当你从一位数变成两位数阵型就散了
制表符要占位完了才会重新算距离
微信截图_20220120160138.png
微信截图_20220120160220.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-20 16:24:50 | 显示全部楼层
第一个图的代码呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-20 16:27:39 | 显示全部楼层
wp231957 发表于 2022-1-20 16:24
第一个图的代码呢

第一个图的代码就是把  图二里print里的\t的部分 换成4个空格  其余完全没变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


懂了吗?不懂可以再问!懂了就给个好评呗!!!

打字不易!请给个好评!!!
兄弟!给个好评!求求了!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-20 16:58:24 | 显示全部楼层
来学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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 = [[1] * ( 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[j] = triangle[i-2][j-1] + triangle[i-2][j]

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

    print()

我把\t换成8个空格还是 错位的呀 你自己试试
你把空格换成\t就会发现  中间竟然对齐了。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-20 17:11:34 | 显示全部楼层
h = int(input('请输入杨辉三角形的高:'))
while h <= 1:
    print('请输入大于1的整数')
    h = int(input('请输入杨辉三角形的高:'))

triangle = [[1] * ( 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[j] = triangle[i-2][j-1] + triangle[i-2][j]

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

    print()

将\t换成8个空格也没法做到中线对齐
但是把空格换成\t  其余什么都不动竟然对齐了  神奇
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-20 17:12:58 | 显示全部楼层
将\t换成8个空格仍然不会对齐。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-20 18:12:07 | 显示全部楼层
这......没理由啊!
@Stubborn @傻眼貓咪
救救我!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-20 18:24:03 From FishC Mobile | 显示全部楼层
本帖最后由 hrpzcf 于 2022-1-20 18:31 编辑

\t是横向制表符。
制表符是制表符,空格是空格,制表符占用的宽度有时候等于8个空格宽度但不能认为制表符等于8个空格,一个制表符永远是一个制表符。
空格是固定的一个字符宽度,
制表符却不是固定宽度,一个制表符可以是4个字符宽度,也可以是8个字符宽度,甚至可以出现非整数倍的字符宽度,总之它的宽度取决于最近的一个对齐位所需的宽度。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

但是 8 个空格 ~ 0个空格 我都试了,
不行啊,大佬?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-20 18:27:13 | 显示全部楼层
声明刚才的帖子:
那个 “不行” 不是说您不行,是说您的方法不行,
没有其他意思!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-20 18:30:44 | 显示全部楼层
python爱好者. 发表于 2022-1-20 18:25
但是 8 个空格 ~ 0个空格 我都试了,
不行啊,大佬?
甚至可以出现非整数倍的字符宽度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-20 18:35:23 | 显示全部楼层

所以请问这里对应的是几个空格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-20 18:37:48 | 显示全部楼层
python爱好者. 发表于 2022-1-20 18:35
所以请问这里对应的是几个空格

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

评分

参与人数 1鱼币 +5 收起 理由
python爱好者. + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

eee......
感谢大佬的回答,回去慢慢理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-20 19:02:47 | 显示全部楼层
本帖最后由 hrpzcf 于 2022-1-20 19:07 编辑
python爱好者. 发表于 2022-1-20 18:39
eee......
感谢大佬的回答,回去慢慢理解


我理解的也不一定对,也有可能楼主用的是非等宽字体造成的。但是仔细想想觉得非等宽字体下用制表符能对齐更能说明"制表符非整数个字符宽度"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-20 21:04:39 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2022-1-20 21:24 编辑

想知道自己的 '\t' 输出到底是多少个空格,试一下就知道了:
print("A\tA")
print("ABBBBBBBA")
A       A
ABBBBBBBA
我这里是 7 个空格,这就是出现问题的地方,一般认为是 8 个。正解请看楼下大佬解说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-20 21:07:54 | 显示全部楼层
本帖最后由 Stubborn 于 2022-1-20 21:10 编辑
python爱好者. 发表于 2022-1-20 18:12
这......没理由啊!
@Stubborn @傻眼貓咪
救救我!

atbe = [ [1,], [1,1],[1,1,1],[1,1,1,1]]
for idx, e in enumerate(atbe):
    print((len(atbe) - idx) * '  ' + " ".join(" ".join(['%s'%x for x in e])))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

\t是属于补齐8个字符, (a + \t) %8 = 0。 比如输出两个字符再输出制表符,此时制表符输出6个空格。如果输出8个字符,此时制表符输出8个空格。

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
傻眼貓咪 + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 06:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表