Python(九)练习

博客围绕函数练习展开,练习1核心是将字符串拆解映射成数字,还思考了一位数字字符串的弊端,指出一个数字字符串应作为reduce最终结果。此外还提及练习2、练习3,分析了练习3分割两个字符串分别处理并计算结果,也有练习4但未详述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习1

"""
# 将一个字符串转换成整型 -->不能用int进行类型转换!

'332' -->332

"""
# 思路:将数字字符串映射成整数-->列表
from functools import reduce

def fun(s):
    # (1)将字符串数字和int数字映射
    mapper = {str(i): i for i in range(10)}

    # (1)获取每一位数
    def Str_to_int(ch):
        # 字典生成式
        return mapper[ch]

    # (2)迭代求和,一步一步逼近
    def fun1(n1, n2):
        return n1 * 10 + n2

    # (3)调用两个功能函数-->完成的!
    return reduce(fun1, map(Str_to_int, s))

# 模拟用户输入
num = fun('123456')
# 输出和判断类型!
print(type(num), num)

# 强调一下,对于reduce,如果列表仅仅有一个元素,则直接返回(不会调用函数)!

# 12783 -->12、[7,8,3] -->127、[83] -->1278、[3]

核心:将字符串各个拆解,映射成数字

思考:是否存在弊端--->如果是一位数字字符串呢?

说明:一个数字字符串时没有执行fun函数,应该是将其作为reduce的最终结果!

练习2

"""

1.利用map()函数,把用户输入的不规范的英文名字,变为首字母大写(Cap*函数),其他小写的规范名字

分析:过滤(*.istitle)

jAne -->Jane

JANE -->Jane

读懂题意!

"""

def fun(name):
   name=name[0].upper()+name[1:].lower()
   return name
list1 = ['adam', 'LISA', 'barT']
list2 = list(map(fun, L1))
print(L2)

练习3

"""

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

思路1:叠加(小数点换成0.)

思路2:除以10

"""

from functools import reduce

# 思路:以'.'作为拆解,分别处理
def func(s):
    # (1)获取映射关系
    str_int = {str(i): i for i in range(10)}

    def get(char):
        # 得到当前位的数字
        return str_int[char]

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

    # 核心:获取.的位置-->整数和小数分别计算!-->不确定是否有小数-->拆解!
    index = s.find('.')
    if index != -1:
        # 说明表示是小数字符串!-->[start,end)
        s1 = s[:index]
        s2 = s[index+1:]
        return reduce(fun, map(get, s1)) + reduce(fun, map(get, s2)) / (10 ** len(s2))
    else:
        # 如果传入的字符串没有".",整数计算!
        return reduce(fun, map(get, s))

#print(func('123.456'))

print(func('123'))

分析:分割然后两个字符串分别处理,计算结果!

练习4:

"""

3.回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回文数

"""
# 样本(数据来源)
list1 = [123, 12321, 456654]

# 定义一个函数-->判断是不是回文数!
def fun(element):
    # (1)获取当前数字的反转数!
    def fun1(element):
        a = 0
        while element > 0:
            b = element % 10
            a = a * 10 + b
            element = element // 10
        return a
    # (2)判断是不是回文数
    return fun1(element) == element

print(list(filter(fun, list1)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值