Python字符串遍历与CoinStar硬币金额计算函数实现问题
编写CoinStar函数计算硬币总金额
需求说明
编写名为CoinStar的Python函数,满足以下要求:
- 函数接收一个字符串参数,该字符串仅允许包含
p、n、d、q(大小写均可) - 各字符对应的美元金额:
p或P:0.01(便士)n或N:0.05(镍币)d或D:0.10(一角硬币)q或Q:0.25(两角五分硬币)
- 函数返回总金额的浮点数;若字符串包含上述以外的非法字符,返回-1
待修正代码
def coinstar(yo): for i in (0,len(yo)): ye=0 if i == 'p' or i =='P': ye + 0.01 if i == 'n' or i =='N': ye+ 0.05 if i == 'd' or i == 'D': ye + 0.10 if i == 'q' or i == 'Q': ye+ 0.25 return ye print(coinstar('qdnp'))
原代码问题分析
- 循环逻辑错误:
for i in (0,len(yo))仅会循环0和字符串长度两个数值,无法遍历字符串的每个字符 - 变量初始化位置错误:
ye=0放在循环内部,每次循环都会重置累计金额,无法实现累加 - 累加操作错误:
ye + 0.01仅做计算但未赋值给ye,需要用ye += 0.01完成累加 - 缺少非法字符校验:未判断字符是否合法,遇到非法字符无法返回-1
修正后的代码
def CoinStar(yo): total = 0.0 valid_chars = {'p', 'P', 'n', 'N', 'd', 'D', 'q', 'Q'} for char in yo: # 遇到非法字符直接返回-1 if char not in valid_chars: return -1 # 统一转小写判断,简化逻辑 match char.lower(): case 'p': total += 0.01 case 'n': total += 0.05 case 'd': total += 0.10 case 'q': total += 0.25 return total # 测试示例 print(CoinStar('pppp')) # 输出 0.04 print(CoinStar('QdNnpqDqq')) # 输出 1.31 print(CoinStar('dpnx')) # 输出 -1
示例验证
CoinStar('pppp')→ 0.04CoinStar('QdNnpqDqq')→ 1.31CoinStar('dpnx')→ -1
内容的提问来源于stack exchange,提问作者Mattx21
相关产品推荐
相关产品推荐

