Python住房入住率报告:浮点数保留1位小数及格式错误修复求助
修复方案
以下是针对问题的完整修复代码,同时优化了代码结构:
def get_data(): occupants_labels = ["0", "1", "2", "3", "4", "5", "6", ">6"] house_counts = [] for label in occupants_labels: count = int(input(f"Provide the number of houses with {label} occupants: ")) house_counts.append(count) return occupants_labels, house_counts def calculate_percentages(house_counts): total = sum(house_counts) return [(count * 100 / total) for count in house_counts] def display_results(occupants_labels, house_counts, percentages): print("Results") # 打印表头与分隔线 print("{0:>10} | {1:>12} | {2:>12}".format("Occupants", "No. Houses", "Percentage (%)")) print("-" * 40) # 逐行输出数据 for label, count, pct in zip(occupants_labels, house_counts, percentages): print("{0:>10} | {1:>12} | {2:>12.1f}".format(label, count, pct)) if __name__== "__main__": occupants_labels, house_counts = get_data() percentages = calculate_percentages(house_counts) display_results(occupants_labels, house_counts, percentages)
问题修复细节
1. 表头重复显示问题
原代码采用横向布局,每个数据行都附带表头标签,导致重复。修复后改为纵向表格:
- 仅在顶部显示一次统一表头
- 每行对应一个居住人数类别,数据与表头列一一对应,结构更清晰
2. 百分比格式化与类型错误
原代码直接输出未格式化的浮点数,且错误地对字符串应用f格式符导致报错。修复方式:
- 直接对浮点型百分比值使用
.1f格式符,确保保留1位小数 - 用
>12设置固定列宽,保持表格对齐 - 避免将百分比转换为字符串后再格式化,彻底解决
Unknown format code 'f' for object of type 'str'错误
代码优化点
- 用列表替代分散的
h0-h7变量,减少冗余,便于后续扩展类别 - 使用
zip批量遍历数据,简化循环逻辑 - 添加分隔线提升表格可读性
内容的提问来源于stack exchange,提问作者DarkPhobos
相关产品推荐
相关产品推荐

