Python字典值输出格式化问题:保留两位小数与空格修正
解决电视订阅程序的价格格式问题
嘿,你的问题本质都是字符串格式化处理不到位导致的,咱们直接改代码就能搞定,我把修复后的版本和修改点给你列出来:
修复后的完整代码
def get_subscription(): sub_price = { "Sports Group Pack":21.40, "Documentaries Pack":15.32, "FOX Movies Pack":17.12, "HBO Pack":13.98, "Cinema World":9.56, "Celestial Movies":8.56 } print("Channels available for subscription (price/mth)") # 修复频道列表的价格格式:去掉$和价格间的空格,确保两位小数 for key, value in sub_price.items(): print("{0:<40}${1:>5.2f}".format(key, value)) sub01 = input("Subscribe to Sports Group Pack? (Y/N):").upper() sub02 = input("Subscribe to Documentaries Pack? (Y/N):").upper() sub03 = input("Subscribe to FOX Movies Pack? (Y/N):").upper() sub04 = input("Subscribe to HBO Pack? (Y/N):").upper() sub05 = input("Subscribe to Cinema World? (Y/N):").upper() sub06 = input("Subscribe to Celestial Movies? (Y/N):").upper() # 提前初始化总和变量,避免未赋值报错 total_sum = 0 all_no = sub01 =="N" and sub02 == "N" and sub03 == "N" and sub04 == "N" and sub05 == "N" and sub06 == "N" if all_no: print() print("Your selection:") print(" - None") print() print("Total cost $0.00") else: print("Your selection:") # 修复选中频道的价格格式:用格式化字符串去掉冗余空格,强制两位小数 if sub01 == "Y": print(f" - Sports Group Pack (${sub_price['Sports Group Pack']:.2f})") total_sum += sub_price["Sports Group Pack"] if sub02 == "Y": print(f" - Documentaries Pack (${sub_price['Documentaries Pack']:.2f})") total_sum += sub_price["Documentaries Pack"] if sub03 == "Y": print(f" - FOX Movies Pack (${sub_price['FOX Movies Pack']:.2f})") total_sum += sub_price["FOX Movies Pack"] if sub04 == "Y": print(f" - HBO Pack (${sub_price['HBO Pack']:.2f})") total_sum += sub_price["HBO Pack"] if sub05 == "Y": print(f" - Cinema World (${sub_price['Cinema World']:.2f})") total_sum += sub_price["Cinema World"] if sub06 == "Y": print(f" - Celestial Movies (${sub_price['Celestial Movies']:.2f})") total_sum += sub_price["Celestial Movies"] print() print(f"Total cost ${total_sum:.2f}") get_subscription()
关键修改点说明
频道列表的价格格式修复
原来的"{0:<40}{1:>2}{2:>5.2f}"会给$预留2个字符宽度,导致$和价格之间出现空格。改成"{0:<40}${1:>5.2f}",把$直接嵌入格式字符串,既消除了冗余空格,又确保所有价格都显示两位小数。选中频道的价格格式修复
原来用逗号分隔多个字符串打印(print(" - ...", "($", value, ")"))会自动在元素间加空格,导致出现($ 21.4 )这种格式。改用f-string格式化(f" - ... (${value:.2f})"),直接把价格格式化为两位小数,同时让括号、$和价格完全贴合,符合你想要的($21.40)样式。变量初始化优化
原来的代码中sum只在全不选的分支里初始化,选中分支会出现未定义的报错。我提前在函数开头初始化了total_sum = 0(顺便把变量名改成更清晰的total_sum,避免和内置函数sum冲突),解决了潜在的运行时错误。逻辑简化
把全不选的判断条件存到all_no变量里,让代码更简洁;用else替代重复的“至少选一个”判断,减少冗余代码。
这样修改后,你的程序就能完美输出$21.40、($21.40)这种符合预期的格式啦!
内容的提问来源于stack exchange,提问作者Frio_Penitencia
相关产品推荐
相关产品推荐

