1.回数是指从左向右读和从右向左读都是一样的数,例如12321,909
请利用filter()筛选出回数
方法一:
def huishu(num):#定义一个函数,判断是否为回文数
if str(num) == str(num)[::-1]:#如果正向的=倒向的,则是回文数。但需要注意对于切片,只能针对字符串型
return True
else:
return False
print(list(filter(huishu, range(1, 10000))))#根据True或者False返回值,使用filter
方法二:
from functools import reduce
def is_palindrome(n): # 定义一个函数,判断是否是回文数
l = list(str(n)) # 将数字转换成字符串型,放在一个列表中
l.reverse() # 对列表中的元素进行反向排序
num = reduce(lambda x, y: int(x) * 10 + int(y), l)#需要累积求和,此为反向的数字
return num == n#正向的数字=反向的数字
output = filter(is_palindrome, range(1, 1000))#调用函数,根据判断输出回文数
print('1~1000:', list(output))
2.利用map()函数,把用户输入的不规范的英文名字,
变为首字母大写,其他小写的规范名字
def normalize(name):
return list(map(lambda x:x.capitalize(),name))#capitalize()将字符串的第一个字母变成大写,其它字母变为小写
L=['adam','LISA','Tom']
print(normalize(L))
3.利用map和reduce编写一个str2float函数,
把字符串’123.456’转换成浮点数123.456
from functools import reduce
def str2float(s):
ch = {str(x): x for x in range(10)} # 对于0~9的数字组成一个字典{'0':0,'1':1,……}
# 把字符串分割
l = s.split('.')#把字符串从小数点处分开
# 整数部分
n1 = reduce(lambda x, y: x * 10 + y, map(lambda x: ch[x], l[0]))
# 小数部分
n2 = reduce(lambda x, y: x * 10 + y, map(lambda x: ch[x], l[1]))
n2 *= 0.1 ** len(l[1]) # a *=1 a = a*1 n2 = n2 * 0.1**4
return n1 + n2
num = str2float('1234.4567')
print(num)