编辑代码

CURRENCY_DENOMINATIONS = [5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1]


def get_user_inputs():
    while True:
        try:
            amount_due = float(input("请输入需支付的金额:"))
            amount_paid = float(input("请输入实际支付的金额:"))
            if amount_paid < amount_due:
                print("支付金额不足,请重新输入。")
            else:
                return amount_due, amount_paid
        except ValueError:
            print("输入无效,请输入数字。")


def calculate_change_breakdown(change_cents):
    breakdown = []
    for denom in CURRENCY_DENOMINATIONS:
        count = change_cents // denom
        change_cents = change_cents % denom
        breakdown.append(count)
    return breakdown


def print_results(amount_due, amount_paid, change, breakdown):
    print(f"需支付的金额:{amount_due:.2f}元")
    print(f"实际支付的金额:{amount_paid:.2f}元")
    print(f"找零金额为:{change:.2f}元")

    denominations_names = ['50元纸币', '20元纸币', '10元纸币', '5元纸币', '2元纸币', '1元纸币', '5角硬币', '2角硬币', '1角硬币', '5分硬币', '2分硬币', '1分硬币']
    for i in range(len(breakdown)):
        if breakdown[i] > 0:
            if CURRENCY_DENOMINATIONS[i] >= 100:
                print(f"{denominations_names[i]}数量:{breakdown[i]}张")
            else:
                print(f"{denominations_names[i]}数量:{breakdown[i]}个")


def main():
    amount_due, amount_paid = get_user_inputs()
    change = amount_paid - amount_due
    change_cents = round(change * 100)
    breakdown = calculate_change_breakdown(change_cents)
    print_results(amount_due, amount_paid, change, breakdown)


if __name__ == "__main__":
    main()



CURRENCY_DENOMINATIONS = [5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 1, 5, 2, 1]


def calculate_change_breakdown(change):
    breakdown = [0] * len(CURRENCY_DENOMINATIONS)
    remaining_change = int(round(change * 100))
    for i in range(len(CURRENCY_DENOMINATIONS)):
        count = remaining_change // CURRENCY_DENOMINATIONS[i]
        breakdown[i] = count
        remaining_change = remaining_change - count * CURRENCY_DENOMINATIONS[i]
    return breakdown


def print_results(amount_due, amount_paid, change, breakdown):
    print(f"需支付的金额:{amount_due:.2f}元")
    print(f"实际支付的金额:{amount_paid:.2f}元")
    print(f"找零金额为:{change:.2f}元")
    currency_names = ["50元纸币", "20元纸币", "10元纸币", "5元纸币", "2元纸币", "1元纸币", "5角硬币", "2角硬币", "1角硬币", "1分硬币"]
    for i in range(len(CURRENCY_DENOMINATIONS)):
        if CURRENCY_DENOMINATIONS[i] >= 100:
            currency_name = currency_names[i]
            count = breakdown[i]
            if count > 0:
                print(f"{currency_name}数量:{count}张")
        else:
            index = i - len(CURRENCY_DENOMINATIONS)+len(currency_names)
            currency_name = currency_names[index]
            count = breakdown[i]
            if count > 0:
                print(f"{currency_name}数量:{count}个")


amount_due = float(input("请输入需支付的金额:"))
amount_paid = float(input("请输入实际支付的金额:"))
change = amount_paid - amount_due
breakdown = calculate_change_breakdown(change)
print_results(amount_due, amount_paid, change, breakdown)