杨桃的Python进阶讲座7——条件判断

本人CSDN博客专栏:https://blog.csdn.net/yty_7

Github地址:https://github.com/yot777/

本部分内容在基础教程第6章:Python控制结构(一)if语句已讲过,现在我们再深入讨论一下这个if语句。

7.1 是否判断

最简单的判断结果只有“是”、“否”两种。比如:北京是中国的首都,其他任何都不是中国的首都。

那么在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("假")

运行结果:
真
假
真

7.2 枚举判断

有时候我们的判断条件不仅仅只有“是”或“否”。比如一个老太太在每天晚上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语句中,这是一种常见的处理方式。

7.3 条件与和或

小时候我们都听过爸爸妈妈说这样的话:如果你这次考试考了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),顺序是由内向外判断每一层的结果,再以此结果判断下一层的结果。

7.4 大小判断和多重判断

比较两个数的大小,有>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、==(等于)、!=(不等于)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 <module>
    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!

发布了55 篇原创文章 · 获赞 16 · 访问量 6111

猜你喜欢

转载自blog.csdn.net/yty_7/article/details/104365245