那么当显示为13公里的时候,实际上是12公里。(因为4被跳了。)
而当显示为15公里的时候,实际上是13公里。(因为4和14被跳了。)
现在请给出一个函数,当输入显示公里数时,返回实际公里数。
有人表示有答案会影响自己的思路,所以答案将延迟放出(我会告诉你,其实是我没做出来吗?)。
给出测试代码,test.py请在每日一题33,34中查看。
- test.assert_equals(faulty_odometer(13), 12)
- test.assert_equals(faulty_odometer(15), 13)
- test.assert_equals(faulty_odometer(55), 40)
- test.assert_equals(faulty_odometer(2005), 1462)
- test.assert_equals(faulty_odometer(1500), 1053)
- test.assert_equals(faulty_odometer(999999), 531440)
- test.assert_equals(faulty_odometer(165826622), 69517865)
更新答案。
def faulty_odometer(n):
- result = 0
- digits = len(str(n))
- nonaryTranslation = "".join([str(int(x)-1) if int(x) >= 5 else x for x in list(str(n))])
- for i in nonaryTranslation:
- digits -= 1
- result += int(i) * (9**digits)
- return result
下面这个更溜!
- tr = str.maketrans('56789', '45678')
- def faulty_odometer(n):
- return int(str(n).translate(tr), 9)