Discuss / Python / 交作业(纯新手,笨办法)

交作业(纯新手,笨办法)

Topic source

Myron_W

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

from functools import reduce

def str2float(s):

#想法是先将“123.456”变成“123456”,然后去除以“10的三次方”(也就是10的小数点后面的位数次方)
z=s.replace('.','')
#去掉给定字符串里面的“.”
def char2num(a):
    return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[a]
def f(x,y):
    return x*10 +y
i=len(s)
j=s.find('.')
k=10**(i-j-1)
#总字符串长度减掉小数点前面字符串长度再减1,就等于小数点后字符串长度
m=reduce(f, map(char2num,z)) /k
return m

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

Lucibriel

#2 Created at ... [Delete] [Delete and Lock User]
def str2float(s):
    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 str2int(s):
        return reduce(lambda x, y: x * 10 + y, map(char2num, s))

    num1 = str2int(s.split('.')[0])
    num2 = str2int(s.split('.')[-1])*10**(-len(s.split('.')[-1]))
    return num1+num2

和你的想法一致,细节有点不同


  • 1

Reply