每日反馈

下午讲的有点小快,有点跟不上
时间允许情况下,希望老师再多丰富一些细节
非常好!
可以,老师讲的很好
老师讲的通俗易懂 上课氛围幽默诙谐 表示很喜欢 希望课间放歌曲的时候放点新的~~~哈哈哈 谢谢老师 辛苦啦

注意: 编程中没有绝对的对与错,只要好和更好.

day01知识回顾

Day02 基础语法 分支语句 - 图1

00-数据类型转换的补充[理解]

  • 所有数据类型转换的规则不需要记忆,如果出现了bug知道怎么改就可以了 ```python

    为什么我的代码输入数据后会转换失败???

    stu_num = input(‘请输入你的学号:’)

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

数据类型转换失败,输入的数据,不能转换为int类型

print(‘您的学号是: %d’ % int(stu_num))

探索: 数据类型转换中的规则

int1 = 10 float1 = 11.2 str1 = ‘10’ str2 = ‘11.2’ str3 = ‘abc’

int() 将数据转换为int类型

print(int(float1)) # 11 浮点型数据可以转换为整型, 转换完成后,将小数部分全部删除 print(int(str1)) # 10 如果str引号内是int类型数据,可以转换为整型

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

print(int(str2)) # 如果str引号内是float类型数据,不可以转换为整型, 会报错ValueError

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

print(int(str3)) # 如果str引号内部是除数字外的其他字符,则不可以转换为整型,会报错ValueError

float() 将数据转换为float类型

print(float(int1)) # 10.0 整型数据可以转换为浮点型,转换完成后,在末尾加.0 print(float(str1)) # 10.0 如果str引号内是int类型数据,可以转换为float,需要在末尾加上.0 print(float(str2)) # 11.2 如果str引号内是float类型数据,可以转换为float

ValueError: could not convert string to float: ‘abc’

print(float(str3)) # 如果str引号内部是除数字以外的其他字符,则不可以转换为float,会报错ValueError

str() 将数据转换为str类型

所有的python数据,都可以转换为str类型数据

print(str(int1)) # 10 print(str(float1)) # 11.2

总结:

1.数值型数据,和引号内部是整型的str类型数据,可以转换为int类型

2.数值型数据,和引号内部是数值型数据的str类型数据,可以转换为float类型数据

3.所有数据均可以转换为str类型

补充:

eval() 将字符串左右的引号去除,引号内的数据是什么就是什么数据类型

str4 = ‘16.3’ print(eval(str4)) # 16.3 print(type(eval(str4))) #

str5 = ‘11’ print(eval(str5)) # 11 print(type(eval(str5))) #

str6 = ‘3+4’

使用eval解析完成后 ‘3+4’ 等价于 3+4

str6 = 3 + 4

print(eval(str6)) # 7 print(type(eval(str6))) #

str7 = ‘print(123)’ eval(str7) # 123

name = ‘小明’ # 如果不想报错,则在前边定义变量即可,变量要先定义后调用 str8 = ‘name’

NameError: name ‘name’ is not defined

我们将’name’使用eval进行解析,得到的是name这个变量名称,该变量未定义所以报错

print(eval(str8))

eval转换时,有一个缺点,所转换的数据,最终的数据类型不固定,程序员一般不会使用不可控的技术

同时eval转换时非数字数据会作为标识符出现,也有一定的报错风险

  1. <a name="vm497"></a>
  2. # 01-今日课程内容
  3. 1. f-string字符串: 格式化字符串的另外一种方式
  4. 1. 运算符
  5. 1. 算数运算符
  6. 1. 赋值运算符
  7. 1. 比较运算符
  8. 1. 逻辑运算符
  9. 3. 分支语句
  10. 1. 单条件分支
  11. 1. 对立条件分支
  12. 1. 多条件分支
  13. 4. debug调试[熟悉]
  14. 4. 猜拳游戏案例
  15. <a name="tUkEc"></a>
  16. # 02-f-string字符串[与传统格式化方式至少掌握一个]
  17. - 使用f-string字符串之前先看自己的环境版本,python3.6以下无法使用
  18. - 使用f-string字符串时{}内不能为空
  19. ```python
  20. # f-string字符串时python3.6之后推出的一种新的字符串格式化方式
  21. # 这种方式更为简便,可读性高,但是要注意你所开发的环境是否支持该语法
  22. # 格式: f'字符串内容{变量}'
  23. # 需求: 格式化输出一个学员的基本信息(姓名,年龄,身高,学号)
  24. name = '小明'
  25. age = 18
  26. height = 178.33
  27. stu_num = 3
  28. # 传统方式 %
  29. print('我的名字是%s, 我的年龄是%d岁, 我的身高是%fcm, 我的学号是%d' % (name, age, height, stu_num))
  30. # f-string 字符串
  31. # 第一步:将所有需要使用占位符的地方替换为大括号,并在字符串开始位置书写f
  32. # print(f'我的名字是{}, 我的年龄是{}岁, 我的身高是{}cm, 我的学号是{}')
  33. # 第二步:在字符串中的大括号内填写变量或表达式
  34. print(f'我的名字是{name}, 我的年龄是{age}岁, 我的身高是{height}cm, 我的学号是{stu_num}')
  35. # 注意:
  36. # 1.f-string字符串的字符串开始位置可以使用f 也可以使用F
  37. print(F'我的名字是{name}, 我的年龄是{age}岁, 我的身高是{height}cm, 我的学号是{stu_num}')
  38. # 2.{}内部可以书写计算式或表达式,也可以调用函数,但是不能空否则报错
  39. # SyntaxError: f-string: empty expression not allowed
  40. # print(f'我的名字是{name}, 我的年龄是{age+5}岁, 我的身高是{}cm, 我的学号是{stu_num}')
  41. print(f'我的名字是{name}, 我的年龄是{age+5}岁, 我的身高是{height}cm, 我的学号是{stu_num}')

练习:在超市购买苹果, 手动键入单价(price) 和重量(weight),计算出总价,并输出”购买了苹果xx斤,每斤xx元, 共消费xx元.”

03-f-string字符串中变量的格式控制[掌握]

  • float类型数据保留n位小数: {float类型变量: .nf}
  • int类型数据占n位,不足位用0补齐: {int类型变量: 0nd} ```python

    需求: 练习:在超市购买苹果, 手动键入单价(price) 和重量(weight),计算出总价,并输出”购买了苹果xx斤,每斤xx元, 共消费xx元.”

price = input(‘请输入苹果的单价:’) weight = input(‘请输入苹果的重量’)

print(f’购买了苹果{weight}斤,每斤{price}元, 共消费{float(weight) * float(price)}元.’)

购买了苹果3.33斤,每斤11.3元, 共消费37.629000000000005元.

需求: 如果我想让消费额保留两位小数,我应该怎么办??

格式: {float类型数据 :.nf} 可以将float类型变量保留n位小数,并进行四舍五入

print(f’购买了苹果{weight}斤,每斤{price}元, 共消费{float(weight) * float(price): .2f}元.’)

如果我想输出整数,占6位,不足位用0补齐该怎么办.

格式: {int类型数据: 0nd} 占用n位,不足位用0补齐

stu_num = 3 print(f’我的学号是{stu_num:06d}’)

当stu_num是整型时,d可以省略

print(f’我的学号是{stu_num:06}’)

补充:精度损失
```python
# 补充:精度损失
# 精度损失: 在计算机中只有0和1两个数字,所以我们保存浮点型数据时使用的是小数部分和整数部分分开计算的方式
# 整数部分保存规则和整数类似,小数部分是通过计算得到一个无限接近于该小数的数字,永远不可能相等
# 举例: 当你使用0.1的时候,可能我们使用的是0.1000000000000001  也可能是 0.099999999999999999999999999

print(0.1 + 0.2) # 0.30000000000000004

# 总结:不需要纠结和处理精度损失问题,我们开发中一般不讨论,除非银行,金融,航空等行业才会处理.

04-算数运算符[熟悉]

  • 程序员没有办法口算10以内的加减法超过1+1=2就要使用电脑帮助我们计算,否则非常容易出错
  • 数数也会出错,如果一个容器或者一个数据的长度超过2不要自己数去,让计算机帮我们数
  • 不要背运算符的优先级,要善于使用()去规定运算的先后顺序 ```python

    常见的算数运算符

+ 求两个数的和

print(2 + 3) # 5

- 求两个数的差

print(5 - 3) # 2

* 求两个数的积

print(2 * 3) # 6

/ 求两个数的商

print(10 / 5) # 2.0

// 整除运算, 求两个数相除的商

11 除以 3 商 3 余 2

print(11 // 3) # 3 print(11.2 // 3) # 3.0

% 取模运算/取余运算, 求两个数相除的余

11 除以 3 商 3 余 2

print(11 % 3) # 2 print(11.2 % 3) # 2.1999999999999993

幂次运算 ab 就是求a的b次方

print(2 ** 3) # 8

算数运算符的优先级问题:

先乘除,后加减,如果优先级相同,则从左只有依次计算, 这个规则在编程中同样适用

整除和取模运算与乘除运算,算数运算符优先级相同

分析:如果整除优先级高,则结果是 3 ,如果优先级相同,或者整除优先级低,则等于4

print(3 * 6 // 4) # 4

分析:如果整除优先级高,或者优先级相同,则结果为3, 如果整除优先级低,则结果为0

print(6 // 4 * 3) # 3

综上所述: * 和 // 优先级相同

同理可验证 :整除和取模运算与乘除运算,算数运算符优先级相同

幂次运算的优先级最高

print(2 3 * 2) # 18

优先级序列: + - < / // % < * < ()

所有的运算符优先级不要背,想让谁先执行就用小括号括起来即可 () 优先级最高

print((2 + 3) * 4) # 20

print((2 3) * 2) # 36

<a name="PHThW"></a>
# 05-赋值运算符[熟悉]

- 所有的变量定义都是赋值的过程
```python
# 赋值: 变量本身是没有任何意义的,如果 我们使用=将右侧的数据传递给变量则变量有意义,或者说有值
# 这个过程就是赋值,我们使用的=就是赋值运算符

# 赋值运算符 =
# 作用: 就是将等号右侧的数据或表达式的值,赋值给等号左侧的变量
name = '小智'  # 就是将字符串'小智'赋值给name ,此后name有意义,代表的就是'小智'

# 注意事项:
# 1.等号左侧一定是变量
# 3=name
# 2.多次赋值时只保留最后一次赋值的结果
name = '小霞'
print(name)
# 3.赋值运算符可以给多个变量同时赋相同的值,等号末尾一定是值,前边都是变量
a = b = c = 1
print(a, b, c)  # 1 1 1
# 4.赋值运算符可以给多个变量同时赋不同的值,等号左侧的变量数量和等号右侧的值的数量要完全相同
num1, num2, num3 = 1, 2, 3
print(num1, num2, num3)  # 1 2 3

06-复合赋值运算符[熟悉]

  • += -= = /= //= %= *= ```python

    复合赋值运算符: 本质就是先进行算数运算,再进行赋值运算

    包括: += -= = /= //= %= *=

注意: 下方我会以+=为例进行讲解,其他的运算符自行推到原理相同

a += 1 等价于>>> a = a + 1

NameError: name ‘a’ is not defined

复合赋值运算符,等号左侧一定是已经被定义的变量,等号右侧可以使已经被定义的变量,值或者表达式

a += 1

print(a)

分析: a += 1的操作等价于 a = a + 1 计算顺序,是先计算a + 1 得到的结果再赋值给a

如果我们没有定义a 则执行a + 1时a 还没有值,没有被定义,所以会报错

a = 10 a += 1 print(a) # 11

复合赋值运算符,不能连等操作

SyntaxError: invalid syntax

a += 1 += 2

a *= 2
print(a) # 22

<a name="PzNOB"></a>
# 07-比较运算符[熟悉]
```python
# 比较运算符就是比较数值的大小的
# 常用的比较运算符有哪些: > < >= <= != ==
# 比较运算符的运算结果是bool型数据

# > 左侧数据是否大于右侧,若大于则返回True,否则返回False
print(2 > 3)  # False

# < 左侧数据是否小于右侧,若小于则返回True,否则返回False
print(2 < 3)  # True

# >= 左侧数据是否大于等于右侧,若大于等于则返回True,否则返回False
print(2 >= 2)  # True

# <= 左侧数据是否小于等于右侧,若小于等于则返回True,否则返回False
print(3 <= 4)  # True

# != 判断左右两侧数据不相等,若不相等返回True,否则返回False
print(3 != 3)  # False

# == 判断左右两侧数据相等,若相等返回True,否则返回False
print(3 == 3)  # True

# 注意事项:
# 1.判断是否相等不能使用=  要使用==, 等于号已经作为赋值运算符出现
# SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
# print(3=3)

# 2.判断大于小于时, 等号左右数据类型必须相等 (数值型数据间可以随意比较大小,int  float  bool)
# TypeError: '>' not supported between instances of 'int' and 'str'
# print(1 > '2')
print(3 > True)  # True  bool型数据参与比较和计算时, True = 1  False = 0

# 3.判断相等或不等时,符号左右两侧可以是不同种数据类型
print(3 != '4')  # True

# 思考题:
# 1 != 2
# 3 = 4
# '3' == '4'

print(1 != 2)  # True
# SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
# print(3 = 4)# 报错
print('3' == '4')  # False

# 拓展: 在python中 不等式可以连等
age = 18
print(10 < age < 20)  # True

08-字符串比较大小[了解]

  • 在开发中我们一般不会使用字符串进行数字逻辑的比较,一般都是用大小来进行排序的

ASCII码:
image.png

# 字符串数据之间可以进行比较运算符的计算,但是和其他数据类型不能比较大小
print('3' > '4')  # False  证明 字符3 大于 字符4
print('5' <= 'a')  # True  证明 字符5 小于 字符a
# 字符串大小的比较依据是编码集的顺序
# 按照字符集,每一个字符都会有一个编码,该编码的大小就决定了当前字符的大小,编码较大的,运算时,值就较大
# ASCII码: 美国信息互换标准代码,目的是将二进制数据,转换为人可以读懂的字符信息,可以更方便的阅读计算机传递给我们的信息
# ASCII只能满足美国人的使用要求,很多国家的语言不包含,所有后续又推出了万国码(Unicode码),最常用的就是utf8,里边包含中文,英文,俄语等多个国家的语言
# 编码集越来越大,编号也越来越多,我们的汉字大小远大于字母和数字

# 记住规律即可 : 数字 < 字母   大写字母 < 小写字母   数字和字母 < 汉字


# 如果字符串中是多个字符怎么办???
# 从第一位开始比较,如果第一位大则该字符串大,后边所有字符无须比较,如果值相同,则比较第二位,依次类推
print('10' > '9')  # False
# 如果两个字符大小相同,下一位有值的一定大于没有值的
print('aac1' < 'aac')  # False

# 思考题:
print('998' > '99a')  # False
print('12' > '123')  # False
print('123' > ' 123')  # True

09-逻辑运算符[掌握]

  • and: 同真即真
  • or: 同假即假
  • not :真假互换 ```python

    常用的逻辑运算符: and or not

    逻辑运算符的运算结果也是bool型数据

and 逻辑与

举例: 我要去北京上课,需要打车到机场, 然后坐飞机去北京,此时打车和坐飞机缺一不可

所以我们可以说,我要做出租车与飞机回北京

口诀: 同真即真

print(True and True) # True print(False and True) # False print(True and False) # False print(False and False) # False

or 逻辑或

举例: 我要去上班,可以打车去,也可以骑共享单车去,此时打车和骑共享单车满足其一即可

所以我可以说我乘坐出租车或骑共享单车去上班

口诀: 同假即假

print(True or True) # True print(False or True) # True print(True or False) # True print(False or False) # False

not 逻辑非

举例:如果没有钱,我们就去上班,如果有钱花我就不去

口诀: 真变假,假变真

print(not True) # False print(not False) # True

一般逻辑运算不会单独出现,会和比较运算一起出现

比较运算符计算的优先级大于逻辑运算符

print(2 > 3 or 4 < 5) # True print(‘a’ > ‘2’ and 5 < 6) # True print(not 2 < 3) # False

一般我们会给比较运算符加上括号提高可读性

最终写法

print((2 > 3) or (4 < 5)) # True print((‘a’ > ‘2’) and (5 < 6)) # True print(not (2 < 3)) # False

<a name="FpwFd"></a>
# 10-Python中的三种流程语句[了解]
```python
# 1.顺序语句: Python默认所有的代码都是由上至下顺序执行的
print('hello Python')
print('hello Bigdata')
print('hello chuanzhi')

# 打印结果 : 所有的代码由上至下依次执行
# hello Python
# hello Bigdata
# hello chuanzhi


# 2.分支语句: 使用if进行构造,在同一条件下仅有一个分支中的代码会被执行

# 3.循环语句: 使用for 或者while进行构造,满足条件时可以重复执行相同或相似的代码,条件不成立时则跳出循环

11-单条件分支语句[熟练使用]

image.png

"""
分支语句使用if关键字进行构造
格式:
if 条件:
    条件成立时执行的代码

"""

age = input('请输入你的年龄:')

if int(age) >= 18:
    # 内部可以书写多行代码,只要保证缩进就一直受到分支语句的控制
    print('小哥哥快来玩呀!')
    print('好的,帮我选李白')
    print('123')
# print('输了一天太难受') # 这句话打破缩进则已经脱离了分支语句的控制
# 当代码取消缩进后,无论if语句是否成立,都会被执行,与其无关
print('程序结束')

练习: 小明考试得分(score),如果大于90分,爸爸就给买一个兰博基尼

score = 100
if score >= 90:
    print('太棒了,爸爸给你买一个兰博基尼')
    print('买回来了你试试')
    print('两只老虎,两只老虎.....')

12-对立条件分支语句[熟练使用]

image.png

# 对立条件分支语句就是条件成立的时候执行一些代码,条件不成立的时候执行另外一些代码
# if ... else .... 构造对立条件分支语句

'''
格式:
if 条件语句:
    如果条件成立执行的代码
else:
    如果条件不成立执行的代码

逻辑:判断条件是否成立,成立则执行if 控制的代码块, 不成立则执行else控制的代码块
'''

# 需求: 判断小明年龄是否大于18岁,如果大于则可以进入网吧玩游戏,如果不成立就回家坐摇摇车
age = int(input('请输入小明的年龄:'))

if age >= 18:
    # 进入网吧游戏
    print('小哥哥快来玩呀')
    print('帮我选李白')
else:
    # 回家玩摇摇车
    print('小宝宝,快回家玩摇摇车吧')
    print('那借我一块钱')

print('程序结束')

练习: 小明考试得分(score),如果大于90分,爸爸就给买一个兰博基尼,如果不够90分就打屁股

13-debug调试[熟悉]

:::info # Debug模式,也叫做调试模式或者纠错模式
# 进入debug模式的方法: 右键点击debug即可
# 在debug模式下,代码会暂停在断点位置执行之前的状态(断点就是在pycharm中行号后边点击的红点)
# 再此状态下,我们可以看到代码的执行流程以及变量的变化情况
:::

  1. 进入debug模式的方式

image.png

  1. debug调试的方法及按钮的作用

image.png
注意:pycharm中有时只写一个断点拦截不住,最好打两个断点,以免出现问题

14-多条件判断分支语句[熟练使用]

# if ... elif ... else ... 多情况分支语句
'''
格式:
if 条件1:
    条件1成立时执行的代码
elif 条件2:
    条件2成立时执行的代码
elif 条件3:
    条件3成立时执行的代码
....
else:
    所有条件均不成立时执行的代码

逻辑: 如果条件以成立时,就执行if中的代码块, 如果条件2成立,则执行第一个elif中的代码块,以此类推,如果所有条件均不成立则执行else中的代码块
# else可以不写但是要保证条件判断完全
'''

# 需求: 根据你不生的年龄不同夸赞女生
# age = int(input('请输入您要夸赞的女生的年龄:'))
#
# if age < 0 or age > 120:
#     # 该年龄不在合法年龄范围内,说民数据异常
#     print('数据异常!')
# elif 0 <= age < 18:
#     print('小妹妹你真可爱')
#     print('叔叔,我们不约而同的认为我很可爱')
# elif 18 <= age < 40:
#     print('美女,你真漂亮')
#     print('彩礼100万')
# elif 40 <= age < 60:
#     print('阿姨,您真端庄')
#     print('小伙子,又不想努力啦!')
# else:
#     print('老奶奶,您真慈祥')
#     print('我北京三套房')


# 对于多条件分支语句进行优化
# 需求: 根据你不生的年龄不同夸赞女生

age = int(input('请输入您要夸赞的女生的年龄:'))
# 思考,如下情况我们如果输入的年龄为30 则条件三,条件四均满足,则此时执行的命令是什么???

if age < 0 or age > 120:
    # 该年龄不在合法年龄范围内,说明数据异常
    print('数据异常!')
elif age < 18:
    print('小妹妹你真可爱')
    print('叔叔,我们不约而同的认为我很可爱')
elif age < 40:
    print('美女,你真漂亮')
    print('彩礼100万')
elif age < 60:
    print('阿姨,您真端庄')
    print('小伙子,又不想努力啦!')
else:
    print('老奶奶,您真慈祥')
    print('我北京三套房')

print('程序结束')

# 结论: 分支语句从上至下依次进行判断,如果条件不成立,则继续向下判断,如果条件成立则执行该条件控制的代码块中的代码,执行结束后跳出分支语句
# 重点记忆: 一个分支语句中无论有多少个分支,最终只有一个分支中的代码会被执行

image.png
练习: 获取小明考试得分,输出小明的评分级别 [0-60) 不及格 [60-70) 及格 [70-80) 中等 [80-90) 良好 [90-100]优秀

# 练习: 获取小明考试得分,输出小明的评分级别 [0-60) 不及格  [60-70) 及格 [70-80) 中等  [80-90) 良好  [90-100]优秀

score = 99

if score > 100 or score < 0:
    print('分数异常')
elif score < 60:
    print('不及格')
elif score < 70:
    print('及格')
elif score < 80:
    print('中等')
elif score < 90:
    print('良好')
else:
    print('优秀')

print('程序结束')

# 注意事项:
# 1.情况判断要完全,如果不能确定自己已经判断完全了就是用else
# 2.69 < score < 100 等价于 score <100 and score >60
# 3.如果使用熟练,建议省略多余的条件,这样更加易于阅读

15-猜拳游戏[掌握]

  • 绝大多数区间都是左闭右开的区间,只有极少数区间例外,比如random.randint是左闭右闭的区间 ```python

    需求: 玩家和电脑进行猜拳游戏,电脑随机出拳,玩家手动键入拳型,判断获胜方并进行打印.

    分析流程:

    1. 玩家出拳 ⽯头(1)/剪⼑(2)/布(3)

    player = int(input(‘请输入您要出的拳型:⽯头(1)/剪⼑(2)/布(3)’))

    2. 电脑出拳 ⽯头(1)/剪⼑(2)/布(3)

    导入random模块,该模块是一个随机数模块,是python的内置模块,随机数功能已经帮助我们写好了,不用我自己处理,直接调用其功能即可

    import random

使用random模块中的random.randint(m,n)可以输出从m到n的随机整数,包含m和n 也可说是m到n 的闭区间

computer = random.randint(1, 3)

3. 判断电脑和玩家的输赢情况

‘’’ c p w 1 1 - 1 2 c 1 3 p 2 1 p 2 2 - 2 3 c 3 1 c 3 2 p 3 3 - ‘’’ if (computer == 1 and player == 2) or (computer == 2 and player == 3) or (computer == 3 and player == 1):

# 4. 宣布结果
# 先判断满足电脑获胜的情况
print('电脑获胜')

elif player == computer:

# 4. 宣布结果
# 判断电脑和玩家的拳型是否相同
print('平局')

else:

# 4. 宣布结果
# 其余情况都是玩家获胜
print('玩家获胜')

```

作业

02_分支语句作业.md
02_分支语句答案.md

作业提交

点击查看【jinshuju】

文件链接

百度云盘: 链接:https://pan.baidu.com/s/13TqhouBQ8h1lP2VFtQHgMw 提取码:lh3d
阿里云盘:「python+大数据79期基础」等文件 https://www.aliyundrive.com/s/G6iPqGFQgfJ