Discuss / Python / 我竟然就是把7.6变成7就改好了。哈哈。看了上面各位小伙伴的方法,收获良多

我竟然就是把7.6变成7就改好了。哈哈。看了上面各位小伙伴的方法,收获良多

Topic source

代码: from functools import reduce

def str2num(s): return int(s)

def calc(exp): ss = exp.split('+') ns = map(str2num, ss) return reduce(lambda acc, x: acc + x, ns)

def main(): r = calc('100 + 200 + 345') print('100 + 200 + 345 =', r) r = calc('99 + 88 + 7.6') print('99 + 88 + 7.6 =', r)

main()

运行结果:

100 + 200 + 345 = 645

ValueError Traceback (most recent call last)

<ipython-input-75-74ce84318ba9> in <module>() 15 print('99 + 88 + 7.6 =', r) 16 ---> 17 main()

<ipython-input-75-74ce84318ba9> in main() 12 r = calc('100 + 200 + 345') 13 print('100 + 200 + 345 =', r) ---> 14 r = calc('99 + 88 + 7.6') 15 print('99 + 88 + 7.6 =', r) 16

<ipython-input-75-74ce84318ba9> in calc(exp) 7 ss = exp.split('+') 8 ns = map(str2num, ss) ----> 9 return reduce(lambda acc, x: acc + x, ns) 10 11 def main():

<ipython-input-75-74ce84318ba9> in str2num(s) 2 3 def str2num(s): ----> 4 return int(s) 5 6 def calc(exp):

ValueError: invalid literal for int() with base 10: ' 7.6'、

##针对上述错误改正后 from functools import reduce

def str2num(s): v = float(s) return int(v) if v.is_integer() else v

def calc(exp): ss = exp.split('+') ns = map(str2num, ss) return reduce(lambda acc, x: acc + x, ns)

def main(): r = calc('100 + 200 + 345') print('100 + 200 + 345 =', r) r = calc('99 + 88 + 7.6') print('99 + 88 + 7.6 =', r)

main() 运行结果: 100 + 200 + 345 = 645 99 + 88 + 7.6 = 194.6

稀野-joker

#2 Created at ... [Delete] [Delete and Lock User]

change the int to float

稀野-joker

#3 Created at ... [Delete] [Delete and Lock User]

def str2num(s): try: return int(s) except ValueError as e: return float(s)

这样更节省内存吧


  • 1

Reply