Python之流程控制语句经典例题(1)

这是关于Python的一些经典例题,结合着本人在学习和理解的过程,以及老师讲解的例题,便整理了一下,并将这些题目逐一进行解答。如有错误或者是更好的方法可以提出来,作为一种完善和提高。

例题

1.编写程序实现输入成绩,判断是否通过考试。
2.编写程序实现根据考试成绩将成绩分为A,B,C,D四档。


一、解析

这两个题目说明的是大致是同一个问题,即成绩分档次的问题

具体一点:对于第一题来说,通过输入成绩,以60分为界判断是否通过考试。(在中国,大部分情况下60分算为及格线)这里会出现两种情况,通过(分数大于等于60)或者是不通过(小于60分)。

对于第二题来说,通过输入成绩,判断成绩的具体档次
例如100-90为A档
例如89-80为B档
例如79-70为C档
例如69-60为D档
例如59-0为E档(不及格)

但是,都不能忽视的一点是:分数的范围在[0,100]这个区间,否则成绩是错误的成绩。

二、详解

1.第一题

解法:

score = int(input("请输入你的成绩:"))
i = 3								 #计数器
while i:							
    if(score < 0 or score > 100):    #第一个if
        i -= 1
        print("成绩输入有误!,你的输入次数还剩%d次"%i)
        if(i == 0):                  #第二个if
            print("请重新查询!")
            break
        else:                        #第二个if对应的else
            score = int(input("请输入你的成绩:"))
    else:                            #第一个if对应的else
        if(score < 60):              #第三个if
            print("你没有通过考试!")
            break
        else:                        #第三个if对应的else
            print("你顺利通过考试!")
            break					 
    #每一个if或者else语句块一定要有break,否则会无限循环下去
    #因为这些if..else语句块在while里面,稍不注意就进入死循环

这一种解法是考虑比较周全的一种解法,既考虑了输入成绩范围的正确性,也结合实际,考虑了输错次数过多将无法继续输入的情况。

首先,利用input()函数,获取键盘上输入的成绩,赋值给score
接着设置一个计数器,令i = 3,即表明有三次输入的机会
利用Python的流程控制语句while和if…else的嵌套使用,实现第一题所要实现的功能,具体流程如下:

假如第一次,我输入101:
第一个if进行判断 ----> 判断101>100 ----> 进入if循环 ----> i-1=2 ---->打印还剩两次机会 ----> 第二个if进行判断 ----> 判断i != 0 ---->进入第二个if对应的的else语句块 ----> 再次输入成绩
假如第二次,我输入-1:
第一个if进行判断 ----> 判断-1<100 ----> 进入if循环 ----> i-1=1 ---->打印还剩一次机会 ----> 第二个if进行判断 ----> 判断i != 0 ---->进入第二个if对应的else语句块 ----> 再次输入成绩
假如第三次,我输入90:
第一个if进行判断 ----> 判断90<100 ----> 进入第一个if对应的else语句块 ----> 再次进入if…else语句块 ----> 第三个if进行判断 ----> 判断score > 60 ---->进入第三个if对应的else语句块 ----> 打印顺利通过考试

演示过程如下

请输入你的成绩:101
成绩输入有误!,你的输入次数还剩2次
请输入你的成绩:-1
成绩输入有误!,你的输入次数还剩1次
请输入你的成绩:90
你顺利通过考试!

拓展一下,三次全输错的情况:

请输入你的成绩:200
成绩输入有误!,你的输入次数还剩2次
请输入你的成绩:200
成绩输入有误!,你的输入次数还剩1次
请输入你的成绩:200
成绩输入有误!,你的输入次数还剩0次
请重新查询!

2.第二题

第一种解法:

score = int(input("请输入你的成绩:"))
i = 3
while i:
    if(score <0 or score>100):   #第一个if
        i-=1
        print("成绩输入有误,您还剩%d次机会"%i)
        if(i == 0):              #第二个if
            print("请重新查询!")
            break
        else:                    #第二个if对应的else
            score = int(input("请输入你的成绩:"))
    else:                        #第一个if对应的else
        if(score < 60):
            print("你本次成绩不及格!")
            break
        elif(score >= 60 and score < 70):
            print("你顺利通过考试!等级为D")
            break
        elif(score >= 70 and score < 80):
            print("你顺利通过考试!等级为C")
            break
        elif(score >= 80 and score < 90):
            print("你顺利通过考试!等级为B")
            break
        else:
            print("你顺利通过考试!等级为A")
            break

和上一题很类似,只不过是在第一个if对应的else语句块那做了一些变动,看懂第一题的,第二题也能看懂吧

这个题只在第二个if对应的else语句块做了变动,利用了if…elif…else的控制语句,去对应不同分数段所对应的等级情况,if…elif…else确实会好想一些,理解起来相对容易些。利用and语句实现分数区间的控制(and:且)。

但是,有些复杂,所以才有了第二种解法。

第二种解法:(其实是老师讲的)

score = int(input("请输入你的考试成绩:"))
degree = ["D级","C级","B级","A级","A级","E级"]

while score not in range(0,101):
    print(("成绩输入有误,正确区间为0--100"))
    score = int(input("请输入你的考试成绩:"))
else:
    index = (score-60)//10
    if index >= 0:
        print(degree[index])
    else:
        print(degree[-1])

这里实现的很巧妙,好好讲一下,这个印象太深了。

这个解法利用了列表(List),range()函数等知识点
range() 函数语法如下:

range(start, stop[, step])
#start为计数开始点,stop为计数结束点(但不包括stop)
#step为可选参数,为步长

所以range(0,101)指从0开始到100
故while score not in range(0,101):这个语句更简单的实现了判断分数段范围。

分数在分数段内时,执行else语句块,index一般指的是下标(想到下标你应该知道List吧),那么巧妙之处来了。

1、假如我考了92分,92-60=32,32整除10,向下取整,得3
2、假如我考了100分,100-60=40,40整除10,向下取整,得4

看到这些结果后,再看一下这个语句

degree = ["D级","C级","B级","A级","A级","E级"]
 #正序下标  0     1     2     3     4     5
 #倒序下标 -6    -5    -4    -3    -2    -1

这时应该会恍然大悟吧,对于1,2情况,在列表中对应的正序下标索引就是等级。

有人会想,不及格怎么办,万一这样想,我考了39,39-60=-21,-21//10=-2,那倒序下标对应的是A级啊,这不对呀!

不慌,所以咱里面再有一个if…else语句块

else:
    index = (score-60)//10
    if index >= 0:  #对应60分及以上
        print(degree[index])
    else:           #对应不及格的情况,无论是多少分,都是degree[-1]对应的E级
        print(degree[-1])
        

这就解决问题了,蛮方便的,代码量相比于上一种解法少了很多,还实现了相应的功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值