C#薪资控制台应用:如何按列打印多列表,对应条目同行显示?
当然可以呀!要把这四个列表按规整的四列打印出来其实很简单,我给你分享几种实用的实现思路,适配控制台的排版需求:
方法一:原生字符串格式化(无需第三方库)
这种方法适合快速实现,不用额外安装包,通过字符串对齐语法就能保证列的整齐:
首先先确保你的payOwedList已经计算好(用列表推导式就能轻松搞定),然后用f-string的对齐规则控制每列宽度:
# 假设你已经获取了用户输入的三个列表 namesList = ["Alice Smith", "Bob Johnson", "Charlie Brown"] hoursList = [40, 35, 42] payRateList = [25.50, 18.75, 30.00] # 计算应发薪资列表 payOwedList = [hours * rate for hours, rate in zip(hoursList, payRateList)] # 打印表头,<15表示左对齐且占15个字符宽度(可根据需求调整) print(f"{'Employees':<15} {'Hours Worked':<15} {'Pay Rate':<10} {'Pay Owed':<10}") # 打印分隔线,让表格边界更清晰 print("-" * 50) # 遍历所有数据,逐行打印 for name, hours, rate, owed in zip(namesList, hoursList, payRateList, payOwedList): print(f"{name:<15} {hours:<15} ${rate:<9.2f} ${owed:<9.2f}")
输出效果大概是这样:
Employees Hours Worked Pay Rate Pay Owed -------------------------------------------------- Alice Smith 40 $25.50 $1020.00 Bob Johnson 35 $18.75 $656.25 Charlie Brown 42 $30.00 $1260.00
方法二:自动适配列宽(更灵活)
如果员工名字长度不一,固定宽度可能导致排版混乱,你可以自动计算每列的最大宽度来适配:
namesList = ["Alice Smith", "Bob Johnson", "Charlie Brown"] hoursList = [40, 35, 42] payRateList = [25.50, 18.75, 30.00] payOwedList = [hours * rate for hours, rate in zip(hoursList, payRateList)] # 计算每列内容的最大宽度 max_name_len = max(len(name) for name in namesList) max_hours_len = max(len(str(h)) for h in hoursList) max_rate_len = max(len(f"${r:.2f}") for r in payRateList) max_owed_len = max(len(f"${o:.2f}") for o in payOwedList) # 表头宽度取标题和内容的最大值 col1_width = max(len("Employees"), max_name_len) col2_width = max(len("Hours Worked"), max_hours_len) col3_width = max(len("Pay Rate"), max_rate_len) col4_width = max(len("Pay Owed"), max_owed_len) # 打印表头 print(f"{'Employees':<{col1_width}} {'Hours Worked':<{col2_width}} {'Pay Rate':<{col3_width}} {'Pay Owed':<{col4_width}}") # 计算分隔线总长度 total_width = col1_width + col2_width + col3_width + col4_width + 3 # 加3个空格的间隔 print("-" * total_width) # 逐行打印数据 for name, hours, rate, owed in zip(namesList, hoursList, payRateList, payOwedList): print(f"{name:<{col1_width}} {hours:<{col2_width}} ${rate:<{col3_width-1}.2f} ${owed:<{col4_width-1}.2f}")
这种方式会根据你的数据自动调整列宽,不管名字多长都能完美对齐。
方法三:用第三方库生成美观表格(适合复杂场景)
如果想要更专业的表格样式,可以用tabulate库,它能帮你自动处理分隔线、对齐和格式:
首先安装库:
pip install tabulate
然后代码实现:
from tabulate import tabulate namesList = ["Alice Smith", "Bob Johnson", "Charlie Brown"] hoursList = [40, 35, 42] payRateList = [25.50, 18.75, 30.00] payOwedList = [hours * rate for hours, rate in zip(hoursList, payRateList)] # 把四个列表组合成二维表格数据 table_data = list(zip(namesList, hoursList, payRateList, payOwedList)) # 定义表头 headers = ["Employees", "Hours Worked", "Pay Rate", "Pay Owed"] # 打印表格,选择grid格式(还有simple、fancy_grid等多种样式可选) print(tabulate(table_data, headers=headers, tablefmt="grid", floatfmt=".2f"))
输出效果会是这样:
+---------------+---------------+-----------+-----------+ | Employees | Hours Worked | Pay Rate | Pay Owed | +===============+===============+===========+===========+ | Alice Smith | 40 | 25.50 | 1020.00 | +---------------+---------------+-----------+-----------+ | Bob Johnson | 35 | 18.75 | 656.25 | +---------------+---------------+-----------+-----------+ | Charlie Brown | 42 | 30.00 | 1260.00 | +---------------+---------------+-----------+-----------+
小提醒
要确保四个列表的长度一致,不然zip会自动截断到最短的列表长度,导致部分数据无法显示哦~
内容的提问来源于stack exchange,提问作者MrPryan
相关产品推荐
相关产品推荐

