在线一键扒站源码php,网站建设服务合同缴纳印花税吗,wordpress 标签云 插件,长沙网站的建设在python中#xff0c;有时候会出现中英文混合输出的情形#xff0c;但是由于中文默认是全角格式#xff08;一个中文字符占用两个字符宽度#xff09;#xff0c;这会对python原生的print函数带来一些障碍。尤其是用户用print对齐输出的时候#xff0c;这种差异会导致文…在python中有时候会出现中英文混合输出的情形但是由于中文默认是全角格式一个中文字符占用两个字符宽度这会对python原生的print函数带来一些障碍。尤其是用户用print对齐输出的时候这种差异会导致文本无法准确对齐。为了解决这种问题这里提出一种方法。
python的print函数在进行对齐处理的时候首先需要判断字符串的长度。这个就是通常的len()函数。python在计算字符串长度的时候任何字符都只会被算作长度1无论全角还是半角所以会有下面的情况 len(一二三)
3len(123)
3但是对于对于全角字符打印宽度是两个字节半角字符是单个字节譬如下例 这里很明显的看到同样的长度为3的字符全角字符是半角字符一倍的打印长度。
这种差距会影响到print的对齐打印譬如下例 这个是一个右对齐的示例print函数首先计算了打印对象的长度len(),得到了这个打印对象的长度为3此处忽略全角和半角所以print会从右对齐的20节点开始排布意即print把从第18 个字符的位置开始打印这里用红线表示所以无论全角还是半角对象print都会从第18 个字符的位置打印。 按照正常字符半角文本会在第20个字符位置完成打印如上图的蓝线位置但是由于全角字符的占用了更多的字符所以这里的全角字符会占用18~23 字符位置这样会导致打印对齐出现问题包含全角的字符串会超出限定的界定位置。譬如上述的蓝色位置。超出的数量也很好理解就是全角字符的个数意即上述绿线的位置上述示例包含三个全角字符就会产出三个字符位置。
以此类推如果print在同行继续打印其他字符字符串里边包含全角字符那么后续的打印就会一直被前述全角字符的打印结果影响
这种方式也适用于全半角混合输出示例如下 对应的居中对齐模式也会有类似的影响 了解了上述原理用户可以根据这种特性自动完成对于全角半角混合模式的打印对齐处理。思路是在对齐宽度上对全角字符额外的宽度进行考虑这样可以构建一个中英文混合模式的打印对齐。代码如下
def get_number(char):count 0for item in char:# chinese char and chinese punctuation markif 0x4E00 ord(item) 0x9FA5 or 0xFF00 ord(item) 0xFFEF or 0x3000 ord(item) 0x303F:count 1return countdef print_hybrid(char, align, length):if alignl or alignleft :anchor elif alignc or aligncenter:anchor ^elif alignr or alignright:anchor else:ut.print_error(Not support align type. Current support is l(left), c(center), r(right))return -1add_len get_number(char)if add_len length:p_len 0else:p_len length - add_lenreturn f{char:{anchor}{p_len}}各种混合模式打印示例
可见此种方法建立在print原生的打印机制辅助计算全角字符的数量的方法实现的了全半角混合打印的对齐效果。