Discuss / Python / 交作业

交作业

Topic source
  • 三道题目分别用P1,P2,P3表示
  • P3的解题技巧就是将小数点后部分的通过split函数单独取出来,等到处理成数字456之后再根据之前得到的小数点后的list长度来确定要进行多少倍的缩小。0.456,即小数点后的数字长度为3,那么需要缩小的倍数是10^3=1000倍,最后将两部分相加即可!
__author__ = 'Kaiming'

#P1
def normalize(name):
    return str(name).capitalize()

L1 = ['adam', 'LISA', 'barT']
L2 = list(map(normalize, L1))
print(L2)


#P2

from functools import reduce

def multipy(x,y):
    return x*y

def prod(L):
    return reduce(multipy, L)

print('3 * 5 * 7 * 9 =', prod([3, 5, 7, 9]))


#P3

from functools import reduce

#小数点前的使用multipy函数
def multipy(x,y):
    return x*10+y


def char2num(s):
    return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]

def str2float(s):
    s0=s.split('.')
    s1=s0[0]
    s2=s0[1]

    #小数点后的位数
    length=len(s2)


    return reduce(multipy, map(char2num,s1))+ reduce(multipy, map(char2num,s2))/(10**length)

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

lanyezi023

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

def str2float(s): def ff(x,y): return x10+y l=list(s) l.pop(s.index('.')) return reduce(ff,map(int,l))/10*(len(s)-s.index('.')-1)

lanyezi023

#3 Created at ... [Delete] [Delete and Lock User]
def str2float2(s):
        def is_notdot(n):
                return n!='.'
        def fy(x,y):
                return x*10+y
        return reduce(fy,map(int,list(filter(is_notdot,list(s)))))/10**(len(s)-s.index('.')-1)

在此插入代码




  • 1

Reply