本人CSDN博客专栏:https://blog.csdn.net/yty_7
Github地址:https://github.com/yot777/
本部分内容在基础教程第6章:Python控制结构(一)if语句已讲过,现在我们再深入讨论一下这个if语句。
最简单的判断结果只有“是”、“否”两种。比如:北京是中国的首都,其他任何都不是中国的首都。
那么在Python编程中,我们用一个if-else就可以。
#是否判断
city = input("Please input:")
if city == "北京":
print(city+"是中国的首都")
else:
print(city+"不是中国的首都")
运行结果:
Please input:北京
北京是中国的首都
Please input:上海
上海不是中国的首都
需要指出的是,Python的if语句只有在冒号前面的条件True的时候才执行,如果不是判断语句,强制把冒号前面的变量指定为True也可以,例如:
#if的True条件:
s = True
t = False
if s:
print("真")
else:
print("假")
if t:
print("真")
else:
print("假")
if not t:
print("真")
else:
print("假")
运行结果:
真
假
真
有时候我们的判断条件不仅仅只有“是”或“否”。比如一个老太太在每天晚上20:00都准时收看某电视台的节目,如下表:
日期 | 电视节目 |
星期一 | 节目A |
星期二 | 节目B |
星期三 | 节目C |
星期四 | 节目D |
星期五 | 节目E |
星期六 | 节目F |
星期日 | 节目G |
从表中我们可知,星期一20:00老太太看的是节目A,那么不是星期一看的是什么节目呢?我们不能用简单的“是”或“否”了。
Python为我们提供了if-elif-else来表示这种枚举判断,代码如下:
s = input("请输入今天是星期几[只能输入1到7之间的数字]:")
if s == '1':
print("今晚是节目A")
elif s == '2':
print("今晚是节目B")
elif s == '3':
print("今晚是节目C")
elif s == '4':
print("今晚是节目D")
elif s == '5':
print("今晚是节目E")
elif s == '6':
print("今晚是节目F")
elif s == '7':
print("今晚是节目G")
else:
print("输入错误!")
运行结果:
请输入今天是星期几[只能输入1到7之间的数字]:3
今晚是节目C
请输入今天是星期几[只能输入1到7之间的数字]:7
今晚是节目G
请输入今天是星期几[只能输入1到7之间的数字]:a
输入错误!
从代码可见,我们把7种正常情况放到了if-elif语句中,把异常语句放到了else语句中,这是一种常见的处理方式。
小时候我们都听过爸爸妈妈说这样的话:如果你这次考试考了90分,星期天天气又好的话,我就带你去游乐场玩。你恰巧是个学霸,考上90分易如反掌,心想哈哈,星期天又可以去玩了!但是天公不作美,星期天下大雨,计划泡汤了……
现在我们用if语句来写这种情况:
#条件与
s = int(input("考试成绩是[请输入0到100的整数]:"))
t = input("星期天天气是[只能输入好或者不好]:")
if s >= 90 and t == "好":
print("去游乐场玩!")
else:
print("不能去游乐场玩!")
运行结果:
考试成绩是[请输入0到100的数字]:92
星期天天气是[只能输入好或者不好]:好
去游乐场玩!
考试成绩是[请输入0到100的整数]:88
星期天天气是[只能输入好或者不好]:好
不能去游乐场玩!
考试成绩是[请输入0到100的整数]:93
星期天天气是[只能输入好或者不好]:不好
不能去游乐场玩!
考试成绩是[请输入0到100的整数]:82
星期天天气是[只能输入好或者不好]:不好
不能去游乐场玩!
可见只有成绩大于等于90分和天气好两个条件同时满足的情况下,才能执行if后面的语句,只要一个条件不满足,执行的都是else的语句。这就是逻辑条件符And的作用。A and B两个条件必须同时为真,才能返回真,否则都返回假。
如果你爸爸妈妈心情好,这么说:只要你考了90分,或者星期天天气好,我们去室内游乐场玩吧!现在的if语句变成了:
#条件或
s = int(input("考试成绩是[请输入0到100的整数]:"))
t = input("星期天天气是[只能输入好或者不好]:")
if s >= 90 or t == "好":
print("去室内游乐场玩!")
else:
print("不能去室内游乐场玩!")
运行结果:
考试成绩是[请输入0到100的整数]:92
星期天天气是[只能输入好或者不好]:好
去室内游乐场玩!
考试成绩是[请输入0到100的整数]:87
星期天天气是[只能输入好或者不好]:好
去室内游乐场玩!
考试成绩是[请输入0到100的整数]:93
星期天天气是[只能输入好或者不好]:不好
去室内游乐场玩!
考试成绩是[请输入0到100的整数]:85
星期天天气是[只能输入好或者不好]:不好
不能去室内游乐场玩!
可见只有成绩大于等于90分和天气好两个条件只要满足一个的情况下,就执行if后面的语句,只有当两个条件都不满足的情况下,才执行else语句。这就是逻辑条件符Or的作用。A or B两个条件只要有一个为真,就返回真。
逻辑条件符可嵌套使用,例如(A and B) or (C and D),顺序是由内向外判断每一层的结果,再以此结果判断下一层的结果。
比较两个数的大小,有>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、==(等于)、!=(不等于)6种情况,我们可以继续使用if-elif-else来表示这些情况。为啥要在input()函数前面加float,以及在print里在score前面要加str,请参考上一节的讲解。
#大小判断举例1
score = float(input("Please input:"))
if score > 60:
print("考试成绩是:"+str(score)+"分,及格")
elif score == 60:
print("考试成绩是:"+str(score)+"分,刚好及格")
else:
print("考试成绩是:"+str(score)+"分,不及格")
运行结果:
Please input:85.5
考试成绩是:85.5分,及格
Please input:60
考试成绩是:60.0分,刚好及格
Please input:58.5
考试成绩是:58.5分,不及格
但其实这样的程序逻辑是不严谨的,Please input:的输入提示符之后可以输入任何字符。
如果输入了一个字符a,程序怎么处理呢?
Please input:a
Traceback (most recent call last):
File "a.py", line 1, in
score = float(input("Please input:"))
ValueError: could not convert string to float: 'a'
我们看到,程序报错了,因为不能把字符a转换为浮点类型的数字。大家可能已经想到要加else判断,但这个比7.2的例子要复杂。我们要做以下分析:
第1步,我们要确保输入的是数字;
第2步,数字必须在0到100之间,这种情况下我们才能使用大小判断举例1的的程序
对于第一步我们进一步分解:
1.1 如果输入的字符全部是0-9的数字,就是合法的数字
1.2 如果输入的字符包含小数点,那么小数点仅有1个的才可能是数字
去掉小数点之后再来判断,又分为两种情况:
1.2.1如果第一个字符是负号,从第二个字符开始全部是0-9的数字,才是合法的数字
1.2.2如果第一个字符不是负号,全部字符都是0-9的数字,才是合法的数字
对于第一步的判断条件写成代码如下:
#判断输入的是否是数字
s = input("Please input:")
#取输入的小数点个数
dot = s.count('.')
#如果没有小数点或者只有1个小数点
if dot == 0 or dot == 1:
#即去掉小数点
new_s = s.replace('.','')
#如果第一个字符不是负号
if new_s[0] != '-':
#去掉小数点之后的字符全部是0-9的数字,才是合法数字
if new_s.isdigit():
print(s+"是合法数字!")
else:
print(s+"不是合法数字!")
#如果第一个字符是负号
else:
#从第二个字符开始的字符全部是0-9的数字,才是合法数字
if new_s[1:].isdigit():
print(s+"是合法数字!")
else:
print(s+"不是合法数字!")
#如果小数点多于1个,不是合法数字
else:
print(s+"不是合法数字!")
运行结果:
Please input:96
96是合法数字!
Please input:0.33
0.33是合法数字!
Please input:0.33.333
0.33.333不是合法数字!
Please input:-5.26
-5.26是合法数字!
Please input:as87j
as87j不是合法数字!
Please input:9.rt
9.rt不是合法数字!
为什么要大费周折做这么多个判断语句呢,就是为了最大限度的过滤掉用户的错误输入,避免由Python直接抛出异常。
然后我们再在合法数字的情况下再加上是否及格的判断语句,完整代码如下:
#学生考试成绩分类
s = input("Please input:")
#取输入的小数点个数
dot = s.count('.')
#如果没有小数点或者只有1个小数点
if dot == 0 or dot == 1:
#即去掉小数点
new_s = s.replace('.','')
#如果第一个字符不是负号
if new_s[0] != '-':
#去掉小数点之后的字符全部是0-9的数字,才是合法数字
if new_s.isdigit():
print(s+"是合法数字!")
if float(s) >= 60 and float(s) <= 100:
print("考试成绩是:"+str(s)+"分,及格")
elif float(s) < 60 and float(s) >= 0:
print("考试成绩是:"+str(s)+"分,不及格")
else:
print("但是"+s+"不是合法成绩!")
else:
print(s+"不是合法数字!")
#如果第一个字符是负号
else:
#从第二个字符开始的字符全部是0-9的数字,才是合法数字
if new_s[1:].isdigit():
print(s+"是合法数字!")
if float(s) >= 60 and float(s) <= 100:
print("考试成绩是:"+str(s)+"分,及格")
elif float(s) < 60 and float(s) >= 0:
print("考试成绩是:"+str(s)+"分,不及格")
else:
print("但是"+s+"不是合法成绩!")
else:
print(s+"不是合法数字!")
#如果小数点多于1个,不是合法数字
else:
print(s+"不是合法数字!")
运行结果:
Please input:120
120是合法数字!
但是120不是合法成绩!
Please input:96
96是合法数字!
考试成绩是:96分,及格
Please input:56.7
56.7是合法数字!
考试成绩是:56.7分,不及格
Please input:0.0
0.0是合法数字!
考试成绩是:0.0分,不及格
Please input:-3.2
-3.2是合法数字!
但是-3.2不是合法成绩!
Please input:60
60是合法数字!
考试成绩是:60分,及格
if-else是是否判断。
if-elif-else是枚举判断。
A and B两个条件必须同时为真,才能返回真;A or B两个条件只要有一个为真,就返回真。
在进行数字比较的时候,要注意比较的值是否合法,需要用多重判断来去掉非法值。
本人CSDN博客专栏:https://blog.csdn.net/yty_7
Github地址:https://github.com/yot777/
如果您觉得本篇本章对您有所帮助,欢迎关注、评论、点赞!Github欢迎您的Follow、Star!