Discuss / Python / 结合评论区dl的几种思路-错误处理

结合评论区dl的几种思路-错误处理

Topic source

岁益寒

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

直接float()会有.0

第一种思路

# -*- coding: utf-8 -*-
from functools import reduce
# 原错误来自来自str2num中
def str2num(s):
    return int(s) if float(s)==int(float(s)) else float(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)

第二种思路:

# -*- coding: utf-8 -*-
from functools import reduce

# 原错误来自来自str2num中


def str2num(s):
    return int(s) if s.find('.')==-1 else float(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()

第三种思路:

# -*- coding: utf-8 -*-
from functools import reduce

# 原错误来自来自str2num中


def str2num(s):
    try:
        return int(s)
    except ValueError:
        return float(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()

数学人

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

可以


  • 1

Reply