Discuss / Python / 加油

加油

Topic source

昨天搞了几个小时没弄好,今天又弄了两个小时,所以觉得自己笨的同学别放弃啊。

# -*- coding: utf-8 -*-

from functools import reduce

def str2float(s):
    L = list(map(lambda x: x, s)) #把字符串单独取出来
    S = [x for x in L if x != '.']#把小数点取出来
    S1 = list(map(int, S))        #把字符串转化为int型

    def fn(j,k):
        return j * 10 + k
    num = reduce(fn, S1)          #把去掉小数点的数整合起来

for i, value in enumerate(L):
    if value == '.':              #提取小数点的位置
        break                     # i代表了小数点往左位移了几位数
                                  #比如123.456就代表往左位移3位
return num/(10 ** i)              #将整合起来的数除以10的i次方,就                                  #是小数点位移的数字,重新归位

云逸枫林

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

哥们,这样写可能有问题啊,我试着改了一些:

def str2float(s):
    L = list(map(lambda x:x, s)) #把字符串单独取出来

    symbol = 1
    if L[0] == '-':
        symbol = -1
        del L[0]
    elif L[0] == '+':
        symbol = 1
        del L[0]

    S = [x for x in L if x != '.'] # 把小数点取出来
    S1 = list(map(int, S))        #把字符串转化为int型

    def fn(j,k):
        return j*10+k

    num = reduce(fn, S1)

    for i,value in enumerate(reversed(L)):
        if value == '.':
            break

    return num/(10**i) * symbol

print(str2float('123.456'))
print(str2float('12333.4'))
print(str2float('-123.4506'))

print(str2float('+0.4506'))
print(str2float('-0.456'))

廖金i

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

你这个程序还是有问题啊 你输入123.456小数点前后一致时候可以从字符串转为浮点数 但是如果输入123.45就不能得到正常浮点数了得到的就是12.345 但是我不会改


  • 1

Reply