python reduce()/map() 将字符串转成浮点数

论坛 期权论坛 脚本     
匿名技术用户   2020-12-22 20:02   225   0

最近在学习廖雪峰老师的python教程所以最在这里插入代码片近更新的将主要是课后习题,今天学习的是高阶函数reduce/map

课后练习题如下:

利用map和reduce编写一个str2float函数,把字符串’123.456’转换成浮点数123.456:

解题如下:

#!/usr/bin/env python3
from functools import reduce

#将字符串转化为浮点数 
def str2float(s):  
 dicts = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}  
 mod = len(s) - s.index('.') -1  
 #**表示次方  
 return reduce(lambda x,y:x*10+y, map(lambda m:dicts[m],s.replace('.','')))*0.1**mod  

#测试函数
print('str2float(\'123.456\') =', str2float('123.456')) 
if abs(str2float('123.456') - 123.456) < 0.00001:
 print('测试成功!') 
else:
 print('测试失败!')

解题说明

相信大家学习了reduce之后一定都知道如何将整数样子的字符串转化为整数
我们可以认为12.3就是123.0然后小数点向左移动移动一位;
我们要实现这个就是把整数10
所以分为以下几步

  1. 用map()将字符串序列转化为整数序列(要去除.)
  2. 得到小数位数n
  3. 按照将字符串转为整数的方法,对上述序列进行处理,得到类似于123456的整数
  4. 对得到的整数乘以0.1的n次方===等价于除以10的n次方

另外说明:
本函数中用到的几点:
1.**表示次方
2.lambda定义一个匿名函数,用来得到一个简单的函数非常方便

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP