博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python3—廖雪峰之练习(三)
阅读量:6333 次
发布时间:2019-06-22

本文共 2388 字,大约阅读时间需要 7 分钟。

列表生成式练习

请修改列表生成式,通过添加if语句保证列表生成式能正确执行:

L1 = ['Hello', 'World', 18, 'Apple', None]L2 = []for x in L1:    if instance(x):        L2.append(x) print(L2)

map/reduce练习

利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。
输入:['adam',‘LISA', 'barT'], 输出:['Adam','Lisa','Bart']:

def normalize(name):    return "%s" % (name[:1].upper() + name[1:])L1 = ['adam', 'LISA', 'barT']L2 = list(map(normalize, L1))print(L2)

Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积:

from functools import reducedef prod(L):    def product(x, y):        return x * y    return reduce(product, L)print(prod(L))

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

str2float函数实现转自

from functools import reduceCHAR_TO_FLOAT = {    '0': 0,    '1': 1,    '2': 2,    '3': 3,    '4': 4,    '5': 5,    '6': 6,    '7': 7,    '8': 8,    '9': 9,    '.': -1}def str2float(s):    nums = map(lambda ch: CHAR_TO_FLOAT[ch], s)    point = 0    def to_float(f, n):        nonlocal point        if n == -1:            point = 1            return f        if point == 0:            return f * 10 + n        else:            point = point * 10            return f + n / point    return reduce(to_float, nums, 0.0)    print("str2float('\123.456\') = ", str2float('123.456'))

filter练习

回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()滤掉非回数:

def is_palidrome(n):    I, m = n, 0    while I:        m = m*10 + I%10        I = I // 10 #返I的整数部分,抛弃余数    return(n == m)output = filter(is_palindrome, range(1, 1000))print(output)

sort()函数练习

假设我们用一组tuple表示学生名字和成绩:
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
请用sorted()对上述列表分别按名字排序:

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]  def by_name(t):    return t[0] #返回名字L2 = sorted(L, key=by_name)print(L2)

再按成绩从高到低排序:

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] def by_name(t):    return t[1] #返回成绩L2 = sorted(L, key = by_name, reverse = True)print(L2)

请编写一个decorator, 能在函数调用的前后打印出'begin call'和'end call'的日志:

转自

import functools    def log(func):      @functools.wraps(func) # wrap '__name__'      def wrapper(*args, **kw):          print("begin call [%s]" % (func.__name__))          func_tmp = func(*args, **kw)          print("end call [%s]" % (func.__name__))          return func_tmp      return wrapper   @log # 借助Python的@语法,把decorator置于函数的定义处  def hello():      print("hello")    hello()

转载于:https://www.cnblogs.com/isChenJY/p/7725193.html

你可能感兴趣的文章
计算rem单位
查看>>
为什么说你不要独自编程
查看>>
fedora 13 mp3,wma×××安装
查看>>
修改及查看mysql数据库的字符集
查看>>
响应式网页设计
查看>>
Lucene 4.X 倒排索引原理与实现: (3) Term Dictionary和Index文件 (FST详细解析)
查看>>
第七章 大网高级 ASA
查看>>
rsync+inotify触发式远程同步
查看>>
优秀设计师应当知道的几大UI设计原则(一)
查看>>
mongodb高级查询
查看>>
struts2.1 struts.devMode BUG解决方案
查看>>
NOVNC 连接问题,Failed to connect to server (code: 1006)
查看>>
InnoDB事务锁之行锁-insert加锁-隐式锁
查看>>
zabbix监控硬盘
查看>>
日本法院裁定三星诉苹果专利侵权案败诉
查看>>
Windows Server 2012R2 桌面体验问题直通车
查看>>
桌面支持--复印证件技巧
查看>>
Silverlight实用窍门系列:50.InkPresenter涂鸦板的基本使用,以及将效果保存为Png图片【附带源码实例】...
查看>>
MySQL数据库经典书籍share
查看>>
给出三个数,要求输出 最大的一个
查看>>