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


最近在学习廖雪峰老师的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定义一个匿名函数,用来得到一个简单的函数非常方便

你可能感兴趣的:(python,python,廖雪峰,reduce)