由于中文占全角宽度,一般的字符,比如英文占半角宽度,所以我们需要一个函数来调整字符串长度,使得字符串长度相同。这里采用的是补空格的方式~~
1.little tip
在开始之前提示一点,由于pycharm的字体问题可能会导致中文字符位数不是英文两倍的情况,比如默认字体JetBrains Mono,如果你的python字体是JetBrains Mono的话,执行下面的代码可能会出现这样的输出:
所以如果要使用该代码实现对齐输出,最好先将pycharm字体改为中文为英文两倍宽的字体类型,我下面的输出结果采用的是楷体(KaiTi)
修改字体的方式是依次点击:File>Settings>Editor>Font,就来到了字体设置界面,点击Font就可以选择字体啦~,之后点击OK即可应用字体:
更改前:(观察右边的预览)
更改后:
2.example
以打印购物清单为例:
要打印列表:
products = [["earplugs", 12], ["电冰箱", 7000], ["冰红茶", 4], ["TOM & JERRY", 10], ["migo", 70], ["辣条", 0.5], ["doge", 10000]]
效果如下:
代码如下~~
# -*- coding = utf-8 -*-
n2 = 15 # 提示ERROR时修改此处,这是设定的字符串长度
# 下面函数的作用是把字符串长度设定为n个字节(用空格补齐),str为待处理字符串
def al(str, n):
m = len(str) # m为原字符串长度
i = 0 # i为计数变量,计算汉字个数
for c in str: # c遍历字符串str的字符
if '\u4e00' <= c <= '\u9fef': # 中文字符Unicode编码范围,其实还有很多其它的,但几乎都用不到,这个范围已经足够了
i += 1
dif = n-(m+i) # m+i为原字符串真实长度(字符位数),dif为待补空格数
if dif >= 0:
return str+" "*dif
else:
print("ERROR错误:限定的对齐长度小于字符串长度!")
return None
# 下面打印商品列表
products = [["earplugs", 12], ["电冰箱", 7000], ["冰红茶", 4], ["TOM & JERRY", 10], ["migo", 70], ["辣条", 0.5], ["doge", 10000]]
n1 = len(products)+2
print("------商品列表------")
for i in range(len(products)):
print(al("%d" % i, n1)+al(products[i][0], n2), products[i][1])