本文已参与「新人创作礼」活动,一起开启掘金创作之路。
P6 Python的数据类型
Python变量不需要声明数据类型,但是Python有数据类型。
字符串 数值类型: 整形:与长整型结合在一起,长度不受限制,仅受限于计算机内存位数,非常适合大数据运算 布尔类型:特殊的整形,true=1,false=0,可以用来计算,但实际应用上不要这么做。 浮点型:3.14,有小数点 e记法:科学计数法,浮点型
类型转换 int() 字符串、浮点数转整数 如果字符串不是纯整数组成,函数会报错 浮点数转整数时,直接去掉小数部分
float() 字符串、整数转浮点数 对整数:加小数点,后面加1位0
str() 把其他类型数据转为字符串 e记法会直接转为e记法字符串,不会展开,正负会加 +-符号
将bif设置为变量名的风险:将会代替bif函数,仅作为变量起作用,后续无法再调用。
type() 返回变量类型,在待确定数据类型时使用 isinstance(变量,类型) 判断变量数据类型是不是某类型,结果布尔型 isinstance(a,int)
课后题
-
Python 的 floor 除法现在使用 “//” 实现,那 3.0 // 2.0 您目测会显示什么内容呢? 1.5
-
a < b < c 事实上是等于? a < b and b < c
-
不使用 IDLE,你可以轻松说出 5 ** -2 的值吗? 0.004 1/25 幂运算操作符比其左侧的一元操作符优先级高,比其右侧的一元操作符优先级低。
-
如何简单判断一个数是奇数还是偶数? isinstance(a/2,int),为真就是偶数,否则是奇数
-
请用最快速度说出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
Falsenot or and 的优先级是不同的:not > and > or
我们按照优先级给它们加上括号:(not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9) == 0 or 0 or 4 or 6 or 9 == 4
- 还记得我们上节课那个求闰年的作业吗?如果还没有学到“求余”操作,还记得用什么方法可以“委曲求全”代替“%”的功能呢? a - a/b
编程题
- 请写一个程序打印出 0~100 所有的奇数。
print('--------Fred-2022-7--23-----------')
i = 1
while i<100:
print(i)
i += 2
- 我们说过现在的 Python 可以计算很大很大的数据,但是......真正的大数据计算可是要靠刚刚的硬件滴,不妨写一个小代码,让你的计算机为之崩溃?
print('--------Fred-2022-7--23-----------')
i = 10000
while True:
print(i)
i **= 2
8G内存,跑了10分钟还没爆,有空再测吧。
- 爱因斯坦的难题 爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。 题目:请编程求解该阶梯至少有多少阶?
print('--------Fred-2022-7--23-----------')
i = 0
while i<2000:
if i%2==1 and i%3==2 and i%5==4 and i%6==5:
print('阶梯数为:',i)
i += 7
解有无数个数字,打印了2000以内的。
- 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式! isinstance(a,int) 判断变量数据类型 floor 除法计算
P7 Python操作符
- 加,可以简写 a = a + 3 a += 3
- 减
- 乘 / 除,结果如果有小数,会返回浮点数 % 取模 ** 幂运算 // 整除,如果两边都是整数,结果也是整数,如果有一个数是浮点型,结果是浮点型
优先级:按数学计算优先级 括号 > 乘除 > 加减 比较(< > 等) > 逻辑运算(and or 等) 幂运算,高于左侧优先级,低于右侧优先级 -4 ** 2 = -16,先计算 4 ** 2,再计算- 复杂表达式最好加括号,美观且已读
and 两个都为真结果才为真 or 有1个T则结果为T not 一元操作符,对右侧值取反 3 < 4 < 5 = 3<4 and 4<5,结果为T,在Python中是允许的
P8 分支和循环
加载背景音乐
播放背景音乐(循环)
加载背景图
放置大飞机
实时监听鼠标点击位置
鼠标点击时移动大飞机到对应位置
实时计算小飞机与大飞机坐标是否重合
如果重合:结束游戏
如果不重合:循环:
复制小飞机,横坐标位置任意
小飞机沿纵坐标匀速下移
课后题
-
if not (money < 100): 上边这行代码相当于? if money >= 100:
-
assert 的作用是什么? assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常。 什么情况下我们会需要这样的代码呢?当我们在测试程序的时候就很好用,因为与其让错误的条件导致程序今后莫名其妙地崩溃,不如在错误条件出现的那一瞬间我们实现“自爆”。 一般来说我们可以用Ta再程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert关键字就非常有用了。 待使用
-
假设有 x = 1,y = 2,z = 3,请问如何快速将三个变量的值互相交换? ~~ temp = x x = y y = z z = temp~~
x, y, z = z, y, x,批量赋值
-
猜猜 (x < y and [x] or [y])[0] 实现什么样的功能? 这其实是 Python 的作者还没有为 Python 加入三元操作符之前,Python 社区的小伙伴们灵活的使用 and 和 or 搭配来实现三元操作符的功能,这里边有涉及到列表和切片的知识,这部分知识很快就会讲解,迫不及待的朋友可以先稍微预习下。
-
你听说过成员资格运算符吗? in, not in, 在字符串、list、dict、set这种对象里面可以用,判断元素在不在序列里
编程作业
0. 视频中小甲鱼使用 if-elif-else 在大多数情况下效率要比全部使用 if 要高,但根据一般的统计规律,一个班的成绩一般服从正态分布,也就是说平均成绩一般集中在 70~80 分之间,因此根据统计规律,我们还可以改进下程序以提高效率。
题目备忘:按照 100 分制,90 分以上成绩为 A,80 到 90 为 B,60 到 80 为 C,60 以下为 D,写一个程序,当用户输入分数,自动转换为ABCD 的形式打印。
print('--------Fred-2022-7--23-----------')
while True:
a = input('请输入分数(输入END结束循环):')
if a == 'END':
break
a = int(a)
if a >= 90:
print(a,'分等级为:A')
elif a >= 80:
print(a,'分等级为:B')
elif a >= 60:
print(a,'分等级为:C')
else:
print(a,'分等级为:D')
- Python 的作者在很长一段时间不肯加入三元操作符就是怕跟 C 语言一样搞出国际乱码大赛,蛋疼的复杂度让初学者望而生畏,不过,如果你一旦搞清楚了三元操作符的使用技巧,或许一些比较复杂的问题反而迎刃而解。 请将以下代码修改为三元操作符实现: x, y, z = 6, 5, 4 if x < y: small = x if z < small: small = z elif y < z: small = y else: small = z
x, y, z = 6, 5, 4
small = x if (x<y) else y
small
5
small = small if (small < z) else z
small
4
答案:small = x if (x < y and x < z) else (y if y < z else z) 三元操作符本身是一个表达式
- 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式! 小游戏的设计 elif
P9 分支和循环2
Python可以避免悬挂else,缩进强制使用正确对齐 一元操作符:-x,变成负数 二元操作符:a = b,表达式赋值给变量 三元操作符:a = b if (c>d) else e,其中b和e也可以是三元操作符
assert 断言 assert 表达式,当表达式为假的适合,爆出异常。用于程序测试。 当表达式为真的时候,继续向下执行。 爆出异常后,可以设置异常捕获程序捕获
课后题
-
下面的循环会打印多少次"I Love FishC"? for i in range(0, 10, 2): print('I Love FishC') 5次,步长2,0 2 4 6 8执行打印,i值最高到9,因此10不打印
-
下面的循环会打印多少次"I Love FishC"? for i in 5: print('I Love FishC')
5次,0 1 2 3 4,默认步长1,默认从0开始会报错,int不是序列,不能用in操作 -
回顾一下 break 和 continue 在循环中起到的作用? break:跳出循环 continue:循环中,跳过余下指令,直接进入下一次循环
-
请谈下你对列表的理解? 元素集合,里面的元素可以是任意数据类型、序列,元素的数据结构不需要一致,下标从0起。列表是无序的。列表跟str可以互相转换。
-
请问 range(10) 生成哪些数? 0-9,10个数字
-
目测以下程序会打印什么? while True: while True: break print(1) print(2) break print(3)
2 3
-
什么情况下我们要使循环永远为真? while Ture: 循环体
-
【学会提高代码的效率】你的觉得以下代码效率方面怎样?有没有办法可以大幅度改进(仍然使用while)? i = 0 string = 'ILoveFishC.com' while i < len(string): print(i) i += 1 循环判断中的函数len()计算会降低执行效率,每一次循环时都要重新算值,可以把其中计算的部分提前赋值,替换到条件表达式中,就可以提高效率。
编程作业
- 设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内。
程序演示如图:
print('--------Fred-2022-7--23-----------')
password = input('请输入密码:')
print('密码输入成功')
chance = 3
check_password = input('密码中不能含有“*”号,请输入密码:')
while True:
if '*' in check_password:
check_password = input('密码中不能含有“*”号!您还有'+str(chance)+'次机会,请输入密码:')
else:
chance -= 1
if check_password == password:
print('密码正确,进入程序……')
break
elif chance>0:
check_password = input('密码输入错误!您还有'+str(chance)+'次机会,请输入密码:')
else:
print('抱歉,您的机会用完了,再见!')
break
- 编写一个程序,求 100~999 之间的所有水仙花数。 如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
print('--------Fred-2022-7--23-----------')
print('开始打印水仙花数')
for i in range(100,1000):
if i == int(str(i)[0]) ** 3 + int(str(i)[1]) ** 3 + int(str(i)[2]) ** 3:
print('水仙花数:',i)
先转字符串,用字符串切片
- 三色球问题 有红、黄、蓝三种颜色的球,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。
print('--------Fred-2022-7-23-----------')
print('颜色搭配方案如下:')
for red in range(0,4):
for yellow in range(2-red if red<=2 else 0,4):
print('红球:',red,',黄球:',yellow,',绿球:',8-red-yellow)
- 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式! assert 断言,待应用 三元操作符,好用
P10 条件与分支3
while 条件: 循环体 在循环体中,可以设置通过改变条件中的变量使变量为假,跳出循环
for 目标 in 表达式: 循环体
print(输出值,end=' ') end可以指定print预计的结束符,默认是换行\n
range([start],stop[,step=1]),start默认从0开始,step步长默认为1,即每次递增的数 生成从start 到 stop-1 的序列,如range(0,5),则目标=0 1 2 3 4
break:终止全部循环 continue:终止本次循环,开始下一次循环(从条件判断开始) for 目标 每次循环时的值的是表达式一次性打印好的一个序列,当目标在循环体中被改变赋值时,不会影响其下一次循环时的值。
print('--------Fred-2022-7-23-----------')
for i in range(10):
print('---',i,'---')
if i%2 !=0:
print(i)
continue
i += 2
print(i)