Python练习题8/9/10/11/12

》》点赞,收藏+关注,理财&技术不迷路《《

课后习题八(列表):

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)

<class 'generator'>

复制代码

关于生成器的概念小甲鱼今后会细讲,你可以尝试这么去访问我们刚刚的生成器:  # 注意,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 = '<a href="http://www.fishc.com/dvd" target="_blank">鱼C资源打包</a>',请问如何提取出子字符串:'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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值