硬币兑换美元金额计算程序出现KeyError:0错误,求解决
解决硬币兑换金额计算程序中的KeyError问题
错误原因
KeyError: 0的核心问题是代码逻辑错误:
你用enumerate(coins)获取的k是列表的索引值(从0开始递增),但coin_values字典的键是硬币的面额数值(10、20、50、1、2)。用索引去字典中查找不存在的键,自然会抛出KeyError。
修复方案
根据你的输入逻辑,分两种常见场景修复:
场景1:输入是对应面额的硬币数量
如果你的输入格式是「10分硬币数量 20分硬币数量 50分硬币数量 1美元硬币数量 2美元硬币数量」(比如输入2 1 0 3 1表示2个10分、1个20分、3个1美元、1个2美元),修改代码如下:
# Function to calculate total amount from coins received def calculate_amount(coins): # 按输入顺序对应各面额的美元价值 coin_values = [0.1, 0.2, 0.5, 1, 2] # 遍历数量列表,计算总金额 total_amount = sum([value * count for value, count in zip(coin_values, coins) if count > 0]) return total_amount # Take input from user coins = list(map(int, input().split())) # Call the function to calculate total amount total_amount = calculate_amount(coins) # Print the total amount in dollars print("%.2f dollar" % total_amount)
或者保留字典结构,明确面额顺序:
def calculate_amount(coins): coin_values = {10: 0.1, 20: 0.2, 50: 0.5, 1: 1, 2: 2} # 与输入顺序对应的面额列表 denominations = [10, 20, 50, 1, 2] total_amount = sum([coin_values[denom] * count for denom, count in zip(denominations, coins) if count > 0]) return total_amount
场景2:输入是单个硬币的面额集合
如果你的输入格式是「多个硬币面额的集合」(比如输入10 10 20 50 1表示两个10分、一个20分、一个50分、一个1美元),修改代码逻辑为统计每个面额的金额总和:
# Function to calculate total amount from coins received def calculate_amount(coins): coin_values = {10: 0.1, 20: 0.2, 50: 0.5, 1: 1, 2: 2} total_amount = 0 for coin in coins: # 仅处理字典中存在的面额 if coin in coin_values: total_amount += coin_values[coin] return total_amount # Take input from user coins = list(map(int, input().split())) # Call the function to calculate total amount total_amount = calculate_amount(coins) # Print the total amount in dollars print("%.2f dollar" % total_amount)
验证说明
- 场景1输入示例:
2 1 0 3 1,输出应为5.40 - 场景2输入示例:
10 10 20 50 1,输出应为1.90
内容的提问来源于stack exchange,提问作者Jeetendra Dandge
相关产品推荐
相关产品推荐

