自定义中文字符串对齐函数

中文字符串对齐函数

  前面学到s.rjust(width[, fillstr])、s.ljust(width[, fillstr])、s.center(width[, fillstr]),惊为天人,爱不释手。但后来发觉不好了😂😂经常代码没毛病,但打印显示却不是我想要的那个样子。最近,才发现,函数把中文字符按英文字符计数了,但实际上她们是要占位两个字符位的咯。(略记于此,让有我经历的小伙伴儿避坑🤓)。

☆程序调试环境☆
python 3.6.6 安卓版(手机)

知识点:s.rjust(width[, fillstr]),
s.ljust(width[, fillstr]), s.center(width[, fillstr])

技巧: 无


  为方便,自已动手码了个类似的函数,以助中文字符显示打印正解。(我还没能全包中文字符,如“【】”等特殊符号,就不在我设定的中文字符区间——’\u4e00’<=i<=’\u9fa5’,这个也是我捡CSDN大佬的辛劳。😁您可以自行添加。)代码如下:

My python code

def aline(str, aline, width, fillstr=" "):
    """字符串左l中c右r对齐"""
    #s, aline, n分别为字符串,对齐方式,对齐宽度
    
    #字符计数变量置零
    k = 0
    #字符串width计数,中文字符计2
    for i in str:
        #用中文字符区间判断中文字符,中文字符按2计width
        if '\u4e00'<=i<='\u9fa5': k += 2
        else: k += 1
    if width<k: width = k
    if aline=="l": return str+fillstr*(width-k)
    elif aline=="r": return fillstr*(width-k)+str
    elif aline=="c":
        #均分空格长度
        c = (width-k)//2
        return fillstr*c+str+fillstr*c

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  通过实际run代码,我的aline()对中文字符是基本友好的。😉😉

本次Demo的完整代码

### ==My python code==
#! /sur/bin/sur python
# coding: utf-8

#加载自定义数字标尺线打印函数numbet_line()
from number_lines import number_line

#居中:s.centr(n) n为字条串s显示的宽度
#靠左:s.ljust(n) n为字条串s显示的宽度
#靠右:s.rjust(n) n为字条串s显示的宽度


def aline(str, aline, width, fillstr=" "):
    """字符串左l中c右r对齐"""
    #s, aline, n分别为字符串,对齐方式,对齐宽度
    
    #字符计数变量置零
    k = 0
    #字符串width计数,中文字符计2
    for i in str:
        #用中文字符区间判断中文字符,中文字符按2计width
        if '\u4e00'<=i<='\u9fa5': k += 2
        else: k += 1
    if width<k: width = k
    if aline=="l": return str+fillstr*(width-k)
    elif aline=="r": return fillstr*(width-k)+str
    elif aline=="c":
        #均分空格长度
        c = (width-k)//2
        return fillstr*c+str+fillstr*c

   
#main

s_e = "I am a man at Chongqing."
s_c = "我是重庆男人。"
width = 28
print("\n"*2, "Demo字符串:")
print("1. ", s_e)
print("2. ", s_c)

print("\n"*2)
print(aline("python函数", "c", 42, "-"))
print(aline("s.ljust(), s.rjust(), s.center()函数", "c", 42, "-"))
print("-"*42)
print(s_e.ljust(width))
print(s_e.rjust(width))
print(s_e.center(width))
#调用自定义函数,打印数字标尺线
number_line(width)
print("="*42)


print("\n"*2)
print(aline("自定义函数", "c", 42, "-"))
s ="aline(str, aline, width[, fillstr])"
print(aline(s, "c", 42,"-"))
print("-"*42)
print(aline(s_e, "l", width))
print(aline(s_e, "r", width))
print(aline(s_e, "c", width))
#调用自定义函数,打印数字标尺线
number_line(width)
print("="*42)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻精灵_cq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值