1
520Python OP |
2
wuwukai007 2019-12-27 10:50:38 +08:00 via Android
403
|
3
520Python OP @wuwukai007 图片链接打开 403 吗?我点开正常打开呢
|
4
BingoXuan 2019-12-27 10:55:13 +08:00
换个思路,通过使用 str.ljust 来对齐。我一直没搞懂\t 的输出规律
for i in range (1,11): print(''.join([str(x).ljust(10) for x in [i,i**2,i**3]])) |
5
ipwx 2019-12-27 10:58:05 +08:00 1
你是不是对制表符有什么误解?
制表符的作用只是相当于填充空格,至少填充空格,至多填充空格到下一个光标位置为某个数的整倍数。你这张图看上去 PyCharm 是把它填充为 4 个空格的整倍数。 print(a, b) 这句话,a 和 b 之间本来就会有一个固定的空格。所以你 "\t",i**2,"\t",这里就会是 "\t {number} \t"。比如你那一行,4 \t 16 \t 64 \t 4,你看如果 16 前面的空格是 4 的整倍数列开始的字符,那么 16 加上后面的空格已经占据了第二个 4 的整倍数区域。\t 会让它直接输出 4 个空格占据第三个 4 的整倍数区域。。。所以和上面无法对齐。 用制表符对齐命令行输出基本没戏。你得用更高级的包,比如 terminaltables。 |
6
wy9899 2019-12-27 10:59:30 +08:00
请使用占位符
|
7
ipwx 2019-12-27 11:03:37 +08:00
@BingoXuan lstrip 还不如格式化输出
print('Number Square Cube') for i in range(1, 11): ....print(f'{str(i):<8s}{str(i**2):<8s}{str(i**3)}') |
8
ipwx 2019-12-27 11:04:39 +08:00
上面写错了,ljust 不如格式化输出
|
10
520Python OP |
11
lolizeppelin 2019-12-27 11:09:06 +08:00
去参考 prettytable 怎么写的
|
12
520Python OP |
13
ipwx 2019-12-27 11:22:29 +08:00
@520Python 这哪里正常了,你没发现数字和表头没对齐么。。。
请重新阅读一下我的话。\t 的作用是对齐到某个数的整倍数。不同应用程序,这个数不一样,PyCharm 是 4,而 cmd.exe 是 8。带入 8 这个数你重新计算一下。 |
15
BingoXuan 2019-12-27 11:31:03 +08:00
|
16
lolizeppelin 2019-12-27 11:41:49 +08:00
制表符靠谱 python 就不会用 4 空格了
制表符不靠谱又不是 python 的锅 无论什么语言写对齐都要算字符宽度然后填充空格 中文字符宽度还要麻烦一点 |
17
daimiaopeng 2019-12-27 12:20:59 +08:00 via Android
print("%4s" %num)
|
18
jin7 2019-12-27 13:45:43 +08:00
|
19
jin7 2019-12-27 13:53:28 +08:00
中间对齐
for i in range(1, 11): print(f'{str(i):^8}{str(i**2):^8}{str(i**3):^8}') https://docs.python.org/3.8/library/string.html |
20
no1xsyzy 2019-12-27 14:51:53 +08:00
@lolizeppelin 制表符在用于 indentation 的时候还是挺靠谱的,不管 4 还是 8 都很整齐
并且还可以根据屏幕大小同代码不同 indentation 距离(看过博客提出这个问题来决定还是采用 Tab indent ) Python 的问题好像是代码格式化时除了 indentation 还时不时需要 alignment,所以还是空格好 —— 当然,这是拍脑袋瞎猜,我没去查 PEP 说为什么这么来。 中文字符已经是比较简单的了,我提醒一下,字符修饰符才是最恶心的,因为你甚至不知道当前字体是否支持字符修饰符,它到底会渲染到另一个字符上去还是渲染成豆腐块。 |
21
blueset 2019-12-27 18:17:17 +08:00
|
22
fuchunliu 2019-12-27 18:22:09 +08:00 via Android
数字宽度格式化一下?
|