【易错点】python新手容易搞不懂的知识点(4):分支和循环

1、assert 的作用是什么?

assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常。程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert关键字就非常有用了。

2、三元操作符

请将以下代码修改为三元操作符实现:

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 and x < z) else (y if y < z else z)

3、打飞机小游戏的设计框架

加载背景音乐
播放背景音乐(设置单曲循环)
我方飞机诞生
interval = 0

while True:
    if 用户是否点击了关闭按钮:
        退出程序
    
    interval += 1
    if interval == 50:
        interval = 0
        小飞机诞生

    小飞机移动一个位置
    屏幕刷新
    
    if 用户鼠标产生移动:
        我方飞机中心位置 = 用户鼠标位置
        屏幕刷新
        
    if 我方飞机与小飞机发生肢体冲突:
        我方挂,播放撞机音乐
        修改我方飞机图案
        打印“Game over”
        停止背景音乐,最好淡出

4、回顾一下 break 和 continue 在循环中起到的作用?

break语句的作用是终止当前循环,跳出循环体。
continue语句的作用是终止本轮循环并开始下一轮循环。

 

5、设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内。

我的答案:



password = '3344'
pw = input('请输入密码:')
i = 3

while i > 0:
    if pw == password:
        print('密码正确,进入程序……')
        break
    else:
        if '*' in pw:
            pw = input('密码中不能含有“*”号!您还有%d次机会!请输入密码:' % i)
        else:
            pw = input('密码错误!您还有%d次机会!请输入密码:' % i)
            i-=1

遇到几个问题:

1)break没有打,结果输入正确时又死循环

2)password是字符串,接收的密码应该也是字符串,不需要变成int

参考答案:


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

改进思考:

1)while判断,遇到0就会判False,所以不需要再加i>0.这个条件

2)如果有‘*’,次数不减少,但是应该等于i次

最后的答案:

password = '3344'
pw = input('请输入密码:')
i = 3

while i :
    if pw == password:
        print('密码正确,进入程序……')
        break
    else:
        if '*' in pw:
            pw = input('密码中不能含有“*”号!您还有%d次机会!请输入密码:' % i)
        else:
            i-=1
            pw = input('密码错误!您还有%d次机会!请输入密码:' % i)

6、编写一个程序,求 100~999 之间的所有水仙花数。

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。

我的答案:

for i in range(100,1000):
    sum = (i//100)**3+(i//10-i//100*10)**3+(i-i//10*10)**3
    if sum == i:
        print(i)

难点主要在于这个算式怎么表达。。。

参考答案:

for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
        print(i)

参考答案用的是循环的方式去给出这个算式,就是看上去会比较晕。。。

7、三色球问题

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

print('red\tyellow\tgreen')
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, '\t', yellow, '\t', green)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值