李二蛋 发表于 2022-2-28 13:45:34

杨辉三角形输出end = '\t'是什么意思

0.end = '\t'是什么意思?
1.为什么不能用end='对应的空格'替换end = '\t'?请各位前辈帮忙

# 初始化杨辉三角形
# 创建一个10*10的二维列表,并将所有的元素初始化为0
triangle = []
for i in range(10):
    triangle.append([])
    for j in range(10):
      triangle.append(0)
   
# 计算杨辉三角形
# 根据观察,我们知道杨辉三角形左右两边的元素均为1
for i in range(10):
    triangle = 1
    triangle = 1
   
# 第i行j列的值 = 第(i-1)行(j-1)列的值 + 第(i-1)行(j)列的值
for i in range(2, 10):
    for j in range(1, i):
      triangle = triangle + triangle
   
# 输出杨辉三角形
for i in range(10):
    # 因为是三角形,所以i越小,前边需要填充的TAB越多
    for k in range((10-i)//2):
      print('\t', end='')
    for j in range(i+1):
      # 要形成“隔行错开”的效果,所以我们在偶数行加4个空格
      if i % 2 == 1:
            print("    ", end='')
      # 为何要使用TAB而非空格,大家可以将下面的end='\t'改成对应的空格数即可知晓
      print(triangle, end='\t')
    print()

isdkz 发表于 2022-2-28 14:32:52

\t 是水平制表符,它会根据终端的宽度来自动调整(不是调整制表符的宽度,

而是不够一个制表符的宽度会换行,因为制表符是一个整体),

而空格会按固定宽度输出(比如输出四个空格,

第一行的宽度只够放3个,那它还会在这一行放三个,

然后在第二行放一个,也就是空格会拆开放,而不像制表符一样当成一个整体)

李二蛋 发表于 2022-2-28 20:58:49

isdkz 发表于 2022-2-28 14:32
\t 是水平制表符,它会根据终端的宽度来自动调整(不是调整制表符的宽度,

而是不够一个制表符的宽度会 ...

感谢您的回答,我还有些疑问:
0.什么叫终端?
1.什么叫制表符?
2.制表符是一个整体,会自动根据终端宽度调整,不够一个会换行,
就比如一个制表符宽度是四,第一行不够那么换到下一行,即便是一个整体,
那么表达效果和空格有什么不同呢?
抱歉,前辈,我实在理解能力不足,可否给出代码更清晰直观理解,辛苦您了。

isdkz 发表于 2022-3-4 14:55:45

本帖最后由 isdkz 于 2022-3-4 21:51 编辑

李二蛋 发表于 2022-2-28 20:58
感谢您的回答,我还有些疑问:
0.什么叫终端?
1.什么叫制表符?


实在不好意思,我刚刚才看到你的回复。

第一个问题:终端(terminal)是命令行窗口(cmd),终端通常是Linux系统的说法。

就是那个运行命令的窗口

第二个问题:水平制表符就是一个tab键输出的符号,用来对文本做间隔的,

有间隔的格式是表,所以称它为制表符,\t 中的 t 就是 tab 的意思

第三个问题:制表符虽然是默认4个空格(在python中可以修改\t的宽度)的宽度,

但它不等同于 4 个空格,4 个空格是 4 个字符,而 \t 键是 1 个字符,

因为 \t 是一个字符,所以当终端的剩余宽度不够 4 个(空格的宽度)时,

它会 4 个(空格的宽度)都在第二行输出,

而 空格 是一个字符,当终端的剩余宽度不够 4 个(空格的宽度)时,

比如 这一行只剩下 3个(空格的宽度),它会在这一行输出3个空格,

剩下的那个会在第二行输出, \t 哪怕还能输出 3 个空格的宽度,它也不会拆开,

而是整体(4 个空格的宽度)在第二行输出,

制表符还可以自动调整间隔,它总能保证两行之间的列是对齐的,

而空格不懂变通,它总要输出四个空格

你执行这个代码就明白了:
# 使用 \t 制表符
print("使用制表符")
print('fdfdf\tfdfdf')
print('f\tfdfdfdf')
print('fdfer\tfvdgd')
print('fdfdfdf\tfdfdf')

print('-' * 50)

# 使用 4 个空格替代制表符
print("使用4个空格替代制表符")
print('fdfdf    fdfdf')
print('f    fdfdfdf')
print('fdfer    fvdgd')
print('fdfdfdf    fdfdf')


执行结果:


李二蛋 发表于 2022-3-4 23:12:00

isdkz 发表于 2022-3-4 14:55
实在不好意思,我刚刚才看到你的回复。

第一个问题:终端(terminal)是命令行窗口(cmd),终端通 ...

太太太太太感谢您了,两行之间的列保证对齐可太神奇了,下一行的\t是自动识别上一行的\t才能和上一行对齐么?如下代码,默认一个tab是8么

>>> print("q        qw")
q        qw
>>> print("qq        qw")
qq        qw
>>> print("qqqqq        qw")
qqqqq        qw
>>> print("qqqqqqqq        qw")
qqqqqqqq        qw

isdkz 发表于 2022-3-4 23:20:41

李二蛋 发表于 2022-3-4 23:12
太太太太太感谢您了,两行之间的列保证对齐可太神奇了,下一行的\t是自动识别上一行的\t才能和上一行对齐 ...

对的,\t 水平制表符会跟上一行联动的,默认情况下,一个 \t 是占了 4 个宽度的

李二蛋 发表于 2022-3-5 00:39:36

isdkz 发表于 2022-3-4 23:20
对的,\t 水平制表符会跟上一行联动的,默认情况下,一个 \t 是占了 4 个宽度的

感谢您,希望继续交流
页: [1]
查看完整版本: 杨辉三角形输出end = '\t'是什么意思