Python硬币翻转程序自定义翻转函数失效及逻辑异常问题求助
代码问题排查与修复
存在的两处核心错误
- Virar函数逻辑错误:函数内的两个
if判断为顺序执行,当输入值为cara时,第一个if将值修改为coroa后,第二个if会立刻匹配新值coroa,又将值改回cara,等于没有完成翻转操作。 - 外层循环范围错误:Python的
range()为左闭右开区间,原代码range(2, len(moedas))会漏掉divisor等于硬币总数量的轮次。比如4枚硬币的场景,仅会执行除数为2、3的轮次,缺少除数为4的轮次,无法得到示例中的正确结果。
修复后的完整代码
def Virar(moeda): if moeda == 'cara': return 'coroa' # 只有当前值不是cara时才会走到这一步,直接返回cara即可 return 'cara' qtde_moedas = int(input('请输入硬币总数量:')) moedas = ['cara'] * qtde_moedas # 简化初始化逻辑,不需要while循环 # 调整range的结束值为len(moedas)+1,覆盖到所有除数轮次 for divisor in range(2, len(moedas)+1): # 优化内层循环:直接遍历序号为divisor倍数的索引,无需遍历所有硬币 for index_num in range(divisor-1, len(moedas), divisor): moedas[index_num] = Virar(moedas[index_num]) # 可添加打印语句验证结果,示例4枚硬币运行后输出 ['cara', 'coroa', 'coroa', 'cara'] print(moedas)
内容的提问来源于stack exchange,提问作者thiago silva
相关产品推荐
相关产品推荐

