Discuss / Python / 搞了好久

搞了好久

Topic source

from functools import reduce

# ----------------------------

def normalize(*namelist):

    def norm(name):

        n = list(name)

        for i in range(len(n)):

            if i == 0:

                n[0] = n[0].upper()

            else:

                n[i] = n[i].lower()

        name = ''.join(n)

        return name

    return list(map(norm,namelist))

# ----------------------------

def prod(L):

    def product(a,b):

        return a*b

    return reduce(product,L)

# ----------------------------

def str2float(s):

    r = 1

    s = list(s)

    flag = len(s) # 如果没有小数点,则flag保持和len(s)一致

    l = []

    def trans(a,b):

        return a*10+b

    for i in range(len(s)):

        if s[i] != '.':

            l.append(int(s[i]))

        else:

            flag = i+1

        r = reduce(trans,l)

    r = r/(10**(len(s)-flag))

    return r

第三题没用map,来学习下大家怎么写的

関谷薫

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

第三个不用map的话一行就可以了

return float(s.encode(‘utf-8’))

其实前两道也是

一:return name.capitalize()

二:return reduce(lambda x,y: x*y, L )

Orichatz

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

我用了,但就是照本宣科,写得很复杂

from functools import reduce

digit={'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'0':0}

def str2float(s):

    flag=len(s)

    s2=s

    for i in range(len(s)):

        if s[i]=='.':

            flag=i 

    if flag!=len(s):

        s1=s.split('.')

        s2=s1[0]+s1[1]

    def fn(x,y):

        return x*10+y

    def str2num(s):

        return digit[s]

    return (reduce(fn,map(str2num,s2)))/(10**(len(s2)-flag))

Orichatz

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

我用了,但就是照本宣科,写得很复杂

from functools import reduce

digit={'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'0':0}

def str2float(s):

    flag=len(s)

    s2=s

    for i in range(len(s)):

        if s[i]=='.':

            flag=i 

    if flag!=len(s):

        s1=s.split('.')

        s2=s1[0]+s1[1]

    def fn(x,y):

        return x*10+y

    def str2num(s):

        return digit[s]

    return (reduce(fn,map(str2num,s2)))/(10**(len(s2)-flag))


  • 1

Reply