这是关于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])
这就解决问题了,蛮方便的,代码量相比于上一种解法少了很多,还实现了相应的功能。