Discuss / Python / 最后一个题有点难

最后一个题有点难

Topic source

青年小哲

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

总结:在做最后一个题的时候我一直没有做出来,问题出在我在进行map(char2num, Iterable)的时候没有一直到该怎么处理,我只知道map函数在函数的后面是需要输入一个可迭代对象的,根据本节课讲的东西,是需要在这里放入一个字符串的,不能是一个list,虽然他也可以迭代。

但我一直在想怎么处理才能让map(char2num, Iterable)这一部分的函数输出一个 [123,456] 这样的 list,这样我可以在reduce函数里进行 x*1000 + y/1000。这样正浩输出结果。但是这样处理我被困在了该如何处理哪个传入的字符串了,什么时候分割它,什么时候转换它?都成了问题,导致看了一个小时都没有做出来。

总结就是:

  • map(function, Iterable) 函数类型要牢记
  • return 的时候也可以做计算

def str2float(s):
    def char2num(s):
        digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
        return digits[s]
    L = s.split(sep='.')
    int_num = reduce(lambda x, y: x * 10 + y, map(char2num, L[0]))
    flo_num = reduce(lambda x, y: x * 10 + y, map(char2num, L[1]))
    return int_num + flo_num / 1000

墨云翟丘

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

你直接把小数部分除以固定的1000了,当要转换的不是三位小数的时候会出错的,这样你的程序没有复用性的,最好用index函数获取小数点的位置,动态的截取小数部位。

return int_num + flo_num / (10 ** (len(str(L[1]))))

改成这个可以获取小数点位数

额多了个str(),可以去掉


  • 1

Reply