【干货大放送!】小白必备Python100道练习题

嗨~我是小鱼
爆肝给大家整理了这份今天给大家分享100道Python练习题。
在此之前,先给大家推荐一个工具,是一个对 Python 运行原理进行可视化分析的工具,Python Tutor,点击 Next 按钮就会根据执行步骤显示原理,对新手理解代码运行原理有很大帮助。举一个简单的例子,sort() 方式和 sorted()的区别。
可以明显看到 sort() 会就地在原序列上排序,sorted() 新建了一个新的序列。
Python基础习题
1、怎么计算2的3次方

解法1:直接用运算符 >>> 2**3 解法2:用函数 pow>>> pow(2,3)

2、怎么找出序列中的最大值和最小值? 用内置函数 max 和 min
>>> l = (123, 888, 666) >>> max(l) 888 >>> min(l) 123

3、怎么将字符列表转为字符串 用 join 方法,合并序列的元素
>>> l = ['Python', 'Circle', 'is', 'ok'] >>> j = ' '.join(l) >>> j 'Python Circle is ok'

4、怎么快速打印出包含所有 ASCII 字母(大写和小写)的字符串 用 string 模块的方法
>>> import string >>> string.ascii_letters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

5、怎么让字符串居中 用字符串中的 center 方法,他会在两边自动填充字符(默认为空格),让字符串居中
>>> k = 小鱼Python >>> k.center(50) '更多精彩,请关注「小鱼Python」' >>> k.center(50, '*')

6、怎么在字符串中找到子串 用 find 方法,如果找到,就返回子串的第一个字符的索引,否则返回 -1
>>> ss = 'I Love Python' >>> ss.find('I') 0 >>> ss.find('Python') 7

7、怎么让字符的首字母大写,其他字母小写
解法1:用 title 方法。>>> ss = 'i love python' >>> ss.title() 'I Love Python' 解法2:用 string 模块里的 capwords 方法。>>> import string >>> ss = 'i love python' >>> string.capwords(ss) 'I Love Python'

9、怎么清空列表内容
解法1:用 clear 方法>>> l = [1, 2, 3] >>> l.clear() >>> l [] 解法2:用切片赋值的方法>>> k = [1, 2, 3] >>> k[:] = [] >>> k []

10、怎么计算指定的元素在列表中出现了多少次? 用 count 方法
>>> l = ['i', 'am', 'ok', 'ok'] >>> l.count('ok') 2

11、怎么在列表末尾加入其它元素 用 extend 方法
>>> l = [1, 2, 3] >>> j = [4, 5, 6] >>> l.extend(j) >>> l [1, 2, 3, 4, 5, 6]

12、extend 和列表相加的区别? 两者看起来效果一致
>>> l = [1, 2, 3] >>> j = [4, 5, 6] >>> l + j [1, 2, 3, 4, 5, 6]

extend 是直接在 l 列表里加入元素,相加会生成一个新元素,并不会对 l 做修改。
13、怎么查找列表中某个元素第一次出现的索引,从 0 开始 用 index 方法
>>> l = ['are', 'you', 'ok'] >>> l.index('you') 1

14、怎么将一个对象插入到列表中
解法1:用 insert 方法>>> num = [1, 2, 4, 5] >>> num.insert(2, 'three') >>> num [1, 2, 'three', 4, 5] 解法2:用切片的方式插入>>> num = [1, 2, 4, 5] >>> num[2:2] = ['three'] >>> num [1, 2, 'three', 4, 5]

15、怎么删除列表中元素 pop 方法可以删除指定元素,不指定位置的话默认删除最后一个元素
>>> num = [1, 2, 4, 5] >>> num.pop() 5 >>> num [1, 2, 4] >>> num.pop(1) 2 >>> num [1, 4]

16、怎么删除列表中指定元素 用 remove 方法
>>> num [1, 4] >>> num = [1, 2, 4, 5, 4] >>> num.remove(4) >>> num [1, 2, 5, 4] remove 方法只会删除第一次出现的元素/

17、怎么让列表按相反顺序排列?
解法1:用 reverse 方法>>> num = [1, 22, 45, 99, 49] >>> num.reverse() >>> num [49, 99, 45, 22, 1] 解法2:用切片的方式>>> num = [1, 22, 45, 99, 49] >>> num[::-1] [49, 99, 45, 22, 1]

18、怎么表示只包含一个元素的元组 1个元素的元组,必须在唯一的元素后加上逗号,否则不是元组
>>> t= (1) >>> type(t) >>> t= (1,) >>> type(t)

19、怎么批量替换字符串中的元素 用 replace 方法
>>> 'i love Python'.replace('o', 'ee') 'i leeve Pytheen'

20、怎么把字符串按照空格进行拆分 用 split 方法,括号为空的情况下默认以空格拆分
>>> 'i love Python'.split() ['i', 'love', 'Python']

Python进阶习题
1、怎么用for循环实现把字符串变成Unicode码位的列表
>>> st = '!@#$%^&*' >>> codes = [] >>> for s in st: codes.append(ord(s)) >>> codes [33, 64, 35, 36, 37, 94, 38, 42]

2、怎么用列表推导式实现把字符串变成Unicode码位的列表
>>> st = '!@#$%^&*' >>> codes = [ord(s) for s in st] >>> codes [33, 64, 35, 36, 37, 94, 38, 42]

很明显,用列表推导式实现比 for 循环加 append 更高效简洁,可读性更好。
3、打印出两个列表的笛卡尔积
解法1:使用生成器表达式产生笛卡尔积,可以帮忙省掉运行 for 循环的开销。>>> colors = ['blacks', 'white'] >>> sizes = ['S', 'M', 'L'] >>> for tshirt in ('%s %s'%(c, s) for c in colors for s in sizes): print(tshirt) blacks S blacks M blacks L white S white M white L 解法2:使用 itertools 里的 product 生成器函数。>>> import itertools >>> list(itertools.product(['blacks', 'white'], ['S', 'M', 'L'])) [('blacks', 'S'), ('blacks', 'M'), ('blacks', 'L'), ('white', 'S'), ('white', 'M'), ('white', 'L')]

4、可迭代对象拆包时,怎么赋值给占位符 我们经常用 for 循环提取元组里的元素,对于我们不想接收的元素,我们可以用占位符 _ 接收。
>>> player_infos = [('Kobe', '24'), ('James', '23'), ('Iverson', '3')] >>> for player_names, _ in player_infos: print(player_names) Kobe James Iverson

5、Python3 中,用什么方式接收不确定值或参数 用 args 的方式,args 位置可以在任意位置。
>>> a, b, *c = range(8) >>> a, b, c (0, 1, [2, 3, 4, 5, 6, 7]) >>> a, *b, c, d = range(5) >>> a,b,c,d (0, [1, 2], 3, 4) >>> *a, b, c, d = range(5) >>> a,b,c,d ([0, 1], 2, 3, 4)

6、用切片将对象倒序
>>> s = 'basketball' >>> s[::-1] 'llabteksab'

7、怎么查看列表的 ID
>>> l = [1, 2, 3] >>> id(l) 4507638664

8、可变序列用*=(就地乘法)后,会创建新的序列吗? 不会,可变序列用*=(就地乘法)后,不会创建新的序列,新元素追加到老元素上,以列表为例,我们看下新老列表的id,相等的。
>>> l = [1, 2, 3] >>> id(l) 4507939272 >>> l *= 2 >>> l [1, 2, 3, 1, 2, 3] >>> id(l)

9、不可变序列用*=(就地乘法)后,会创建新的序列吗? 会,不可变序列用*=(就地乘法)后,会创建新的序列,以元组为例,我们看下新老元组的id,是不同的。
>>> t = (1, 2, 3) >>> id(t) 4507902240 >>> t *= 2 >>> t (1, 2, 3, 1, 2, 3) >>> id(t) 4507632648

所以,对不可变序列进行重复拼接操作的话,效率会很低,因为每次都有一个新对象,而解释器需要把原来对象中的元素先复制到新的对象里,然后再追加新的元素。
10、关于+=的一道谜题
t = (1, 2, [30, 40]) t[2] += [50, 60]

到底会发生下面4种情况中的哪一种?a. t变成(1, 2, [30, 40, 50, 60])。b.因为tuple不支持对它的元素赋值,所以会抛出TypeError异常。c.以上两个都不是。d. a和b都是对的。答案是d,请看下运行结果。
>>> t = (1, 2, [30, 40]) >>> t[2] += [50, 60] Traceback (most recent call last): File "", line 1, in t[2] += [50, 60] TypeError: 'tuple' object does not support item assignment >>> t (1, 2, [30, 40, 50, 60])

【【干货大放送!】小白必备Python100道练习题】由于文章篇幅限制,无法将100道题全部呈现在此。
微信文章:
Python爬取《中国医生》评论并实现数据可视化

    推荐阅读