Discuss / Python / 交作业

交作业

Topic source

水蔓姐姐

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

学习内建函数好重要啊

from functools import reduce

def str2float(s):
    L = list(map(int, s.split('.')))   #str.split()分割为两部分
    return reduce(lambda x, y: x+y*0.1**len(str(y)), L)   #lambda创建临时的匿名函数

print('str2float(\'123.456\') =', str2float('123.456'))

水蔓姐姐

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

第三题

水蔓姐姐

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

其实可以把L换进去写成只有return一行,不过可读性就会变得巨差

看了一圈,你的写的还是最好的,学习了。

顾正遥

#5 Created at ... [Delete] [Delete and Lock User]
lambda x, y: x+y*0.1**len(str(y))
#这个args里面的**len(str(y))没有看懂,能给我讲讲吗?

顾正遥

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

恩,看了一会儿自己看懂了。。。

lambda x, y: x+y*0.1**len(str(y))

这句 **len(str(y))

什么意思啊,把这个去掉改成lambda x, y: x+y*0.001也可以得到结果。这样改可以吗。求解释。

天风剑圣

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

0.1**len(str(y))的意思很简单,就是小数点后有几位,就乘以0.1的几次方,你乘以0.001不就只能用于小数点后三位的情况吗?

洛洛锋la

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

帅气! 同时羡慕不已,竟然能写出这么简洁优美的代码

没有用split的代码。。

from functools import reduce

def str2float(s):
    #将'123.456'变为['1', '2', '3', '.', '4', '5', '6']
    def stri(str):
        L=[]
        for a in str:
            L.append(a)
        return L
    #将'123.456'变为['1', '2', '3']
    def stri1(str1):
        L1=[]
        for b in stri(str1):
            if b=='.':
                break
            L1.append(b)
        return L1
    #将'123.456'变为['4', '5', '6']
    def stri2(str2):
        n=-1
        L2=[]
        while True:
            if stri(str2)[n]=='.':
                break
            L2.insert(n,(stri(str2)[n]))
            n=n-1
        return L2
    #将'123.456'变为'123'
    def stri3(str3):
        S=''
        for d in stri1(str3):
            S=S+d
        return S
    #将'123.456'变为'456'
    def stri4(str4):
        S1=''
        for e in stri2(str4):
            S1=S1+e
        return S1
    #将'123.456'变为['123','456']
    def stri5(str5):
        L3=[]
        L3.append(stri3(str5))
        L3.append(stri4(str5))
        return L3
    #map(int,stri5(s))将['123','456']变为123与456的Iterator     
    return reduce(lambda x, y: x+y*0.1**len(str(y)),map(int,stri5(s)))

  • 1

Reply