python学习笔记6-分支循环

  1. 小飞机游戏框架

    加载背景音乐
    播放背景音乐(设置单曲循环)
    诞生我方飞机
    interval = 0	#时间间隔,给时间产生小飞机,不会占满整个屏幕
    
    while true:
    	if 用户点击窗口关闭按钮:
    		退出程序
    		break	
    		
    	interval += 1
    	if interval == 50:
    		interval = 0
    		小飞机诞生
    		
    	小飞机移动一个位置
    	屏幕刷新
    
    	if 用户鼠标产生移动:
    		我方飞机中心位置 = 用户鼠标位置
    		屏幕刷新
    
    	if 我方飞机与小飞机发生撞击:
    		我方挂,播放撞击音乐
    		修改我方飞机图案
    		打印“Game over”
    		停止背景音乐,最好淡出
    
  2. 按照100分制度,打A(90-100)、B(80-90)、C(60-80)、D(0-60)等级
    注意:elif相当于else if

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

if语句
Python中if语句的一般形式如下所示:
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3

如果 “condition_1” 为 True 将执行 “statement_block_1” 块语句
如果 “condition_1” 为False,将判断 “condition_2”
如果"condition_2" 为 True 将执行 “statement_block_2” 块语句
如果 “condition_2” 为False,将执行"statement_block_3"块语句
Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else。

注意:

1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
3、在Python中没有switch – case语句。
score

  1. 悬挂else

例如在C语言中,以下代码会产生else悬挂

if ( hi > 2)
	if ( hi < 7 )
		printf ( "好棒!好棒!");
else
	printf ( "切~" );

在C语言中,else会与最近的 if 匹配,而在python中不会出现else悬挂问题,因为在python的缩进即代表层次

  1. 条件表达式(三元操作符)
    三元:即有三个操作数
    例如
	x, y = 4, 5
	if x < y:
		small = x
	else:
		small = y

可以改进为:

small = x if x < y else y

small语法:
x if 条件 else y
解读:当 if 后的条件为真时,返回 x,为假时,返回 y.

  1. 断言(assert)
    当assert关键字后边的条件为假时,程序自动崩溃并抛出AssertionError的异常。例如:
assert 3 > 4	#会抛出异常,告诉用户
assert 4 > 3	#会自动略过

assert
当我们在测试程序时,assert关键字很有用,来实现自爆,置入检查点

  1. 循环
    (1)while 循环

    语法:
    while 条件:
    循环体

(2)for 循环
python 中的 for 循环和 C 语言中的 for 循环还是不一样的。
语法:
for 目标 in 表达式:
循环体

#其中的表达式可以是一个列表
例如:

favourite = 'FishC'		#例一
for i in favourite:
	print (i, end = ' ')

print('\n')
member = ['小甲鱼', '黑夜', '迷途', '超级布丁' ]		#例二
for each in member:
	print (each ,len(each))

for循环
(3)range()
语法:
range ( strat, stop[, step ])
参数说明:
#这个BIF有三个参数,其中用括号括起来的两个表示这两个参数是可选的
#step = 1表示第三个参数的值默认值是1
#range 的作用是生成一个从 start 参数的值开始到stop参数的值结束的数字序列

start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

range(5)
list (range(5))
for i in range(5):
	print (i)

for i in range(2,9):
	print (i)

for i in range(1,10,2):
	print (i)

range的使用
(4)两个关键词:break 和 continue
break:

bingo = '小甲鱼'
answer = input('请输入小甲鱼最想听的一句话:')

while True:		
#第一次打成小写true,系统总是报错,一定要True才是正确的,注意了
	if answer == bingo;
		break
	answer = input ('抱歉,错误,请重新输入(答案正确才能退出游戏):')

print('哎呦,恭喜你猜对了!')

break的使用
continue:终止本轮循环,开始下一轮循环(开始前,会判断条件是否成立)

for i in range (10):
	if i % 2 != 0:
		print(i)
		continue
	i += 2
	print(i)

continue的使用

课后练习

#请将以下代码修改为三元操作符实现:
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		#小甲鱼程序,比较x,y,z中的最小值
small = x if (x < y and x < z) else (y if y < z else z)
print(small)

#使用一条语句来完成以下的条件判断和赋值操作:
x, y = 4, 5
if x < y:
    small = x
else:
    small = y

#我的程序
x, y = 4, 5
small = x if(x < y) else y
#会打印五次,从 0 开始,到 10 结束,步进为 2。
for i in range(0, 10, 2):		
	print('I love FishC')
	
#下面这个for循环会报错,因为 in 是“成员资格运算符”,而不是像 C 语言那样去使用 for 语法。Python 的 for 更像脚本语言的 foreach。
for i in 5:
	print('I love FishC')

在这里插入图片描述

i = 0
string = 'ILoveFishC.com'
while i < len(string):
    print(i)
    i += 1
#因为每次循环都需要调用一次 len() 函数,所以上述代码效率比较低
#提升效率,改进上述代码段
i = 0
string = 'ILoveFishC.com'
lenth = len(string)
while i < lenth :
    print(i)
    i += 1

动手练习:

  1. 设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内
#我的代码
secret = (input('请输入密码:'))
answer = '西瓜'
count = 3
for i in range(3):
#count作为计数,用来提醒用户,i用来控制循环,一定要注意边界,for i in range(3)的范围是i是从0到2
    if secret == answer :
        count -= 1 #如果不加这条语句,当第三次输入正确答案时,count的值为1,它会打印while循环外的'3次输入结束,拒绝输入'这句话
        print('密码正确')
        break

    if count == 1 and secret != answer:  
        print('3次输入结束,拒绝输入')
        break

    else:
        count -= 1
        s = '密码错误,你还有' + str(count) + '次机会'
        print(s)
        secret = (input('请重新输入密码:'))

心得体会:
测试了好久,主要是i控制的循环,还有count控制的提示语句总是不对,最后的这个版本才对,但对于——用户输入的内容中包含"*"则不计算在内,这个条件并没有满足

运行结果:
运行结果

#小甲鱼的代码
count = 3
password = 'FishC.com'
while count:
    passwd = input('请输入密码:')
    if passwd == password:
        print('密码正确,进入程序......')
        break
    elif '*' in passwd:
        print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
        continue
    else:
        print('密码输入错误!您还有', count-1, '次机会!', end=' ')
    count -= 1

运行结果:
在这里插入图片描述

#我的代码(修改版本),注意elif的用法
secret = (input('请输入密码:'))
answer = '西瓜'
count = 3
while count:
    if secret == answer :
        print('密码正确')
        break

    elif '*' in secret:
        print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
        continue
    
    elif count-1 == 0:
        print('3次输入结束,拒绝输入')
        break

    else:
        s = '密码错误,你还有' + str(count-1) + '次机会'
        print(s)
        secret = (input('请重新输入密码:'))
    count -= 1

心得体会:
(1)之前用的是for控制循环,现在用的是while控制循环,
(2)之前count仅作为提示使用,根据小甲鱼版本进行改进,将count作为控制条件
(3)print语句进行了改进,之前输出用了两条语句:

        s = '密码错误,你还有' + str(count-1) + '次机会'
        print(s)

现在只用了一条语句

运行结果:
改进版

  1. 编写一个程序,求 100~999 之间的所有水仙花数。
    注:如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
#我的代码
t = 101
while(t<=999 and t>100):
    i = t // 100  			#百位数
    j = (t // 10) % 10		#十位数
    k = t % 10				#个位数
    if t == i ** 3 + j ** 3 +k ** 3:
        print (t)
    t += 1


#小甲鱼代码
for i in range(100,1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp % 10) ** 3
        temp //= 10
    if sum == i:
        print(i)

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

#小甲鱼代码(自己没想出来,有想到用range函数,但是不会用)
print('red\tyellow\tgreen')
for red in range(0,4):
    for yellow in range(0,4):
        for green in range (0,7):
            if red + yellow + green == 8 :
                print(red,'\t',yellow,'\t',green)

三色球

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Max_J999

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值