python-day3

day3课程内容 - 分支循环

一、IF条件分支

普通语法:

if 条件 :
    执行
else:
    执行

例如:

scoer = int(input('请输入您的考试成绩:'))
if 90 <= scoer <=100 :
    print('A')
else:
    if 80 <= scoer < 90:
        print('B')
    else:
        if 60 <= scoer < 80:
            print('C')
        else:
            if 0 <= scoer < 60:
                print('D')
            else:
                print('输入错误!')

改进语法:

if 条件:
    执行
elif 条件:
    执行
else:
    执行

例如:

scoer = int(input('请输入您的考试成绩:'))
if 90 <= scoer <=100:
    print('A')
elif 80 <= scoer <= 90:
    print('B')
elif 60 <= scoer <= 80:
    print('C')
elif 0 <= scoer <= 60:
    print('D')
else:
    print('输入错误!')

二、可有效避免’悬挂else’

例如:

if hi >2:
    if hi > 7:
        print('好棒')
else:
    print('切')

#C语言为就近匹配的原则,即便下面的else想匹配最上方的if,但其实匹配的是最近的if。
#但在python中,就会严格按照缩进原则来执行,同一缩进,同一执行

三、条件表达式(三元操作符)

使用三元操作符后可用一条语句来完成条件判断和赋值的操作
一元操作符
#例如:正号、负号。- + 3
二元操作符
#例如:赋值。y = 3
三元操作符
#例如:判断和赋值

二元操作符转三元操作符,例如:

# 二元操作符形式
x,y=4,5
if x > y:
    number = x
else:
    number = y

#三元操作符形式
number = x if x > y else y

四、断言【assert】

含义:assert关键字称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常
例如:

assert 3 >4
AssertionError

用途:可用它在程序中置入检查点,可以确保当需要程序中的某一个条件一定为真时才可以让程序工作

五、while循环

语法:

while 条件:
    循环体

退出循环的方法:
1、break
2、当条件为假时,即不成立时
例如:

i = 10
while i < 10:
    循环体
    i += 1
# 即当i>=10的时候,停止while循环

六、计数器循环

语法:

for 目标 in 表达式:
    循环体

例如:

for i in range(10):
    print('i')
#这个程序就会将0-9依次打印出来

七、range()【python内置函数BIF】

语法:

range([start,]stop[,step=1])

# 共3个参数,[]内的可不填写
# step = 1表示第三个参数默认值为1
# range的作用为生成一个从start参数的值开始到stop参数值结束的数字序列

例如:

>>> range(1,10,2)
range(1, 10, 2)

>>> list(range(1,10,2))
[1, 3, 5, 7, 9]

>>> for i in range(5):
	print(i)	
0
1
2
3
4

八、最重要的两个语句【break、continue】

1、break语句
例如:

bingo = 123
join = int(input('请输入密码:'))
while True:
    if bingo == join:
        break
    join = int(input('密码错误!请重新输入:'))
print('密码正确!')

当while为True时循环将一直执行,循环体内的条件判断为真时,才会到break,断掉while循环。
即,只有当bingo == join时,才会触发break机制将while循环断掉,不然while循环将持续到天荒地老

2、continue语句
例如:

1for x in range(10): #0,1,2,3,4
2if x % 2 == 0:
3、        x += 2
4print(x,end=',')
5continue 
6print(x)
# 输出结果为:2、4、6、8、10、9

for循环有一个概念叫循环遍历【即for循环完毕】,上面代码中有3个知识和注意点,即:
#for循环从range(10)中依次取出的值,不受下面任何赋值语句的干扰,所以是0、1、2、3、4、5、6、7、8、9
#当x通过for循环从range(10)中取出的值,符合下方的if判断条件时,会对x+2后进行打印,然后continue继续进行第1行到第5行的代码,若不符合下方的if判断条件时,则不会对x进行打印,continue继续进行第1行到第5行的代码
#当for循环遍历,即赋最后一个值给x后,for循环停止,程序开始从第2行往下执行,即进行条件判断,若条件为真时,则打印x+2,然后结束循环,来到最外层,按照当时的x值执行最外层的打印,若条件为假时,则结束continue循环,来到最外层,按照当时的x值执行最外层的打印

day3疑问

暂无

day3作业

测试题:

0.if not (money < 100): 上边这行代码相当于?
自答:判断当money >= 100时,执行
参考答案:if money >= 100:

1.assert 的作用是什么?
自答:判断某段代码是否正确,为真,若为真才执行,不为真则报错
参考答案:
assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常。
什么情况下我们会需要这样的代码呢?当我们在测试程序的时候就很好用,因为与其让错误的条件导致程序今后莫名其妙地崩溃,不如在错误条件出现的那一瞬间我们实现“自爆”。
一般来说我们可以用Ta再程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert关键字就非常有用了。

2. 假设有 x = 1,y = 2,z = 3,请问如何快速将三个变量的值互相交换?
自答:x,y,z=z,x,y
参考答案:x, y, z = z, y, x
3. 猜猜 (x < y and [x] or [y])[0] 实现什么样的功能?
自答:当x<y时,x=0,当x>=y时,y=0
*** 参考答案:未给出***
4. 你听说过成员资格运算符吗?
自答:没有哎
*** 参考答案:
Python 有一个成员资格运算符:in,用于检查一个值是否在序列中,如果在序列中返回 True,否则返回 False。***

>>> name = '小甲鱼'
>>> '鱼' in name
True
>>> '肥鱼' in name
False

5.下面的循环会打印多少次"I Love FishC"?

for i in range(0, 10, 2):
    print('I Love FishC')

自答:0、2、4、6、8,5次
参考答案:5 次,因为从 0 开始,到 10 结束,步进为 2。
6.下面的循环会打印多少次"I Love FishC"?

for i in 5:
    print('I Love FishC')

自答:不打印,因为5不是表达式
参考答案:会报错,上节课的课后习题我们提到了 in 是“成员资格运算符”,而不是像 C 语言那样去使用 for 语法。Python 的 for 更像脚本语言的 foreach

7 回顾一下 break 和 continue 在循环中起到的作用?
自答:break当循环体中的判断为真或假时,退出循环;continue一直进行循环,直到循环遍历
参考答案:break语句的作用是终止当前循环,跳出循环体。
continue语句的作用是终止本轮循环并开始下一轮循环(这里要注意的是:在开始下一轮循环之前,会先测试循环条件)

8.请谈下你对列表的理解?
自答:用户储存信息,类似于MySQL里面的表
参考答案:未给出
9.请问 range(10) 生成哪些数?
自答:0、1、2、3、4、5、6、7、8、9
参考答案:会生成 range(0, 10),list(range(0, 10)) 转换成列表是:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

10.目测以下程序会打印什么?

while True:
        break
        print(1)
    print(2)
    break
print(3)

自答:2、3
参考答案:2、3

11.什么情况下我们要使循环永远为真?
自答:需要进行条件判断时
参考答案:
while Ture:
循环体

同样用于游戏实现,因为游戏只要运行着,就需要时刻接收用户输入,因此使用永远为真确保游戏“在线”。操作系统也是同样的道理,时刻待命,操作系统永远为真的这个循环叫做消息循环。另外,许多通讯服务器的客户端/服务器系统也是通过这样的原理来工作的。

所以永远为“真”虽然是“死循环”,但不一定是坏事,再说了,我们可以随时用 break 来跳出循环

12.【学会提高代码的效率】你的觉得以下代码效率方面怎样?有没有办法可以大幅度改进(仍然使用while)?

i = 0
string = 'ILoveFishC.com'
while i < len(string):
    print(i)
    i += 1

自答:【具体未想出来】
参考答案:

#这段代码之所以“效率比较低”是因为每次循环都需要调用一次 len() 函数
i = 0
string = 'ILoveFishC.com'
length = len(string)
while i < length:
    print(i)
    i += 1  

动动手:

13.视频中小甲鱼使用 if-elif-else 在大多数情况下效率要比全部使用 if 要高,但根据一般的统计规律,一个班的成绩一般服从正态分布,也就是说平均成绩一般集中在 70~80 分之间,因此根据统计规律,我们还可以改进下程序以提高效率。
题目备忘:按照 100 分制,90 分以上成绩为 A,80 到 90 为 B,60 到 80 为 C,60 以下为 D,写一个程序,当用户输入分数,自动转换为ABCD 的形式打印。
自答:将条件判断的顺序改变,改为先判断70-80分
参考答案:

ore = int(input('请输入一个分数:'))
if 80 > score >= 60:
    print('C')
elif 90 > score >= 80:
    print('B')
elif 60 > score >= 0:
    print('D')
elif 100 >= score >= 90:
    print('A')
else:
    print('输入错误!')

14.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

自答:

small = x if (x<y or z>x) elif y (y<z) else z

参考答案:

small = x if (x < y and x < z) else (y if y < z else z)

15.设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内。
程序演示如图:
在这里插入图片描述
自答:

cishu = 3
screct = '123'
while cishu:
    shuru = input('请输入密码:')
    if shuru == screct:
        print('密码正确')
        break
    elif '*' in shuru:
        print('密码错误!不可以输入"*"号!您还有',cishu,'次机会')
        continue
    else:
        print('密码错误!您还有',cishu-1,'次机会')
    cishu -=1

16.编写一个程序,求 100~999 之间的所有水仙花数。
如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
自答:

for i in range(100,1000):
    x = int(i/100)#百位
    y = int(i/10 % 10)#十位
    n = int(i % 10)#个位
    if i == x*x*x + y*y*y + n*n*n:
        print(i)

17.三色球问题
有红、黄、蓝三种颜色的球,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。
自答:

for red in range(0, 4):
    for yellow in range(0, 4):
        for green in range(2, 7):
            if red + yellow + green == 8:
                print(red,  yellow, green)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值