python里面的len 对于汉字和非汉字都视为1个字符,然而输出的时候中文占的是2个非中文的宽度,使得一些输出无法对齐。
网上有些资料说使用空格填充的时候可以使用中文的空格,也就是 chr(12288)
但是对于中英文混合来说,这个就没用了
a="你好呀123"
b="123456"
print("{:<10}哈哈哈".format(a,chr(12288)))
print("{:<10}哈哈哈".format(b,chr(12288)))
因此这种情况下我们可以自己手写一个函数来使得中英文对齐。
已知中文宽度是英文的两倍,因此对于一个句子我们可以数出其中文个数,假设总长度(句子+填充)为a,中文个数为b,英文个数为c
那么需要末尾填充的空格(这里使用英文空格) 就是 a-b-c
这个是左对齐的代码,返回的就是处理完毕的字符串,直接print出来就好了
# s:原字符串 length:填充总长度
#左对齐
def standard_string(s,length):
Count=0
for aim in s:
if('\u4e00' <= aim <= '\u9fff'):
Count+=1
flag=length-len(s)-Count
return s+' '*flag
结果:
但是假如字符串里面混入了中文的标点,比如(,那就没用了,因为(不再那里面
我自己上网找了一下unicode码,发现好像没有特别的为汉字所有标点放在一起,所以我自己定了个界限,从FE10 往后都算
# s:原字符串 length:填充总长度
#左对齐
def standard_string(s,length):
Count=0
for aim in s:
if('\u4e00' <= aim <= '\u9fff' or 'FE10'<=aim):
Count+=1
flag=length-len(s)-Count
if(flag>=0):
return s+' '*flag
else:
return "Wrong"
a="((("
b="((("
print(standard_string(a,10)+'aaa')
print(standard_string(b,10)+'aaa')