Turing编码挑战得分计算代码未通过:请求排查隐藏Bug
编码挑战代码Bug排查
题目要求
给定字符串列表ops作为输入,需执行以下操作:
- 若元素为整数(字符串形式),则记录该整数;
- 若元素为字符
'C',则移除最后一条记录的元素; - 若元素为字符
'D',则将最后一条记录的元素翻倍并记录; - 若元素为字符
'+',则将最后两条记录的元素相加并记录;
最终返回所有记录的总和。
示例输入输出
- 输入:
ops = ["5", "2", "C", "D", "+"]
- 输出:
30
待排查的Ruby代码
def score_calculator scores = [] ops.each do |rec| scores << rec.to_i if rec.is_a?(Integer) scores << scores.last(2).sum if rec == '+' scores << (scores.last.to_i * 2) if rec = 'D' scores.pop if rec == 'C' end return scores.sum end
隐藏Bug分析
你的代码存在三个关键问题:
整数判断逻辑完全错误:
ops数组中的所有元素都是字符串类型,rec.is_a?(Integer)永远返回false,导致所有数字元素都无法被添加到scores数组中。正确的做法是判断字符串是否能转换为有效整数,比如使用rec.to_i.to_s == rec(适用于非负整数),或者正则rec.match?(/^-?\d+$/)(兼容负数),确认后再将其转为整数加入scores。赋值操作误用作相等判断:
处理'D'的条件中,rec = 'D'是赋值语句,会把rec强制设为'D',同时该表达式始终为真,导致每次循环都会执行这条翻倍逻辑,完全破坏了正常流程。必须改为相等判断rec == 'D'。分支逻辑未做互斥处理:
当前代码使用多个独立的if语句,而非互斥的if-elsif链或case语句,可能导致同一元素触发多个分支(虽然题目输入不会出现这种情况,但逻辑上不严谨)。使用互斥分支能确保每个元素只执行对应的处理逻辑。
修正后的代码示例
def score_calculator(ops) scores = [] ops.each do |rec| if rec.to_i.to_s == rec scores << rec.to_i elsif rec == '+' scores << scores.last(2).sum elsif rec == 'D' scores << scores.last * 2 elsif rec == 'C' scores.pop end end scores.sum end
内容的提问来源于stack exchange,提问作者coder2023
相关产品推荐
相关产品推荐

