代码: 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()
运行结果:
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
main() 运行结果: 100 + 200 + 345 = 645 99 + 88 + 7.6 = 194.6
change the int to float
def str2num(s): try: return int(s) except ValueError as e: return float(s)
这样更节省内存吧
Sign in to make a reply
幸福用爱来编织
代码: 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