You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

关键修改点说明

  1. 频道列表的价格格式修复
    原来的"{0:<40}{1:>2}{2:>5.2f}"会给$预留2个字符宽度,导致$和价格之间出现空格。改成"{0:<40}${1:>5.2f}",把$直接嵌入格式字符串,既消除了冗余空格,又确保所有价格都显示两位小数。

  2. 选中频道的价格格式修复
    原来用逗号分隔多个字符串打印(print(" - ...", "($", value, ")"))会自动在元素间加空格,导致出现($ 21.4 )这种格式。改用f-string格式化(f" - ... (${value:.2f})"),直接把价格格式化为两位小数,同时让括号、$和价格完全贴合,符合你想要的($21.40)样式。

  3. 变量初始化优化
    原来的代码中sum只在全不选的分支里初始化,选中分支会出现未定义的报错。我提前在函数开头初始化了total_sum = 0(顺便把变量名改成更清晰的total_sum,避免和内置函数sum冲突),解决了潜在的运行时错误。

  4. 逻辑简化
    把全不选的判断条件存到all_no变量里,让代码更简洁;用else替代重复的“至少选一个”判断,减少冗余代码。

这样修改后,你的程序就能完美输出$21.40、($21.40)这种符合预期的格式啦!

内容的提问来源于stack exchange,提问作者Frio_Penitencia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:47:50