本文共 1890 字,大约阅读时间需要 6 分钟。
俗话说:光说不练假把式……学而不思则罔……近来在跟着廖雪峰前辈的python教程学习,做一些题目练习一下
1.利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]:
#函数代码def standards(s): t='0' t=s.lower() #将s全部小写 t=t.capitalize() #将t首字母大写 print(t)
#测试代码list(map(standards,['adam','LISA','barT']))
备注:这里运用了map函数,map函数的两个输入参数分别是用到的函数和处理的序列,map函数在处理序列方面极为方便。
2.回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数
def equal(a,b): #判断两个字母是否相等 return a==bdef is_palindrome(n): #判断是否是回数 i=0 s=str(n) #把数字转化为字符串 for i in range(len(s)-1): #逐位比较是否相等 if equal(s[i],s[len(s)-i-1]): continue else: return False #一旦出现不相等,返回False return True #如果全部相等,返回True#测试代码output = filter(is_palindrome, range(1, 1000))print('1~1000:', list(output))if list(filter(is_palindrome, range(1, 200))) == [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]: print('测试成功!')else: print('测试失败!')
备注 :
Python内建的filter()函数用于过滤序列,filter()接收一个函数和一个序列。filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素3.练习:假设我们用一组tuple表示学生名字和成绩:L = [(‘Bob’, 75), (‘Adam’, 92), (‘Bart’, 66), (‘Lisa’, 88)]请用sorted()对上述列表分别按名字排序:
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]def by_name(t): t=sorted(t[0], key=str.lower) return tL2 = sorted(L, key=by_name)print(L2)#运行结果[('Adam', 92), ('Bob', 75), ('Bart', 66), ('Lisa', 88)]
再按成绩从高到低排序:
L = [(‘Bob’, 75), (‘Adam’, 92), (‘Bart’, 66), (‘Lisa’, 88)]
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]def by_score(t): t=sorted(range(t[1]),key=abs) #这里不能直接用t[1],t[1]是int型,会报错TypeError: 'int' object is not iterable,需加range()进行迭代 return tL2 = sorted(L, key=by_score)print(L2)#运行结果[('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', 92)]
备注:sorted()函数可以用于排序,可以通过设置key参数实现自定义的排序。用sorted()排序的关键在于实现一个映射函数。
转载地址:http://dhqpi.baihongyu.com/