第十课 列表

题目

测试题:

  1. 列表都可以存放一些什么东西?

  2. 向列表增加元素有哪些方法?

  3. append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有什么区别?

  4. member.append([‘竹林小溪’, ‘Crazy迷恋’]) 和 member.extend([‘竹林小溪’, ‘Crazy迷恋’]) 实现的效果一样吗?

  5. 有列表 name = [‘F’, ‘i’, ‘h’, ‘C’],如果小甲鱼想要在元素 ‘i’ 和 ‘h’ 之间插入元素 ‘s’,应该使用什么方法来插入?

动动手:

  1. 自己动手试试看,并分析在这种情况下,向列表添加数据应当采用哪种方法比较好?

假设给定以下列表:

member = [‘小甲鱼’, ‘黑夜’, ‘迷途’, ‘怡静’, ‘秋舞斜阳’]

要求将列表修改为:

member = [‘小甲鱼’, 88, ‘黑夜’, 90, ‘迷途’, 85, ‘怡静’, 90, ‘秋舞斜阳’, 88]

方法一:使用 insert() 和 append() 方法修改列表。

方法二:重新创建一个同名字的列表覆盖。

  1. 利用 for 循环打印上边 member 列表中的每个内容,如图:

  2. 上一题打印的样式不是很好,能不能修改一下代码打印成下图的样式呢?【请至少使用两种方法实现】

  3. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

答案

测试题答案:

0. 列表都可以存放一些什么东西?

我们说 Python 的列表是一个打了激素的数组,如果把数组比喻成集装箱,那么 Python 的列表就是一个大仓库,Ta 可以存放我们已经学习过的任何数据类型。

.>>> mix = [1, ‘小甲鱼’, 3.14, [1, 2, 3]]

1. 向列表增加元素有哪些方法?

这节课我们教过大家三种方法想列表增加元素,分别是:append()、extend() 和 insert()。

2. append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有什么区别?

append() 方法是将参数作为一个元素增加到列表的末尾。
extend() 方法则是将参数作为一个列表去扩展列表的末尾。

请看以下示例:
1.>>> name = [‘F’, ‘i’, ‘s’, ‘h’]
2.>>> name.append(‘C’)
3.>>> name
4.[‘F’, ‘i’, ‘s’, ‘h’, ‘C’]
5.>>> name.extend([’.’, ‘c’])
6.>>> name
7.[‘F’, ‘i’, ‘s’, ‘h’, ‘C’, ‘.’, ‘c’]
8.>>> name.append([‘o’, ‘m’])
9.>>> name
10.[‘F’, ‘i’, ‘s’, ‘h’, ‘C’, ‘.’, ‘c’, [‘o’, ‘m’]]
复制代码

3. member.append([‘竹林小溪’, ‘Crazy迷恋’]) 和 member.extend([‘竹林小溪’, ‘Crazy迷恋’]) 实现的效果一样吗?

不一样,因为怕大家没有仔细看上一题的示例,所以不懂的请看上一题解释。

4. 有列表 name = [‘F’, ‘i’, ‘h’, ‘C’],如果小甲鱼想要在元素 ‘i’ 和 ‘h’ 之间插入元素 ‘s’,应该使用什么方法来插入?

name.insert(2, ‘s’)

动动手答案:

  1. 自己动手试试看,并分析在这种情况下,向列表添加数据应当采用哪种方法比较好?

假设给定以下列表:

member = [‘小甲鱼’, ‘黑夜’, ‘迷途’, ‘怡静’, ‘秋舞斜阳’]

要求将列表修改为:

member = [‘小甲鱼’, 88, ‘黑夜’, 90, ‘迷途’, 85, ‘怡静’, 90, ‘秋舞斜阳’, 88]

方法一:使用 insert() 和 append() 方法修改列表。

方法二:重新创建一个同名字的列表覆盖。

解答:

方法一:
1.member.insert(1, 88)
2.member.insert(3, 90)
3.member.insert(5, 85)
4.member.insert(7, 90)
5.member.append(88)
复制代码
方法二:
1.member = [‘小甲鱼’, 88, ‘黑夜’, 90, ‘迷途’, 85, ‘怡静’, 90, ‘秋舞斜阳’, 88]
复制代码
对于这种情况,明显是第二种方法看起来要好一些嘛。

不过对于大型的列表,第一种方法可能更合适,所以我们说永远没有最好的,只有最合适的。

  1. 利用 for 循环打印上边 member 列表中的每个内容
    1.member = [‘小甲鱼’, 88, ‘黑夜’, 90, ‘迷途’, 85, ‘怡静’, 90, ‘秋舞斜阳’, 88]
    2.for each in member:

  2. print(each)
    复制代码

  3. 上一题打印的样式不是很好,能不能修改一下代码打印成下图的样式呢?【请至少使用两种方法实现】
    1.方法一:
    2.count = 0
    3.length = len(member)
    4.while count < length:

  4. print(member[count], member[count+1])

  5. count += 2

8.方法二:
9.
10.for each in range(len(member)):
11. if each%2 == 0:
12. print(member[each], member[each+1])
复制代码
0. 注意,这道题跟上节课的那道题有点儿不同,回答完请上机实验或参考答案。
1.>>> old = [1, 2, 3, 4, 5]
2.>>> new = old
3.>>> old = [6]
4.>>> print(new)
复制代码
如果不上机操作,你觉得会打印什么内容?
第十一课
0. 下边的列表分片操作会打印什么内容?

list1 = [1, 3, 2, 9, 7, 8]
list1[2:5]
[2,9,7]

1.请问 list1[0] 和 list1[0:1] 一样吗?
不一样,list1[0]返回第0个元素的值,list1[0:1]返回一个只含有第0个元素的列表

2.如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做?
list1.insert(0,list1.pop())

  1. 有些鱼油比较调皮,他说我想试试 list1[-3:-1] 会不会报错,怎么知道一试居然显示 [9, 7],这是怎么回事呢?
    答:Python 的列表很聪明,竟然支持负数索引,如图:

    正常索引从左到右索引,负数索引是从右到左

4.在进行分片的时候,我们知道分片的开始和结束位置需要进行指定,但其实还有另外一个隐藏的设置:步长。
list1[0:6:2]
[1,2,7]
1)简洁分片操作:
list1[::2]
[1,2,7]
2)步长不能为0,会报错

5.列表的复制
list1=[1,3,2,4]
list2=list1[:]
list3=list1
print(list1,list2,list3)
list1.sort()
print(list1,list2,list3)

list1=[1,2,3,4]
list2=[1,3,2,4]
list3=[1,2,3,4]

不知道大家还记不记得我们在讲解变量的时候说过,Python的变量就像一个标签,就一个名字而已,贴哪是哪,指哪打哪,呃,我还是给大家伙画个图好。

第十二课

  1. 请问如何将下边这个列表的’小甲鱼’修改为’小鱿鱼’?
    1.list1 = [1, [1, 2, [‘小甲鱼’]], 3, 5, 8, 13, 18]
    复制代码

  2. 要对一个列表进行顺序排序,请问使用什么方法?

  3. 要对一个列表进行逆序排序,请问使用什么方法?

  4. 列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() 和 clear()

  5. 你有听说过列表推导式或列表解析吗?

没听过?!没关系,我们现场来学习一下吧,看表达式:
1.>>> [ ii for i in range(10) ]
复制代码
你觉得会打印什么内容?
1.>>> [i
i for i in range(10)]
2.[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
复制代码
居然分别打印了0到9各个数的平方,然后还放在列表里边了有木有?!

列表推导式(List comprehensions)也叫列表解析,灵感取自函数式编程语言 Haskell。Ta 是一个非常有用和灵活的工具,可以用来动态的创建列表,语法如:

[有关A的表达式 for A in B]

例如
1.>>> list1 = [x2 for x in range(10)]
2.>>> list1
3.[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
复制代码
相当于
1.list1 = []
2.for x in range(10):
3. list1.append(x
2)
复制代码

问题:请先在 IDLE 中获得下边列表的结果,并按照上方例子把列表推导式还原出来。
1.>>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]
复制代码

  1. 活学活用:请使用列表推导式补充被小甲鱼不小心涂掉的部分

  2. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

测试题答案:

  1. 注意,这道题跟上节课的那道题有点儿不同,回答完请上机实验或参考答案。
    1.>>> old = [1, 2, 3, 4, 5]
    2.>>> new = old
    3.>>> old = [6]
    4.>>> print(new)
    复制代码

会打印:[1, 2, 3, 4, 5]

如有不理解的朋友请看上一讲课后作业的详细答案。

  1. 请问如何将下边这个列表的’小甲鱼’修改为’小鱿鱼’?
    1.list1 = [1, [1, 2, [‘小甲鱼’]], 3, 5, 8, 13, 18]
    2.list1[1][2][0] = ‘小鱿鱼’
    复制代码

  2. 要对一个列表进行顺序排序,请问使用什么方法?
    1.>>> 列表名.sort()
    复制代码

  3. 要对一个列表进行逆序排序,请问使用什么方法?
    1.>>> 列表名.sort()
    2.>>> 列表名.reverse()
    复制代码
    或者
    1.>>> 列表名.sort(reverse=True)
    复制代码

  4. 列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() 和 clear()

copy() 方法跟使用切片拷贝是一样的:
1.>>> list2 = list1.copy()
2.>>> list2
3.[1, [1, 2, [‘小甲鱼’]], 3, 5, 8, 13, 18]
复制代码

clear() 方法用于清空列表的元素,但要注意,清空完后列表仍然还在哦,只是变成一个空列表。
1.>>> list2.clear()
2.>>> list2
3.[]
复制代码

  1. 问题:请先在 IDLE 中获得下边列表的结果,并按照上方例子把列表推导式还原出来。
    1.>>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]
    复制代码
    1.list1 = []
    2.for x in ragne(10):
  2. for y in range(10):
  3.    if x%2 == 0:
    
  4.        if y%2 != 0:
    
  5.            list1.append((x, y))
    

复制代码

  1. 活学活用:请使用列表推导式补充被小甲鱼不小心涂掉的部分

1.>>> list3 = [name + ‘:’ + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
复制代码

第十三课 元组

测试题:

  1. 请用一句话描述什么是列表?再用一句话描述什么是元组?

  2. 什么情况下你需要使用元组而不是列表?

  3. 当元组和列表掉下水,你会救谁?

  4. 请将下图左边列表的内置方法与右边的注释连线,并圈出元组可以使用的方法。

  5. 创建一个元组,什么情况下逗号和小括号必须同时存在,缺一不可?

  6. x, y, z = 1, 2, 3 请问x, y, z是元组吗?

  7. 请写出以下情景中应该使用列表还是元组来保存数据:

  1. 游戏中角色的属性:

  2. 你的身份证信息:

  3. 论坛的会员:

  4. 团队合作开发程序,传递给一个你并不了解具体实现的函数的参数:

  5. 航天火箭各个组件的具体配置参数:

  6. NASA系统中记录已经发现的行星数据:

  1. 上节课我们通过课后作业的形式学习到了“列表推导式”,那请问如果我把中括号改为小括号,会不会得到“元组推导式”呢?

  2. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

答案

测试题答案:

  1. 请用一句话描述什么是列表?再用一句话描述什么是元组?

列表:一个大仓库,你可以随时往里边添加和删除任何东西。

元组:封闭的列表,一旦定义,就不可改变(不能添加、删除或修改)。

  1. 什么情况下你需要使用元组而不是列表?

当我们希望内容不被轻易改写的时候,我们使用元组(把权力关进牢笼)。

当我们需要频繁修改数据,我们使用列表。

  1. 当元组和列表掉下水,你会救谁?

如果是我,我会救列表,因为列表提供了比元组更丰富的内置方法,这相当大的提高了编程的灵活性。

回头来看下元组,元组固然安全,但元组一定创建就无法修改(除非通过新建一个元组来间接修改,但这就带来了消耗),而我们人是经常摇摆不定的,所以元组只有在特殊的情况才用到,平时还是列表用的多。

综上所述,小甲鱼会救列表(列表是美眉)。

  1. 请将左边列表的内置方法与右边的注释连线,并圈出元组可以使用的方法。

看吧,元组果然比较悲剧吧,仅有两个方法元组可以使用,其他方法都不行,不信你试试?

  1. 创建一个元组,什么情况下逗号和小括号必须同时存在,缺一不可?

在拼接只有一个元素的元组的时候,例如我们课上举的例题:
1.>>> temp = (‘小甲鱼’, ‘黑夜’, ‘迷途’, ‘小布丁’)
2.# 如果我想在“黑夜”和“迷途”之间插入“怡静”,我们应该:
3.>>> temp = temp[:2] + (‘怡静’,) + temp[2:]
复制代码

  1. x, y, z = 1, 2, 3 请问x, y, z是元组吗?

所有的多对象的、逗号分隔的、没有明确用符号定义的这些集合默认的类型都是元组,自己在IDLE中键入以下代码,并体会一下:
1.>>> x, y, z = 1, 2, 3
2.
3.>>> type(x)
4.
5.>>> h = x, y, z
6.
7.>>> type(h)
复制代码

x,y,z = 1,2,3
type(x)
<class ‘int’>

h = x,y,z
type(h)
<class ‘tuple’>

  1. 请写出以下情景中应该使用列表还是元组来保存数据:
  1. 游戏中角色的属性:列表

  2. 你的身份证信息:元组

  3. 论坛的会员:列表

  4. 团队合作开发程序,传递给一个你并不了解具体实现的函数的参数:元组

  5. 航天火箭各个组件的具体配置参数:元组

  6. NASA系统中记录已经发现的行星数据:列表

  1. 上节课我们通过课后作业的形式学习到了“列表推导式”,那请问如果我把中括号改为小括号,会不会得到“元组推导式”呢?自己动手试试看再看答案哦_

Python3 木有“元组推导式”,为嘛?没必要丫,有了“列表推导式”已经足够了。

那为什么“>>> tuple1 = (x**2 for x in range(10))”不会报错?

因为你误打误撞得到了一个生成器:
1.>>> type(tuple1)
2.<class ‘generator’>
复制代码
关于生成器的概念小甲鱼今后会细讲,你可以尝试这么去访问我们刚刚的生成器:

#注意,Python3 开始 next() 方法改为 next() 哦~
1.>>> tuple1.next()
2.0
3.>>> tuple1.next()
4.1
5.>>> tuple1.next()
6.4
7.>>> tuple1.next()
8.9
9.>>> tuple1.next()
10.16
11.>>> tuple1.next()
12.25
13.>>> tuple1.next()
14.36
复制代码

第十四课 字符串

测试题:

  1. 还记得如何定义一个跨越多行的字符串吗(请至少写出两种实现的方法)?

  2. 三引号字符串通常我们用于做什么使用?

  3. file1 = open(‘C:\windows\temp\readme.txt’, ‘r’) 表示以只读方式打开“C:\windows\temp\readme.txt”这个文本文件,但事实上这个语句会报错,知道为什么吗?你会如何修改?

  4. 有字符串:str1 = ‘鱼C资源打包’,请问如何提取出子字符串:‘www.fishc.com’

  5. 如果使用负数作为索引值进行分片操作,按照第三题的要求你能够正确目测出结果吗?

  6. 还是第三题那个字符串,请问下边语句会显示什么内容?
    1.>>> str1[20:-36]
    复制代码

  7. 据说只有智商高于150的鱼油才能解开这个字符串(还原为有意义的字符串):str1 = ‘i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99’

动动手:

  1. 请写一个密码安全性检查的脚本代码:check.py

#密码安全性检查代码

#低级密码要求:
#1. 密码由单纯的数字或字母组成
#2. 密码长度小于等于8位

#中级密码要求:
#1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
#2. 密码长度不能低于8位

#高级密码要求:
#1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
#2. 密码只能由字母开头
#3. 密码长度不能低于16位

程序演示:

  1. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

回复您的答案即可查看参考答案!

测试题答案:

  1. 还记得如何定义一个跨越多行的字符串吗(请至少写出两种实现的方法)?

方法一:

str1 = ‘’‘待我长发及腰,将军归来可好?
此身君子意逍遥,怎料山河萧萧。
天光乍破遇,暮雪白头老。
寒剑默听奔雷,长枪独守空壕。
醉卧沙场君莫笑,一夜吹彻画角。
江南晚来客,红绳结发梢。’’’

方法二:

str2 = ‘待卿长发及腰,我必凯旋回朝。
昔日纵马任逍遥,俱是少年英豪。
东都霞色好,西湖烟波渺。
执枪血战八方,誓守山河多娇。
应有得胜归来日,与卿共度良宵。
盼携手终老,愿与子同袍。’

方法三:

str3 = (‘待卿长发及腰,我必凯旋回朝。’
‘昔日纵马任逍遥,俱是少年英豪。’
‘东都霞色好,西湖烟波渺。’
‘执枪血战八方,誓守山河多娇。’
‘应有得胜归来日,与卿共度良宵。’
‘盼携手终老,愿与子同袍。’)

  1. 三引号字符串通常我们用于做什么使用?

三引号字符串不赋值的情况下,通常当作跨行注释使用,例如:
1.’’‘这是一个三引号字符串用于注释的例子,
2.例子虽然只是简简单单的一句话,
3.却毫无遮掩地体现了作者用情至深,
4.所谓爱至深处情至简!’’’
5.
6.print(“I love FishC.com!”)
复制代码

  1. 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)即可:
1.>>> file1 = open(r’C:\windows\temp\readme.txt’, ‘r’)
复制代码

  1. 有字符串:str1 = ‘鱼C资源打包’,请问如何提取出子字符串:‘www.fishc.com’
    1.>>> str1[16:29]
    复制代码

  2. 如果使用负数作为索引值进行分片操作,按照第三题的要求你能够正确目测出结果吗?
    1.>>> str1[-45:-32]
    复制代码

  3. 还是第三题那个字符串,请问下边语句会显示什么内容?
    1.>>> str1[20:-36]
    复制代码
    ‘fishc’,加入了负数索引,问题变得有些复杂,不过自己多尝试几次就可以熟练掌握了。

  4. 据说只有智商高于150的鱼油才能解开这个字符串(还原为有意义的字符串):str1 = ‘i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99’
    1.>>> str1[::3]
    复制代码

动动手答案:

0. 请写一个密码安全性检查的脚本代码:check.py

#密码安全性检查代码

#低级密码要求:
#1. 密码由单纯的数字或字母组成
#2. 密码长度小于等于8位

#中级密码要求:
#1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
#2. 密码长度不能低于8位

#高级密码要求:
#1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
#2. 密码只能由字母开头
#3. 密码长度不能低于16位

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.26# 密码安全性检查代码
#
# 低级密码要求:
#   1. 密码由单纯的数字或字母组成
#   2. 密码长度小于等于8位
#
# 中级密码要求:
#   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
#   2. 密码长度不能低于8位
#
# 高级密码要求:
#   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
#   2. 密码只能由字母开头
#   3. 密码长度不能低于16位import redef specialCharacterSecurityCheck(ca):specialCharacter = r"~!@#$%^&*()_=-/,.?<>;:[]{}|\\"if specialCharacter.find(ca) >= 0:return Truereturn False#input: a string
#output: the first indicates the string length fits the need or not
#        the second indicates the string is secure or not
def lowLevelSecurityCheck(str):category = set()    #创建一个空集合isLengthGood = FalseisSecure = Falseif len(str) <= 8:isLengthGood = Trueelse:isLengthGood = Falseif str.isalnum():isSecure = Trueelse:isSecure = Falsereturn isLengthGood, isSecure#input: a string
#output: the first indicates the string length fits the need or not
#        the second indicates the string is secure or not
def medialLevelSecurityCheck(str):category = set()    #创建一个空集合isLengthGood = FalseisSecure = Falseif 8 < len(str) <= 16:isLengthGood = Trueelse:isMedianLevel = Falsefor i in range(len(str)):if re.match(r"[0-9]", str[i]):category.add("number")#print("%c:数字" % str[i])elif re.match(r"[a-zA-Z]", str[i]):category.add("letter")#print("%c:字母" % str[i])elif specialCharacterSecurityCheck(str[i]):category.add(r"character")#print("%c:字符" % str[i])else:#print("出现了不合要求的字符")return False#print(category)if len(category) == 2:isSecure = True else:isSecure = Falsereturn isLengthGood, isSecure#input: a string
#output: the first indicates the string length fits the need or not
#        the second indicates the string is secure or not
def highLevelSecurityCheck(str):category = set()    #创建一个空集合isLengthGood = FalseisSecure = Falseif len(str) > 16:isLengthGood = Trueelse:isLengthGood = Falsefor i in range(len(str)):if re.match(r"[0-9]", str[i]):category.add("number")#print("%c:数字" % str[i])elif re.match(r"[a-zA-Z]", str[i]):category.add("letter")#print("%c:字母" % str[i])elif specialCharacterSecurityCheck(str[i]):category.add(r"character")#print("%c:字符" % str[i])else:#print("出现了不合要求的字符")return False#print(category)if len(category) == 3:isSecure = True else:isSecure = Falsereturn isLengthGood, isSecuredef main():#str = "abcdwhd1233"str = "abcd*&^"print(str, len(str))print("LOW:    isLengthGood:%d, isSecure:%d" %(lowLevelSecurityCheck(str)[0], lowLevelSecurityCheck(str)[1]))print("MEDIAN: isLengthGood:%d, isSecure:%d" %(medialLevelSecurityCheck(str)[0], medialLevelSecurityCheck(str)[1]))print("HIGH:   isLengthGood:%d, isSecure:%d" %(highLevelSecurityCheck(str)[0], highLevelSecurityCheck(str)[1]))def testSpecialCharacterSecurityCheck():specialCharacter = "~!@#$%^&*()_=-/,.?<>;:[]{}|\\"for i in range(len(specialCharacter)):print("%c, %d" %(specialCharacter[i], specialCharacterSecurityCheck(specialCharacter[i])))#print(specialCharacterSecurityCheck(""))if __name__ == "__main__":#testSpecialCharacterSecurityCheck()main()

*************** 小甲鱼程序 ***************

0. 请写一个密码安全性检查的脚本代码:check.py
1.# 密码安全性检查代码
2.#
3.# 低级密码要求:
4.#   1. 密码由单纯的数字或字母组成
5.#   2. 密码长度小于等于8位
6.#
7.# 中级密码要求:
8.#   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
9.#   2. 密码长度不能低于8位
10.#
11.# 高级密码要求:
12.#   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
13.#   2. 密码只能由字母开头
14.#   3. 密码长度不能低于16位
15.
16.symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
17.chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
18.nums = '0123456789'
19.
20.passwd = input('请输入需要检查的密码组合:')
21.
22.# 判断长度
23.length = len(passwd)
24.
25.while (passwd.isspace() or length == 0) :
26.    passwd = input("您输入的密码为空(或空格),请重新输入:")
27.
28.if length <= 8:
29.    flag_len = 1
30.elif 8 < length < 16:
31.    flag_len = 2
32.else:
33.    flag_len = 3
34.
35.flag_con = 0
36.
37.# 判断是否包含特殊字符
38.for each in passwd:
39.    if each in symbols:
40.        flag_con += 1
41.        break
42.
43.# 判断是否包含字母
44.for each in passwd:
45.    if each in chars:
46.        flag_con += 1
47.        break
48.
49.# 判断是否包含数字
50.for each in passwd:
51.    if each in nums:
52.        flag_con += 1
53.        break
54.
55.# 打印结果
56.while 1 :
57.    print("您的密码安全级别评定为:", end='')
58.    if flag_len == 1 or flag_con == 1 :
59.        print("低")
60.    elif flag_len == 2 or flag_con == 2 :
61.        print("中")
62.    else :
63.        print("高")
64.        print("请继续保持")
65.        break
66.
67.    print("请按以下方式提升您的密码安全级别:\n\
68.    \t1. 密码必须由数字、字母及特殊字符三种组合\n\
69.    \t2. 密码只能由字母开头\n\
70.    \t3. 密码长度不能低于16位'")
71.    break
复制代码

** ************安安笔记 *****************

str_1 = “123”
str_2 = “Abc”
str_3 = “123Abc”
isalnum判断是否数字和字母的组合

print(str_1.isalnum())
结果:Ture
print(str_2.isalnum())
结果:Ture
print(str_1.isalnum())
结果:Ture

注意:如果字符串中含有除了字母或者数字之外的字符,比如空格,也会返回False

判断字串中是否包含数字

string1=“123ddddr.\.$$$”
pattern = re.compile(’[0-9]+’)
match = pattern.findall(string1)
print match #结果为[‘123’]

第十五课 字符串:格式化

题目

  1. 根据说明填写相应的字符串格式化符号

    符 号 说 明
    % 格式化字符及其ASCII码
    % 格式化字符串
    % 格式化整数
    % 格式化无符号八进制数
    % 格式化无符号十六进制数
    % 格式化无符号十六进制数(大写)
    % 格式化定点数,可指定小数点后的精度
    % 用科学计数法格式化定点数
    % 根据值的大小决定使用%f或者%e
    % 根据值的大小决定使用%F或者%E

  2. 请问以下这行代码会打印什么内容?
    .>>> “{{1}}”.format(“不打印”, “打印”)

  3. 以下代码中,a, b, c是什么参数?
    1.>>> “{a} love {b}.{c}”.format(a=“I”, b=“FishC”, c=“com”)
    2.‘I love FishC.com’
    复制代码

  4. 以下代码中,{0}, {1}, {2}是什么参数?
    1.>>> “{0} love {1}.{2}”.format(“I”, “FishC”, “com”)
    2.‘I love FishC.com’
    复制代码

  5. 如果想要显示Pi = 3.14,format前边的字符串应该怎么填写呢?
    1.’’.format('Pi = ', 3.1415)
    复制代码

动动手:

  1. 编写一个进制转换程序,程序演示如下(提示,十进制转换二进制可以用bin()这个BIF):

  1. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

答案

  1. 根据说明填写相应的字符串格式化符号

    符 号 说 明
    %c 格式化字符及其ASCII码
    %s 格式化字符串
    %d 格式化整数
    %o 格式化无符号八进制数
    %x 格式化无符号十六进制数
    %X 格式化无符号十六进制数(大写)
    %f 格式化定点数,可指定小数点后的精度
    %e 用科学计数法格式化定点数
    %E 作用同%e,用科学计数法格式化定点数
    %g 根据值的大小决定使用%f或者%e
    %G 作用同%g,根据值的大小决定使用%F或者%E

  2. 请问以下这行代码会打印什么内容?
    1.>>> “{{1}}”.format(“不打印”, “打印”)
    2.’{1}’
    位置参数“不打印”没有被输出,这是因为{1}的特殊功能被外层的大括号({})剥夺,因此没有字段可以输出

  3. 以下代码中,a, b, c是什么参数?
    1.>>> “{a} love {b}.{c}”.format(a=“I”, b=“FishC”, c=“com”)
    2.‘I love FishC.com’
    关键字参数

  4. 以下代码中,{0}, {1}, {2}是什么参数?
    1.>>> “{0} love {1}.{2}”.format(“I”, “FishC”, “com”)
    2.‘I love FishC.com’
    位置参数

  5. 如果想要显示Pi = 3.14,format前边的字符串应该怎么填写呢?
    1.>>> ‘{0}{1:.2f}’.format('Pi = ', 3.1415)
    2.‘Pi = 3.14’
    在替换域中,冒号表示格式化符号的开始
    “.2”四舍五入到保留两位小数点
    f的意思是浮点数

动动手答案:

0. 编写一个进制转换程序,程序演示如下(提示,十进制转换二进制可以用bin()这个BIF):

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.11.6#题目:编写一个进制转换程序,程序演示如下(提示,十进制转换二进制可以用bin()这个BIF)# 二进制是Binary,简写为B。
# 八进制是Octal,简写为O。
# 十进制为Decimal,简写为D。
# 十六进制为Hexadecimal,简写为H。#bin() 返回一个整数 int 或者长整数 long int 的二进制表示。import redef cut_text(text,lenth): textArr = re.findall('.{'+str(lenth)+'}', text) textArr.append(text[(len(textArr)*lenth):]) return textArr
# 001101100
# ['001', '101', '100', '']  最后还有一个零结束标志def num_to_char(str):dict1 = {"10":"a","11":"b","12":"c","13":"d","14":"e","15":"f"}for (num, char) in dict1.items():if str==num:return charelse:return str#二进制转十进制
def b_to_d(num2):   num2 = str(num2)tmp = num2[::-1]num10 = 0for i in range(len(tmp)):  #逆序遍历列表num10 += (2**i*int(tmp[i]))return str(num10)#十进制转二进制
def d_to_b(num):return bin(num)[2:]   #print(bin(108))   #0b1101100#十进制转十六进制
def d_to_h(num):num2 = str(d_to_b(num))num16 = ""while len(num2) % 4 != 0:num2 = "0" + num2tmp_list = cut_text(num2, 4)tmp_list1 = []for i in range(len(tmp_list)-1):#tmp_list1[i] = b_to_d(tmp_list[i])    list assignment index out of rangetmp_list1.append(num_to_char(b_to_d(tmp_list[i])))for i in range(len(tmp_list1)):num16 += tmp_list1[i]  return str(num16)#十进制转八进制
def d_to_o(num):num2 = str(d_to_b(num))num8 = ""while len(num2) % 3 != 0:num2 = "0" + num2tmp_list = cut_text(num2, 3)tmp_list1 = []for i in range(len(tmp_list)-1):#tmp_list1[i] = b_to_d(tmp_list[i])    list assignment index out of rangetmp_list1.append(b_to_d(tmp_list[i]))for i in range(len(tmp_list1)):num8 += tmp_list1[i]  return str(num8)if __name__ == "__main__":while True:num = input("请输入一个整数(输入Q结束程序):")if num=="Q":breakprint("十进制 -> 十六进制:", num, "->" , "0x"+d_to_h(int(num)))print("十进制 -> 八进制:", num, "->" , "0o"+d_to_o(int(num)))print("十进制 -> 二进制:", num, "->" , "0b"+d_to_b(int(num)))

*************** 小甲鱼程序 ***************

1.q = True
2.while q:
2.    num = input('请输入一个整数(输入Q结束程序):')
3.    if num != 'Q':
4.        num = int(num)
5.        print('十进制 -> 十六进制 : %d -> 0x%x' % (num, num))
6.        print('十进制 -> 八进制 : %d -> 0o%o' % (num, num))
7.        print('十进制 -> 二进制 : %d -> ' % num, bin(num))
8.    else:
9.        q = False

** ************安安笔记 *****************

  1. bin()函数的使用
    #print(bin(108)) #0b1101100

  2. 在python中从后往前遍历。
    根据 range 函数的用法:
    range(start, end[, step])
    python中从后往前遍历列表的方法为:

lists = [0, 1, 2, 3, 4, 5]
# 输出 5, 4, 3, 2, 1, 0
for i in range(5, -1, -1):print(lists[i])# 输出5, 4, 3
for i in range(5, 2, -1):print(lists[i])
  1. python列表和字符串的三种逆序遍历方式
    列表的逆序遍历
a = [1,3,6,8,9]
print("通过下标逆序遍历1:")
for i in a[::-1]:print(i, end=" ")
print("\n通过下标逆序遍历2:")
for i in range(len(a)-1,-1,-1):print(a[i], end=" ")
print("\n通过reversed逆序遍历:")
for i in reversed(a):print(i, end=" ")

#自己测试
list1 = [2, 5, 7, 2, 4]for i in range(len(list1)-1, -1, -1):print(i, list1[i])# 4 4
# 3 2
# 2 7
# 1 5
# 0 2
  1. 关于列表的一些小测试
#自己测试
list1 = []for i in range(5):list1[i] = i
print(list1)
#IndexError: list assignment index out of range
#不能这样写,这样写有问题list1 = []for i in range(5):list1.append(i)
print(list1)
#[0, 1, 2, 3, 4]
  1. python按照固定长度分割字符串三个字符一组

def cut_text(text,lenth): textArr = re.findall('.{'+str(lenth)+'}', text) textArr.append(text[(len(textArr)*lenth):]) return textArr print(cut_text('123456789abcdefg',3)) ['123', '456', '789', 'abc', 'def', 'g']>>> import re
>>> string = '123456789abcdefg'
>>> re.findall(r'.{3}', string)
['123', '456', '789', 'abc', 'def']

第十六课 序列

0. 我们根据列表、元祖和字符串的共同特点,把它们三统称为什么

序列,因为他们有以下共同点:

1)都可以通过索引得到每一个元素
2)默认索引值总是从0开始(当然灵活的Python还支持负数索引)
3)可以通过分片的方法得到一个范围内的元素的集合
4)有很多共同的操作符(重复操作符、拼接操作符、成员关系操作符)

1. 请问分别使用什么BIF,可以把一个可迭代对象转换为列表、元祖和字符串?

list([iterable]) 把可迭代对象转换为列表
tuple([iterable]) 把可迭代对象转换为元祖
str(obj) 把对象转换为字符串

例如:

1.>>> temp = 'I love FishC.com!'
2.>>> list(temp)
3.['I', ' ', 'l', 'o', 'v', 'e', ' ', 'F', 'i', 's', 'h', 'C', '.', 'c', 'o', 'm', '!']

2. 你还能复述出“迭代”的概念吗?

所谓迭代,是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。

3. 你认为调用 max(‘I love FishC.com’) 会返回什么值?为什么?

会返回:‘v’,因为字符串在计算机中是以ASCII码的形式存储(ASCII对照表:http://bbs.fishc.com/thread-41199-1-1.html),参数中ASCII码值最大的是’v’对应的118。

4. 哎呀呀,现在的小屁孩太调皮了,邻居家的孩子淘气,把小甲鱼刚写好的代码画了个图案,麻烦各位鱼油恢复下啊,另外这家伙画的是神马吗?怎么那么眼熟啊!??

1.name = input('请输入待查找的用户名:')
2.score = [['迷途', 85], ['黑夜', 80], ['小布丁', 65], ['福禄娃娃', 95], ['怡静', 90]]
3.IsFind = False
4.
5.for each in score:
6.    if name in each:
7.        print(name + '的得分是:', each[1])
8.        IsFind = True
9.        break
10.
11.if IsFind == False:
12.    print('查找的数据不存在!')

一些重要的BIF:
1)list():把一个可迭代的对象转换为列表
2)tuple([iterable]):把一个可迭代的对象转化为元组
3)str(obj):把obj对象转化为字符串
4)max(),min():返回序列或者参数集合中的最大或最小值
5)sum(iterable[,start=0]):返回序列iterable和可选参数start的总和
6)sorted():返回排序的列表,默认从小到大
以下返回迭代器对象:
7)reversed():翻转
8)enumerate():枚举,生成由每个元素索引值和元素组成的元组
9)zip():返回各个参数的序列组成的元组

动动手答案:

0. 猜想一下 min() 这个BIF的实现过程

1.def min(x):
2.    least = x[0]
3.
4.    for each in x:
5.        if each < least:
6.            least = each
7.
8.    return least
9.
10.print(min('123456789'))

注:关于函数的定义和使用在下一讲的课程中讲解,目前只需要理解该BIF实现的原理即可。

  1. 视频中我们说 sum() 这个BIF有个缺陷,就是如果参数里有字符串类型的话就会报错,请写出一个新的实现过程,自动“无视”参数里的字符串并返回正确的计算结果
1.def sum(x):
2.    result = 0
3.
4.    for each in x:
5.        if (type(each) == int) or (type(each) == float):
6.            result += each
7.        else:
8.            continue
9.
10.    return result
11.
12.print(sum([1, 2.1, 2.3, 'a', '1', True]))

python去掉指定字符串:用replace函数

string = "[(0, 14, 0),    (0, 100, 0),    (0, 100, 0),    (2, 0, 0),    (3, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0)]"
print(string)
string.replace(" ", "")
print(string)
print(string.replace(" ", ""))[(0, 14, 0),    (0, 100, 0),    (0, 100, 0),    (2, 0, 0),    (3, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0)][(0, 14, 0),    (0, 100, 0),    (0, 100, 0),    (2, 0, 0),    (3, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0),    (0, 0, 0)][(0,14,0),(0,100,0),(0,100,0),(2,0,0),(3,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0)]说明replace()函数替换之后生成一个新的字符串,原字符串没有改变

print输出字符串

print("(0, 145, 0)")   #(0, 145, 0)
字符串用print输出时,不输出引号

小甲鱼第5章:列表、元组和字符串(半整理)相关推荐

  1. python小甲鱼练习题答案_小甲鱼Python第 013讲元组:戴上了枷锁的列表 | 课后测试题及参考答案...

    测试题: 0. 请用一句话描述什么是列表?再用一句话描述什么是元组? 列表:一个大仓库,可以随时往里面添加和删除任何东西. 元祖:封闭的列表,一旦定义,就不可改变(不能添加.删除或修改) 1. 什么情 ...

  2. 小甲鱼第1-4章(未整理)

    第一课 题目与答案 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简 ...

  3. python 高级变量类型(列表/元组/字典/字符串)

    前言 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) 真 True 非 0 数 -- 非零即真 假 False 0 复数型 ...

  4. mysql cbrt函数_基础方法或属性: 列表,元组,字典,字符串,集合及内置函数等(注:只有英文名)...

    列表 list append clear copy count extend index insert pop remove reverse sort 元组 tuple count index 字典 ...

  5. 学习笔记-小甲鱼Python3学习第十五讲:字符串:格式化

    字符串格式化符号含义 符号 说明 %c 格式化字符及其 ASCII 码 %s 格式化字符串 %d 格式化整数 %o 格式化无符号八进制数 %x 格式化无符号十六进制数 %X 格式化无符号十六进制数(大 ...

  6. Python学习入门基础 -- 第四章 列表、元组、字典、字符串变量使用、变量进阶

    Python基础入门知识点总结传送门 第一章 认识Python.Python常用集成开发环境PyCharm 第二章 注释.变量基本使用.变量的命名 第三章 运算符.判断if语句.while和for循环 ...

  7. 小甲鱼Python3笔记

    000-愉快的开始 入门容易,学习难,代码量少. 跨平台: Windows, Mac OS, Linux, UNIX. 应用领域: 操作系统 WEB 3D动画 企业应用 云计算等等. 001-我和Py ...

  8. 小甲鱼python课后题答案_Python 小甲鱼教程 课后练习44

    按照视频内的内容,已经写出了一个计时器,但是小甲鱼要求的内容是,不能让时间出现负值,所以需要修改计时器 自己写的和小甲鱼写的完全不一样-..小甲鱼那个应该是先计算,再最后赋值并打印 自己这个是先不管他 ...

  9. 小傻蛋的妹妹跟随小甲鱼学习Python的第十二节012

    列表的一些常用操作符: 1. 比较操作符 2. 逻辑操作符 3. 连接操作符 ''+"两边的对象的类型必须一致,不能加一个新的元素 如果想要添加一个元素到列表中,用append()啦,ins ...

最新文章

  1. android cmd adb命令安装和删除apk应用
  2. mysql 数据库dbhelp_C# VS连接数据库DBhelp
  3. 【原创】Windows下使用 Eclipse 管理 RabbitMQ 源码之问题解决
  4. HDU - 1528 Card Game Cheater(二分图最大匹配)
  5. 项目经理(project manager)刘小备的一天
  6. SpringCloud微服务注册调用入门-路由网关
  7. 波士顿动力新视频:上岗工作机器狗,巡查工地一丝不苟
  8. 前端埋点方法解析及优缺点分析
  9. C#将数据库图片显示在pictureBox
  10. C++新手入门学习笔记(跟着敲)
  11. python-包机制
  12. centos7 kvm虚拟机安装黑屏
  13. bootstrap-select 插件使用详解
  14. 蚂蚁金服“定损宝”现身AI顶级会议NeurIPS
  15. C#开发多语言翻译软件
  16. 1.从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该年没有举办世界杯,则输出:没有举办世界杯。2. 读入一支球队的名字,输出该球队夺冠的年份列表。
  17. 在ie6下实现position-fixed的效果
  18. 计算机硬件软件的英语,计算机软件和硬件,PC computer software and hardware,音标,读音,翻译,英文例句,英语词典...
  19. linux编译文件 no such,Linux中编译或安装程序时提示No such file or directory
  20. 低功耗能量回收时钟发生器和触发器的设计

热门文章

  1. 【信息保护论】信息保护面临的风险与对应的安全策略
  2. 鸿门宴 项伯为什么要保护刘邦
  3. leetcode简单之597.好友申请I:总体通过率
  4. NYOJ597 完数?
  5. 代驾APP_第一章_项目环境搭建_第一节
  6. 【复】基于 WebRTC 的音视频在线监考模块的设计与实现(上)
  7. 歌星大奖赛,评分系统
  8. 数据库审计系统基本原理与部署方式
  9. matlab simulink振动,Matlab作业Simulink 振动仿真.doc
  10. Atcoder ABC276 A-E