》》点赞,收藏+关注,理财&技术不迷路《《
课后习题八(列表):
0.列表都可以存放一些什么东西?
我们说 Python 的列表是一个打了激素的数组,如果把数组比喻成集装箱,那么 Python 的列表就是一个大仓库,Ta 可以存放我们已经学习过的任何数据类型。>>> mix = [1, ‘小甲鱼’, 3.14, [1, 2, 3]]
1. 向列表增加元素有哪些方法?
这节课我们教过大家三种方法想列表增加元素,分别是:append()、extend() 和 insert()。
2.append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有什么区别? append() 方法是将参数作为一个元素增加到列表的末尾。extend() 方法则是将参数作为一个列表去扩展列表的末尾。 请看以下示例:
>>> name = ['F', 'i', 's', 'h']
>>> name.append('C')
>>> name
['F', 'i', 's', 'h', 'C']
>>> name.extend(['.', 'c'])
>>> name
['F', 'i', 's', 'h', 'C', '.', 'c']
>>> name.append(['o', 'm'])
>>> name
['F', 'i', 's', 'h', 'C', '.', 'c', ['o', 'm']]
复制代码
member.append(['竹林小溪', 'Crazy迷恋']) 和 member.extend(['竹林小溪', 'Crazy迷恋']) 实现的效果一样吗? 不一样,因为怕大家没有仔细看上一题的示例,所以不懂的请看上一题解释。
有列表 name = ['F', 'i', 'h', 'C'],如果小甲鱼想要在元素 'i' 和 'h' 之间插入元素 's',应该使用什么方法来插入? name.insert(2, 's')
动动手答案:
0. 自己动手试试看,并分析在这种情况下,向列表添加数据应当采用哪种方法比较好?
假设给定以下列表:member = ['小甲鱼', '黑夜', '迷途', '怡静', '秋舞斜阳']要求将列表修改为:member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]方法一:使用 insert() 和 append() 方法修改列表。方法二:重新创建一个同名字的列表覆盖。解答:方法一:
member.insert(1, 88)
member.insert(3, 90)
member.insert(5, 85)
member.insert(7, 90)
member.append(88)
复制代码
方法二:
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
复制代码
对于这种情况,明显是第二种方法看起来要好一些嘛。不过对于大型的列表,第一种方法可能更合适,所以我们说永远没有最好的,只有最合适的。
1. 利用 for 循环打印上边 member 列表中的每个内容
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
for each in member:
print(each)
复制代码
2. 上一题打印的样式不是很好,能不能修改一下代码打印成下图的样式呢?【请至少使用两种方法实现】
方法一:
count = 0
length = len(member)
while count < length:
print(member[count], member[count+1])
count += 2
方法二:
for each in range(len(member)):
if each%2 == 0:
print(member[each], member[each+1])
复制代码
0. 注意,这道题跟上节课的那道题有点儿不同,回答完请上机实验或参考答案。
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)
复制代码
如果不上机操作,你觉得会打印什么内容?
课后习题九():
0. 注意,这道题跟上节课的那道题有点儿不同,回答完请上机实验或参考答案。
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)
会打印:[1, 2, 3, 4, 5] 如有不理解的朋友请看上一讲课后作业的详细答案。 1. 请问如何将下边这个列表的'小甲鱼'修改为'小鱿鱼'?
list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
list1[1][2][0] = '小鱿鱼'
复制代码
2. 要对一个列表进行顺序排序,请问使用什么方法?
>>> 列表名.sort()
3. 要对一个列表进行逆序排序,请问使用什么方法?
>>> 列表名.sort()
>>> 列表名.reverse()
复制代码
或者
>>> 列表名.sort(reverse=True)
复制代码
4. 列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() 和 clear() copy() 方法跟使用切片拷贝是一样的:
>>> list2 = list1.copy()
>>> list2
[1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
复制代码
clear() 方法用于清空列表的元素,但要注意,清空完后列表仍然还在哦,只是变成一个空列表。
>>> list2.clear()
>>> list2
[]
复制代码
5. 问题:请先在 IDLE 中获得下边列表的结果,并按照上方例子把列表推导式还原出来。
>>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]
复制代码
list1 = []
for x in ragne(10):
for y in range(10):
if x%2 == 0:
if y%2 != 0:
list1.append((x, y))
复制代码
6. 活学活用:请使用列表推导式补充被小甲鱼不小心涂掉的部分
>>> list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
课后习题十(字符串的各种内置方法):
0. 注意,这道题跟上节课的那道题有点儿不同,回答完请上机实验或参考答案。
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)
复制代码
会打印:[1, 2, 3, 4, 5] 如有不理解的朋友请看上一讲课后作业的详细答案。 1. 请问如何将下边这个列表的'小甲鱼'修改为'小鱿鱼'?
list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
list1[1][2][0] = '小鱿鱼'
复制代码
2. 要对一个列表进行顺序排序,请问使用什么方法?
>>> 列表名.sort()
复制代码
3. 要对一个列表进行逆序排序,请问使用什么方法?
>>> 列表名.sort()
>>> 列表名.reverse()
复制代码
或者
>>> 列表名.sort(reverse=True)
复制代码
4. 列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() 和 clear() copy() 方法跟使用切片拷贝是一样的:
>>> list2 = list1.copy()
>>> list2
[1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
复制代码
clear() 方法用于清空列表的元素,但要注意,清空完后列表仍然还在哦,只是变成一个空列表。
>>> list2.clear()
>>> list2
[]
复制代码
5. 问题:请先在 IDLE 中获得下边列表的结果,并按照上方例子把列表推导式还原出来。
>>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]
复制代码
list1 = []
for x in ragne(10):
for y in range(10):
if x%2 == 0:
if y%2 != 0:
list1.append((x, y))
6. 活学活用:请使用列表推导式补充被小甲鱼不小心涂掉的部分
>>> list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
课后习题十一(元组):
请用一句话描述什么是列表?再用一句话描述什么是元组?列表:一个大仓库,你可以随时往里边添加和删除任何东西。元组:封闭的列表,一旦定义,就不可改变(不能添加、删除或修改)。
1.什么情况下你需要使用元组而不是列表?
当我们希望内容不被轻易改写的时候,我们使用元组(把权力关进牢笼)。当我们需要频繁修改数据,我们使用列表。
当元组和列表掉下水,你会救谁? 如果是我,我会救列表,因为列表提供了比元组更丰富的内置方法,这相当大的提高了编程的灵活性。回头来看下元组,元组固然安全,但元组一定创建就无法修改(除非通过新建一个元组来间接修改,但这就带来了消耗),而我们人是经常摇摆不定的,所以元组只有在特殊的情况才用到,平时还是列表用的多。综上所述,小甲鱼会救列表(列表是美眉)。
3. 请将左边列表的内置方法与右边的注释连线,并圈出元组可以使用的方法。看吧,元组果然比较悲剧吧,仅有两个方法元组可以使用,其他方法都不行,不信你试试?
4. 请将左边列表的内置方法与右边的注释连线,并圈出元组可以使用的方法。在拼接只有一个元素的元组的时候,例如我们课上举的例题:
>>> temp = (‘小甲鱼’, ‘黑夜’, ‘迷途’, ‘小布丁’)
# 如果我想在“黑夜”和“迷途”之间插入“怡静”,我们应该:
>>> temp = temp[:2] + (‘怡静’,) + temp[2:]
复制代码
5. x, y, z = 1, 2, 3 请问x, y, z是元组吗?所有的多对象的、逗号分隔的、没有明确用符号定义的这些集合默认的类型都是元组,自己在IDLE中键入以下代码,并体会一下:
>>> x, y, z = 1, 2, 3
>>> type(x)
>>> h = x, y, z
>>> type(h)
复制代码
6. 请写出以下情景中应该使用列表还是元组来保存数据:
1) 游戏中角色的属性:列表 2) 你的身份证信息:元组 3) 论坛的会员:列表 4) 团队合作开发程序,传递给一个你并不了解具体实现的函数的参数:元组 5) 航天火箭各个组件的具体配置参数:元组 6) NASA系统中记录已经发现的行星数据:列表
7. 上节课我们通过课后作业的形式学习到了“列表推导式”,那请问如果我把中括号改为小括号,会不会得到“元组推导式”呢?自己动手试试看再看答案哦^_^ Python3 木有“元组推导式”,为嘛?没必要丫,有了“列表推导式”已经足够了。 那为什么“>>> tuple1 = (x**2 for x in range(10))”不会报错? 因为你误打误撞得到了一个生成器:
>>> type(tuple1)
复制代码
关于生成器的概念小甲鱼今后会细讲,你可以尝试这么去访问我们刚刚的生成器: # 注意,Python3 开始 next() 方法改为 __next__() 哦~
>>> tuple1.__next__()
0
>>> tuple1.__next__()
1
>>> tuple1.__next__()
4
>>> tuple1.__next__()
9
>>> tuple1.__next__()
16
>>> tuple1.__next__()
25
>>> tuple1.__next__()
36
课后习题十二(字符串):
0. 还记得如何定义一个跨越多行的字符串吗(请至少写出两种实现的方法)? 方法一: >>> str1 = '''待我长发及腰,将军归来可好?此身君子意逍遥,怎料山河萧萧。天光乍破遇,暮雪白头老。寒剑默听奔雷,长枪独守空壕。醉卧沙场君莫笑,一夜吹彻画角。江南晚来客,红绳结发梢。''' 方法二: >>> str2 = '待卿长发及腰,我必凯旋回朝。\昔日纵马任逍遥,俱是少年英豪。\东都霞色好,西湖烟波渺。\执枪血战八方,誓守山河多娇。\应有得胜归来日,与卿共度良宵。\盼携手终老,愿与子同袍。' 方法三: >>> str3 = ('待卿长发及腰,我必凯旋回朝。''昔日纵马任逍遥,俱是少年英豪。''东都霞色好,西湖烟波渺。''执枪血战八方,誓守山河多娇。''应有得胜归来日,与卿共度良宵。''盼携手终老,愿与子同袍。') 1. 三引号字符串通常我们用于做什么使用? 三引号字符串不赋值的情况下,通常当作跨行注释使用,例如:
'''这是一个三引号字符串用于注释的例子,
例子虽然只是简简单单的一句话,
却毫无遮掩地体现了作者用情至深,
所谓爱至深处情至简!'''
print("I love FishC.com!")
复制代码
2. file1 = open('C:\windows\temp\readme.txt', 'r') 表示以只读方式打开“C:\windows\temp\readme.txt”这个文本文件,但事实上这个语句会报错,知道为什么吗?你会如何修改? 会报错是因为在字符串中,我们约定“\t”和“\r”分别表示“横向制表符(TAB)”和“回车符”(详见:http://bbs.fishc.com/thread-39140-1-1.html),因此并不会按照我们计划的路径去打开文件。 Python 为我们铺好了解决的道路,只需要使用原始字符串操作符(R或r)即可:
>>> file1 = open(r'C:\windows\temp\readme.txt', 'r')
3. 有字符串:str1 = '鱼C资源打包',请问如何提取出子字符串:'www.fishc.com'
>>> str1[16:29]
4. 如果使用负数作为索引值进行分片操作,按照第三题的要求你能够正确目测出结果吗?
>>> str1[-45:-32]
5. 还是第三题那个字符串,请问下边语句会显示什么内容?
>>> str1[20:-36]
'fishc',加入了负数索引,问题变得有些复杂,不过自己多尝试几次就可以熟练掌握了。 6. 据说只有智商高于150的鱼油才能解开这个字符串(还原为有意义的字符串):str1 = 'i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99'
>>> str1[::3]
动动手答案:
0. 请写一个密码安全性检查的脚本代码:check.py
# 密码安全性检查代码
#
# 低级密码要求:
# 1. 密码由单纯的数字或字母组成
# 2. 密码长度小于等于8位
#
# 中级密码要求:
# 1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
# 2. 密码长度不能低于8位
#
# 高级密码要求:
# 1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
# 2. 密码只能由字母开头
# 3. 密码长度不能低于16位
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
passwd = input('请输入需要检查的密码组合:')
# 判断长度
length = len(passwd)
while (passwd.isspace() or length == 0) :
passwd = input("您输入的密码为空(或空格),请重新输入:")
if length <= 8:
flag_len = 1
elif 8 < length < 16:
flag_len = 2
else:
flag_len = 3
flag_con = 0
# 判断是否包含特殊字符
for each in passwd:
if each in symbols:
flag_con += 1
break
# 判断是否包含字母
for each in passwd:
if each in chars:
flag_con += 1
break
# 判断是否包含数字
for each in passwd:
if each in nums:
flag_con += 1
break
# 打印结果
while 1 :
print("您的密码安全级别评定为:", end='')
if flag_len == 1 or flag_con == 1 :
print("低")
elif flag_len == 2 or flag_con == 2 :
print("中")
else :
print("高")
print("请继续保持")
break
print("请按以下方式提升您的密码安全级别:\n\
\t1. 密码必须由数字、字母及特殊字符三种组合\n\
\t2. 密码只能由字母开头\n\
\t3. 密码长度不能低于16位'")
break
0. 根据说明填写相应的字符串格式化符号
符 号 说 明
% 格式化字符及其ASCII码
% 格式化字符串
% 格式化整数
% 格式化无符号八进制数
% 格式化无符号十六进制数
% 格式化无符号十六进制数(大写)
% 格式化定点数,可指定小数点后的精度
% 用科学计数法格式化定点数
% 根据值的大小决定使用%f或者%e
% 根据值的大小决定使用%F或者%E
1. 请问以下这行代码会打印什么内容?
>>> "{ {1}}".format("不打印", "打印")
2. 以下代码中,a, b, c是什么参数?
>>> "{a} love {b}.{c}".format(a="I", b="FishC", c="com")
'I love FishC.com'
3. 以下代码中,{0}, {1}, {2}是什么参数?
>>> "{0} love {1}.{2}".format("I", "FishC", "com")
'I love FishC.com'
4. 如果想要显示Pi = 3.14,format前边的字符串应该怎么填写呢?
''.format('Pi = ', 3.1415)