最近我在图灵机上接受了一个编程挑战。问题是:
你将得到一个字符串列表(ops)作为输入。
- 如果它是一个整数,你必须保持一个记录
- 如果它是一个字符'C',你必须删除最后记录的元素
- 如果它是一个字符'D',你必须将最后一个元素加倍并记录它
- 如果它是一个字符'+',你必须添加最后两个元素,并记录它返回记录的最终总和。
输入示例,ops = ["5", "2", "C", "D", "+"]
output = 30
我能够编写代码,但它没有通过。回顾过去,我只是想找出哪里出了问题。请在下面找到我的代码:
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
2条答案
按热度按时间bfhwhh0e1#
在Ruby中,这通常是用一个
case
来完成的,而不是尾随的if
。这意味着如果正确地进行,则不可能发生无意的分配。case rec
和when 'D'
将始终是安全的。例如:
c7rzv4ha2#
下面是如何运行您的代码,只需一点改进。