鱼C论坛

 找回密码
 立即注册
查看: 1074|回复: 13

怎么设置输出格式,让内容对齐?

[复制链接]
发表于 2023-10-30 14:26:11 | 显示全部楼层 |阅读模式

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

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

x

  1. m = 1
  2. n = '苹果菠萝'
  3. p = 30.34
  4. print(f'{str(m):<6}{n:<14}{p:>6.2f}\n')
  5. m = 3
  6. n = '桃子'
  7. p = 7.90
  8. print(f'{str(m):<6}{n:<14}{p:>6.2f}\n')
复制代码


上面的代码输出结果为:
1     苹果香蕉           30.34

3     桃子              7.90

最后面的一列为什么没有按照我的想法进行右对齐呢?
怎么样设置使得前面两列内容是左对齐,第三列内容右对齐呢?

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2023-10-30 14:26:19 | 显示全部楼层
在Python中,可以使用格式化字符串来设置输出格式。在给定的代码中,使用了格式化字符串f来输出内容,并使用了对齐符号<和>来指定对齐方式。

对于第三列内容右对齐的问题,代码中使用了对齐符号>来指定右对齐,但是由于第三列的内容是字符串类型,而不是数字类型,所以无法实现右对齐。对齐符号>只对数字类型有效。

要实现前两列内容左对齐,第三列内容右对齐的效果,可以使用以下代码:

  1. m = 1
  2. n = '苹果菠萝'
  3. p = 30.34
  4. print(f'{str(m):<6}{n:<14}{str(p):>6}\n')

  5. m = 3
  6. n = '桃子'
  7. p = 7.90
  8. print(f'{str(m):<6}{n:<14}{str(p):>6}\n')
复制代码


在第三列的输出格式中,使用了对齐符号>,但是将第三列的内容转换为字符串类型,以实现右对齐的效果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-30 14:29:32 | 显示全部楼层
isdkz 发表于 2023-10-30 14:26
在Python中,可以使用格式化字符串来设置输出格式。在给定的代码中,使用了格式化字符串f来输出内容,并使 ...

我试了一下你的代码,依然不能右对齐。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-30 14:52:48 | 显示全部楼层
  1. m = 1
  2. n = '苹果菠萝'
  3. p = 30.34
  4. print(f'{str(m):<6}{n:<14}{p:>6.2f}\n')
  5. m = 3
  6. n = '桃子'
  7. p = 7.90
  8. print(f'{str(m):<6}{n:<14}{p:>6.2f}\n')
复制代码

我把这段代码放在IDLE中运行就是可以都对齐的,但是放在pycharm中就不能对齐,这是为什么呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-30 21:56:25 | 显示全部楼层
子飞鱼 发表于 2023-10-30 14:52
我把这段代码放在IDLE中运行就是可以都对齐的,但是放在pycharm中就不能对齐,这是为什么呢?

我在IDLE试过了,你的原代码确实对不齐,得让第三列先字符化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-1 20:56:17 | 显示全部楼层
lassiter 发表于 2023-10-30 21:56
我在IDLE试过了,你的原代码确实对不齐,得让第三列先字符化

  1. m = 1
  2. n = '苹果菠萝'
  3. p = 30.34
  4. print(f'{str(m):<6}{n:<14}{str(p):>6}\n')

  5. m = 3
  6. n = '桃子'
  7. p = 7.90
  8. print(f'{str(m):<6}{n:<14}{str(p):>6}\n')
复制代码


可是把第三列字符串化以后,依然不能对齐……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-1 21:26:34 | 显示全部楼层
首先,如果你想要使纯文字界面看起来是整齐的,请你先使用等款字体
(没有等款字体对齐会很麻烦,通过"\t"tab制表符之类的在idle中也可以实现自动对齐)

在使用等宽字体的情况下,你需要计算出长度最长的单元格的长度:如
"苹果香蕉"长度是8个空格/两个制表符(tab)
其他比"苹果香蕉"短的,如: "桃子"    长度为四个空格,要再补全四个空格使他们对齐

这样就可以轻松实现纯文本的对齐效果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-1 22:51:35 | 显示全部楼层
子飞鱼 发表于 2023-11-1 20:56
可是把第三列字符串化以后,依然不能对齐……

我再试了一下,确实发现了这个问题,分析后发现是因为程序里认为一个汉字就一个字符,但显示的时候中文字体占据2个字符宽度造成,在网上找了各种方法,最后有两种解决办法:
1、使用第三方库fontTools,通过这个库处理汉字的宽度,这个我看了后代码较长,不推荐;
2、n的具体长度用预定的14-len(包含汉字数量)计算。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-8 16:00:20 | 显示全部楼层
cjjJasonchen 发表于 2023-11-1 21:26
首先,如果你想要使纯文字界面看起来是整齐的,请你先使用等款字体
(没有等款字体对齐会很麻烦,通过"\t"t ...

如何使用等宽字体呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-8 16:01:22 | 显示全部楼层
lassiter 发表于 2023-11-1 22:51
我再试了一下,确实发现了这个问题,分析后发现是因为程序里认为一个汉字就一个字符,但显示的时候中文字 ...

请具体解释下:“2、n的具体长度用预定的14-len(包含汉字数量)计算。”  这句话什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-9 06:56:03 | 显示全部楼层
百度搜索"python idle 如何使用等宽字体"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-9 13:09:06 | 显示全部楼层
cjjJasonchen 发表于 2023-11-9 06:56
百度搜索"python idle 如何使用等宽字体"

IDLE设置完等宽字体后,依然不能解决在有汉字和数字同时出现 输出对齐的问题。
是不是IDLE设置等宽字体不是针对输出内容的?
还有什么办法解决么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-9 13:17:19 | 显示全部楼层
子飞鱼 发表于 2023-11-9 13:09
IDLE设置完等宽字体后,依然不能解决在有汉字和数字同时出现 输出对齐的问题。
是不是IDLE设置等宽字体 ...

其他的暂时想不到了,如果有空的话建议去学习tkinter,挺简单的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-28 22:51:35 | 显示全部楼层
子飞鱼 发表于 2023-11-8 16:01
请具体解释下:“2、n的具体长度用预定的14-len(包含汉字数量)计算。”  这句话什么意思?

显示的时候汉字既然占2个空位,那我用14-汉字个数不就和14个英文字符等长了。
  1. # 给你一个求字符串中汉字个数的自定义函数
  2. def length_hanzi(n):
  3.     num=0
  4.     for a in n:
  5.         if '\u4e00' <= a <='\u9fff':
  6.             num+=1
  7.     return num
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 22:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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