Python递归函数和高级函数(map、reduce、filter)及字符串转int、float

本文介绍了如何使用递归函数求1~100的和及偶数和,并通过map、reduce展示高级函数在计算平方、斐波那契数列和数字转换中的应用。同时讲解了如何将字符串转换为整型和浮点型数字,涉及多种方法和精确计算技巧。
摘要由CSDN通过智能技术生成

一、递归函数

1.1~100的和

def get_data(n):
    if n==1:
        return 1
    else:
        return n+get_data(n-1) #100、99、98....1

print(get_data(100))
结果:5050

2.1~100偶数的和

def get_data(n):
    if n%2==1:   #可以把99处理成偶数,奇数的话就减1
        n = n-1
    if n==0:
        return 0
    else:
        return n+get_data(n-2)

print(get_data(99))
结果:2450
print(sum(range(2,99,2)))
结果:2450

二、高级函数(map、reduce、filter)

1.求列表里面每个值的平方map

def get_data(x):
    return x**2
lists = [2,3,4]
print(list(map(get_data,lists)))
#结果:[4, 9, 16]

2.reduce(累加的方法)可以联想到斐波那契数列

lists = [2,3,4]
print(lists)
def data_add(x,y):
    return x+y
from functools import reduce
last = reduce(data_add,lists)
print(last)
结果:9
x   y     x     y
2   3     5     4      9
1.reduce1~100的和

lists = [x for x in range(101)]
print(lists)
def data_add(x,y):
    return x+y
from functools import reduce
last = reduce(data_add,lists)
print(last)
结果:5050

3.把字符串数字转成整型数字,实现int功能,可以用map()函数和reduce()函数

strs = '18514203544'
print(int(strs),type(int(strs)))

方法一

#方法一
from functools import reduce
def get_num(n):
    dicts = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    return dicts[n]

def get_result(x,y):
    return x*10+y

def int1(strs):
    data = list(map(get_num,strs))
    result = reduce(get_result,data)
    return result

print(int1('23456789'))
结果:23456789

方法二

#方法二
from functools import reduce
def get_num(n):
    dicts = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    return dicts[n]

def get_result(x,y):
    return x*10+y

def int1(strs):
    data = list(map(get_num, strs))
    result = reduce(get_result, data)
    return result

print(int1('185142035434'))

结果:185142035434

4.把字符串数字转成浮点型数字,实现int功能,可以用map()函数和reduce()函数

方法一

分析
# 1 8 5 1 4 2 0...
#
# 1*10+8 =18
# 18*10+5 = 185
# 185*10+1 1851

#方法一
from functools import reduce
def get_num(n):
    dicts = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    return dicts[n]

def get_result(x,y):
    return x*10+y

def float1(strs):
    data = list(map(get_num,strs))
    result = reduce(get_result,data)
    return result

from decimal import Decimal    #Decimal可以精确计算

strs = '1234.890'
data = strs.replace('.','')
dian_index = strs.find('.')
chazhi = 10**(len(data)-dian_index)
print(Decimal(float1(data))/chazhi)
结果:1234.89

方法二

#方法二
from functools import reduce

def get_num(n):
    dicts = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    return dicts[n]

def get_result(x,y):
    return x*10+y

def int1(strs):
    data = list(map(get_num,strs))
    result = reduce(get_result,data)
    return result

from decimal import Decimal  ##使结果更加精准

strs = '1234.890'
data = strs.replace('.','')
dian_index = strs.find('.')
chazhi = 10**(len(data)-dian_index)
print(Decimal(int1(data))/chazhi)

结果:1234.89

方法三

方法三
根据小数点把浮点数分成两半分别计算
from functools import reduce
from decimal import Decimal      #使结果更加精准

def get_num(n):
    dicts = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    return dicts[n]

def get_result(x,y):
    return x*10+y

def float1(strs):
    data = list(map(get_num, strs))
    result = reduce(get_result, data)
    return result


dicts = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
strs = '183243242.3545645654654'
i = strs.split('.')[0]       #根据小数点把浮点数分成两半分别计算
f = strs.split('.')[1]
print(i,f)
def get_data(x,y):
    return x*0.1+y
last = reduce(get_data,map(get_num,f[::-1]))
print(float1(i)+Decimal(last)/10)

结果:
183243242 3545645654654
183243242.3545645654653999834

分析
# 4564565465453
# 5.4
# 5.3
# 4.53
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ゆきな

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值