Python输出中文对齐方案

问题描述

在Python中输出中文时,由于中文字符的宽度不同于英文字符,会导致输出结果对齐不美观。本文将介绍一种解决方案,使得中文输出在控制台中能够正确对齐。

解决方案

我们可以使用Python的字符串格式化方法来解决中文对齐的问题。主要思路是根据中文字符的宽度,将每个中文字符视为两个英文字符的宽度来进行对齐。

下面是一种示例方案,用于在控制台中输出一个包含中英文的表格。

步骤1:准备数据

我们首先准备一些数据,用于构建表格。假设我们有一个学生列表,每个学生包含姓名、年龄和成绩。

students = [
    {"姓名": "张三", "年龄": 18, "成绩": 90},
    {"姓名": "李四", "年龄": 20, "成绩": 85},
    {"姓名": "王五", "年龄": 19, "成绩": 92}
]

步骤2:计算中英文字符宽度

为了正确对齐中文字符,我们需要计算中英文字符的宽度。可以使用chinese_len()函数来计算字符串的宽度,其中中文字符的宽度为2,英文字符的宽度为1。

def chinese_len(string):
    length = 0
    for char in string:
        if ord(char) > 127:
            length += 2
        else:
            length += 1
    return length

步骤3:构建表格

接下来,我们根据学生列表构建表格。为了使表格对齐美观,我们需要确定每列的宽度。我们可以根据每列中最长字符串的宽度来确定该列的宽度。

# 计算每列的宽度
name_width = max(chinese_len(student["姓名"]) for student in students)
age_width = max(chinese_len(str(student["年龄"])) for student in students)
score_width = max(chinese_len(str(student["成绩"])) for student in students)

# 构建表头
header = f"{'姓名'.center(name_width)} | {'年龄'.center(age_width)} | {'成绩'.center(score_width)}"
separator = "-" * (name_width + age_width + score_width + 4)

# 构建表格内容
table = f"{header}\n{separator}\n"
for student in students:
    name = student["姓名"].ljust(name_width)
    age = str(student["年龄"]).ljust(age_width)
    score = str(student["成绩"]).ljust(score_width)
    table += f"{name} | {age} | {score}\n"

步骤4:输出表格

最后,我们将表格输出到控制台。

print(table)

运行以上代码,即可在控制台中输出美观的中英文表格。

完整代码示例

def chinese_len(string):
    length = 0
    for char in string:
        if ord(char) > 127:
            length += 2
        else:
            length += 1
    return length


students = [
    {"姓名": "张三", "年龄": 18, "成绩": 90},
    {"姓名": "李四", "年龄": 20, "成绩": 85},
    {"姓名": "王五", "年龄": 19, "成绩": 92}
]

# 计算每列的宽度
name_width = max(chinese_len(student["姓名"]) for student in students)
age_width = max(chinese_len(str(student["年龄"])) for student in students)
score_width = max(chinese_len(str(student["成绩"])) for student in students)

# 构建表头
header = f"{'姓名'.center(name_width)} | {'年龄'.center(age_width)} | {'成绩'.center(score_width)}"
separator = "-" * (name_width + age_width + score_width + 4)

# 构建表格内容
table = f"{header}\n{separator}\n"
for student in students:
    name = student["姓名"].ljust(name_width)
    age = str(student["年龄