一、in的使用

in 操作符用于判断关键字是否存在于变量中

  1. a = '男孩wusir'
  2. print('男孩' in a)

执行输出:True

in 是整体匹配,不会拆分匹配。

  1. a = '男孩wusir'
  2. print('男孩sir' in a)

执行输出:False

比如评论的敏感词汇,会用到 in 和 not in

  1. comment = input('请输入你的评论:')
  2. if '苍井空' in comment:
  3. print('您输入的有敏感词汇,请重新输入')

执行输出

请输入你的评论:苍井空

您输入的有敏感词汇,请重新输入

二、while else 的使用

while else 如果循环被 break 打断,程序不会走 else

  1. count = 1
  2. while True:
  3. print(count)
  4. if count == 3:break
  5. count += 1
  6. else:
  7. print('循环正常完毕')

执行输出

1

2

3

  1. count = 1
  2. falg = True
  3. while falg:
  4. print(count)
  5. if count == 3:
  6. falg = False
  7. count += 1
  8. else:
  9. print('循环正常完毕')

执行输出:

1

2

3

循环正常完毕

三、格式化输出

比如用户输入信息后,输出一段话

  1. msg = '我叫唐僧,今年25岁,爱好念经'

第一种替换方式

  1. #% 占位符 s str 字符串 d digit 数字
  2. name = input('请输入你的姓名:')
  3. age = input('请输入你的年龄:')
  4. hobby = input('请输入你的爱好:')
  5. msg = '我叫%s,今年%d岁,爱好%s' % (name,int(age),hobby)
  6. print(msg)

执行输出:

请输入你的姓名:唐僧

请输入你的年龄:25

请输入你的爱好:念经

我叫唐僧,今年 25 岁,爱好念经

第二种替换方式

定义一个字典

  1. dic = {'name':'老男孩','age':51,'hobby':'无所谓'}

完整代码如下:

  1. dic = {'name':'jack','age':51,'hobby':'无所谓'}
  2. msg = '我叫%(name)s,今年%(age)d岁,爱好%(hobby)s' % dic
  3. print(msg)

执行输出:

我叫 jack,今年 51 岁,爱好无所谓

格式化输出,就是做固定模板填充

第三种替换方式

  1. name = input('请输入你的姓名:')
  2. age = input('请输入你的年龄:')
  3. msg = '我叫%s,今年%d岁,学习进度为1%' % (name,int(age))
  4. print(msg)

执行报错

ValueError: invalid literal for int() with base 10: ‘sf’

在格式化输出中单纯的显示% 用%% 解决

  1. name = input('请输入你的姓名:')
  2. age = input('请输入你的年龄:')
  3. msg = '我叫%s,今年%d 岁,学习进度为 1%%' % (name,int(age))
  4. print(msg)

执行输出

请输入你的姓名:zhang

请输入你的年龄:21

我叫 zhang,今年 21 岁,学习进度为 1%

第四种替换方式

  1. name = input('请输入你的姓名:')
  2. age = input('请输入你的年龄:')
  3. msg = '我叫{},今年{}岁,学习进度为1%'.format(name,int(age))
  4. print(msg)

执行输出

请输入你的姓名:xiao

请输入你的年龄:24

我叫 xiao,今年 24 岁,学习进度为 1%

四、逻辑运算符

针对逻辑运算的进一步研究:

1,在没有()的情况下 not 优先级高于 and,and 优先级高于 or,即优先级关系为( )>not>and>or,同一优先级从左往右计算。

and or not

第一种:前后都是比较运算

优先级: () > not > and > or

同一个优先级,从左至右依次计算

false and 任何条件,都是 false

true and false,结果为 false

  1. print(1 > 2 and 3 < 4)

执行输出: False

  1. print(1 > 2 and 3 < 4 and 3 > 2 or 2 < 3)

执行输出: True

在 or 中,只要有真,结果必定为真。

False or True 结果为 True

  1. print(1 and 2)

执行输出:2

  1. print(1 and 2)
  2. print(0 and 2)

执行输出:

2

0

第二种:前后都是数字运算

x or y , x 为真,值就是 x,x 为假,值是 y; x and y, x 为真,值是 y,x 为假,值是 x。

非 0 的数字,都是真

  1. print(1 or 3)
  2. print(2 or 3)
  3. print(0 or 3)
  4. print(-1 or 3)

执行输出:

1

2

3

-1

第三种,混合

  1. print(1 > 2 or 3 and 4)

执行输出:4

  1. print(1 > 2 or 3 and 4)
  2. print(2 or 2 > 3 and 4)

执行输出:

4

2

五、数据类型的转换

int 与布尔值的转换

int —> bool 非 0 即 True,0 为 False

bool —> int True 1 False 0

  1. print(int(True))

执行输出:1

  1. print(int(True))
  2. print(int(False))
  3. print(bool(100))
  4. print(bool(0))

执行输出:

1

0

True

False

六、编码

编码很重要,总会遇到编码的问题

1、、发电报:滴滴滴滴 实际是高低电平。

密码本:

  1. 0000 0001
  2. 0000 0101
  3. 0000 0011
  4. 0000 1100
  5. 0001 1010
  6. 0001 0001

0010010 1000011 1100101 010001

2、计算机在存储,和传输的时候,01010101

初期密码本:

asiic 包含数字,英文,特殊字符。八位

01000001 01000010 01000011 A B C

8 位 = 1 byte 表示一个字符。

ascii 最左 1 位都是 0,为了拓展使用的。

ASCII 码表里的字符总共有 256 个

前 128 个为常用的字符如运算符

后 128 个为 特殊字符是键盘上找不到的字符

万国码 unicode,将所有国家的语言包含在这个密码本。

初期:16 位,两个字节,表示一个字符。

A:00010000 00010010

中:00010010 00010010

升级:32 位,四个字节,表示一个字符。

A:00010000 00010010 00010000 00010010

中:00010010 00010010 00010010 00010010

32 位资源浪费。

升级:utf-8。最少用 8 位(一个字节),表示一个字符。

英文:a :00010000 用 8 位表示一个字符。

欧洲:00010000 00010000 16 位两个字节表示一个字符。

亚洲 中 :00010000 00010000 00010000 24 位,三个字节表示一个字符。

utf-16 不常用,最少用 16 位

gbk:国标。

只包含:英文中文。

英文:a:00010000 8 位,一个字节表示一个字符。

中文:中:00010000 00010000 16 位,两个字节表示一个字符。

gb2312 也是国标的一种

单位换算

8 bit = 1 byte

1024 byte = 1 kb

1024 kb = 1 MB

1024 MB = 1 GB

1024 GB = 1 TB

作业:

1、判断下列逻辑语句的 True,False.

  1. 1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
  2. not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6

2、求出下列逻辑语句的值。

  1. 8 or 3 and 4 or 2 and 0 or 9 and 7
  2. 0 or 2 and 3 and 4 or 6 and 0 or 3

3、下列结果是什么?

  1. 6 or 2 > 1
  2. 3 or 2 > 1
  3. 0 or 5 < 4
  4. 5 < 4 or 3
  5. 2 > 1 or 6
  6. 3 and 2 > 1
  7. 0 and 3 > 1
  8. 2 > 1 and 3
  9. 3 > 1 and 0
  10. 3 > 1 and 2 or 2 < 3 and 3 and 4 or 3 > 2

4. 简述变量命名规范


5. name = input(“>>>”) name 变量是什么数据类型?


6. if 条件语句的基本结构?


7. while 循环语句基本结构?


8. 写代码:计算 1 - 2 + 3 … + 99 中除了 88 以外所有数的总和?


9. ⽤户登陆(三次输错机会)且每次输错误时显示剩余错误次数(提示:使⽤字符串格式化)


10. 简述 ascii、unicode、utf-8 编码关系?


11. 简述位和字节的关系?


12. “⽼男孩”使⽤ UTF-8 编码占⽤⼏个字节?使⽤ GBK 编码占⼏个字节?


13. 制作趣味模板程序需求:等待⽤户输⼊名字、地点、爱好,根据⽤户的名字和爱好进⾏任意现实 如:敬爱可亲的 xxx,最喜欢在 xxx 地⽅⼲ xxx


14. 等待用户输入内容,检测用户输入内容中是否包含敏感字符?如果存在敏感字符提示“存在敏感字符请重新输入”,并允许用户重新输入并打印。敏感字符:”小粉嫩”、”大铁锤”


15. 单⾏注释以及多⾏注释?


16. 简述你所知道的 Python3 和 Python2 的区别?


17. 看代码书写结果:

  1. a = 1>2 or 4<7 and 8 == 8
  2. print(a)

18.continue 和 break 区别?

答案:

1、判断下列逻辑语句的 True,False.

1)1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6

  1. print(1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6)

执行输出:True

过程解析:

1.先判断 and 部分

4 > 5 and 2 > 1 and 9 > 8

进一步分解结果为

False and True and True

最终结果为 False

在继续左右 2 边的判断

1 > 1 or 3 < 4 or True or 7 < 6

进一步结果为

False or True or True or False

最终结果为 True。因为在 or 判断中,只要有 True,结果必定为 True

2)not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6

  1. print(not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6)

执行输出:False

2、求出下列逻辑语句的值。

1),8 or 3 and 4 or 2 and 0 or 9 and 7

  1. print(8 or 3 and 4 or 2 and 0 or 9 and 7)

执行输出:8

2),0 or 2 and 3 and 4 or 6 and 0 or 3

  1. print(0 or 2 and 3 and 4 or 6 and 0 or 3)

执行输出:4

3、下列结果是什么?

  1. 6 or 2 > 1
  2. 3 or 2 > 1
  3. 0 or 5 < 4
  4. 5 < 4 or 3
  5. 2 > 1 or 6
  6. 3 and 2 > 1
  7. 0 and 3 > 1
  8. 2 > 1 and 3
  9. 3 > 1 and 0
  10. 3 > 1 and 2 or 2 < 3 and 3 and 4 or 3 > 2
  1. print(6 or 2 > 1)
  2. print(3 or 2 > 1)
  3. print(0 or 5 < 4)
  4. print(5 < 4 or 3)
  5. print(2 > 1 or 6)
  6. print(3 and 2 > 1)
  7. print(0 and 3 > 1)
  8. print(2 > 1 and 3)
  9. print(3 > 1 and 0)
  10. print(3 > 1 and 2 or 2 < 3 and 3 and 4 or 3 > 2)

执行输出:

6

3

False

3

True

True

0

3

0

2

4. 简述变量命名规范

变量是由数字,字母,下划线,任意组合。

变量不能以数字开头。

不能是 python 中的关键字。

不能太长,不能是中文,要有描述性。

官方推荐: 下划线命名法,单词之间用下划线连接。

5. name = input(“>>>”) name 变量是什么数据类型?

字符串类型

6. if 条件语句的基本结构?

  1. #第一种
  2. if 条件:
  3. 结果
  4. #第二种
  5. if 条件:
  6. 结果
  7. else:
  8. 结果
  9. #第三种
  10. if 条件:
  11. 结果
  12. elif 条件:
  13. 结果
  14. ...
  15. #第四种
  16. if 条件:
  17. 结果
  18. elif 条件:
  19. 结果
  20. ...
  21. else:
  22. 结果
  23. #第五种
  24. if 条件:
  25. if 条件:
  26. 结果
  27. elif 条件:
  28. 结果
  29. elif 条件:
  30. 结果
  31. ...
  32. else:
  33. 结果

7. while 循环语句基本结构?

  1. while 条件:
  2. 结果

8. 写代码:计算 1 - 2 + 3 … + 99 中除了 88 以外所有数的总和?

  1. count = 0
  2. the_sum = 0
  3. while count < 99:
  4. count += 1
  5. if count == 88:
  6. continue
  7. if (count % 2) == 0:
  8. the_sum -= count
  9. else:
  10. the_sum += count
  11. print(the_sum)

执行输出:138

9. ⽤户登陆(三次输错机会)且每次输错误时显示剩余错误次数(提示:使⽤字符串格式化)

  1. username = 'xiao'
  2. password = '123'
  3. max = 3
  4. i = 0
  5. while i < max:
  6. i += 1
  7. name = input('请输入用户名:')
  8. pwd = input('请输入密码:')
  9. if name == username and pwd == password:
  10. print('登陆成功')
  11. break
  12. else:
  13. print('用户名或密码错误,还剩余{}次机会!'.format(max-i))

执行输出:

请输入用户名:fds

请输入密码:fds

用户名或密码错误

剩余2 次机会!

请输入用户名:34

请输入密码:343

用户名或密码错误

剩余1 次机会!

请输入用户名:35

请输入密码:35

用户名或密码错误

剩余0 次机会!

10. 简述 ascii、unicode、utf-8 编码关系?

ascii 是最早美国用的标准信息交换码,把所有的字母大小写,各种符号用 二进制来表示,共有 256 种,同时加入拉丁文等字符,1bytes 代表一个字符。

Unicode 是为了统一世界各国语言的不同,统一用 2 个 bytes 代表一个字符,可以表达 2**16=65556 个,称为万国语言,特点:速度快,但浪费空间,

可以用在内存处理中,兼容了 utf-8,gbk,ASCII。

utf-8 为了改变 Unicode 的这种缺点,规定 1 个英文字符用 1 个字节表示,1 个中文字符用 3 个字节表示,

特点;节省空间,速度慢,用在硬盘数据传输,网络数据传输,相比硬盘和网络速度,体现不出来。

11. 简述位和字节的关系?

位:二进制位(bit)是计算机存储信息的基本单位,代表 1 个二进制数位,其值为 0 或 1。

字节:8 个连续的二进制位为一个字节,可以存放 1 个西文字符的编码。

12. “⽼男孩”使⽤ UTF-8 编码占⽤⼏个字节?使⽤ GBK 编码占⼏个字节?

在 utf-8 中,一个中文字符占用 3 个字节。在 GBK 中,一个中文字符占用 2 个字节

所以答案为 9 和 6

13. 制作趣味模板程序需求:等待⽤户输⼊名字、地点、爱好,根据⽤户的名字和爱好进⾏任意现实 如:敬爱可亲的 xxx,最喜欢在 xxx 地⽅⼲ xxx

  1. name = input('请输入你的姓名:')
  2. addres = input('请输入你的地点:')
  3. hobby = input('请输入你的爱好:')
  4. msg = '''
  5. 敬爱可亲的{}
  6. 最喜欢在{}
  7. 地⽅⼲{}
  8. '''.format(name,addres,hobby)
  9. print(msg)

执行输出:

请输入你的姓名:zhang

请输入你的地点:家里

请输入你的爱好:看片

敬爱可亲的zhang

最喜欢在家里

地⽅⼲看片

14. 等待用户输入内容,检测用户输入内容中是否包含敏感字符?如果存在敏感字符提示“存在敏感字符请重新输入”,并允许用户重新输入并打印。敏感字符:”小粉嫩”、”大铁锤”

第一步,先实现关键字匹配

  1. keyword = ["⼩粉嫩","⼤铁锤"]
  2. comment = input('请输入评论:')
  3. for filter_word in keyword:
  4. if filter_word in comment:
  5. print('error!')
  6. break
  7. else:
  8. print('ok!')

第 2 步,实现无限输入并检查敏感词

  1. keyword = ["⼩粉嫩","⼤铁锤"]
  2. while True:
  3. comment = input('请输入评论:')
  4. for filter_word in keyword:
  5. if filter_word in comment:
  6. print('评论含有敏感词,请重新输入!')
  7. break
  8. else:
  9. print('提交成功!')
  10. break

执行输出:

请输入评论:⼩粉嫩

评论含有敏感词,请重新输入!

请输入评论:dg

提交成功!

15. 单⾏注释以及多⾏注释?

单行注释:使用符号#

多行注释:使用符号””” “”” 和’’’ ‘’’

16. 简述你所知道的 Python3 和 Python2 的区别?

1.源码风格不一样

python2 源码混乱,重复代码较多。

python3 源码规范,优美清新简单。

2.print 方法有区别

python3 的 print 方法,必须要加括号

3.默认编码不一样

python 3x 默认编码:utf-8

python 2x 默认编码:ascii

4.input 不同

python 2x: raw_input()

python 3x: input()

17. 看代码书写结果:

a = 1>2 or 4<7 and 8 == 8

print(a)

先执行 and 部分 4<7 and 8 == 8,4<7 结果为 True。8 == 8 结果为 True。那么 and 部分的结果为 True

那么就剩下 1 > 2 or True,最终结果为 True

18.continue 和 break 区别?

breck:结束循环

continue:结束本次循环,继续下一次循环。

Day3 默写代码:

Bit,Bytes,Kb,Mb,Gb,Tb 之间的转换关系。

8 bit = 1 byte

1024 byte = 1 kb

1024 kb = 1 MB

1024 MB = 1 GB

1024 GB = 1 TB

Unicode,utf-8,gbk,每个编码英文,中文,分别用几个字节表示。

Unicode utf-8 gbk
英文 1 1 1
中文 2 3 2