流程图是什么:请跟着箭头指示往下走,程序就像走流程一样完成工作。
言归正传:咱们先看下python语言中条件判断 if 是什么?
If语句共有三个知识点:
if...
if...else...
if...elif...else...
一、if 【如果】的逻辑:
我们以《西游记》中,唐僧师徒在女儿国的遭遇为例来讲解。但是为了学习python编程,会适当地改编一下剧情。
话说唐三藏师徒一行人来到西梁女儿国,本想照验通关文牒,早日放行,谁知女儿国国王对唐僧一见倾心。
可是女王毕竟不是寻常人家的女子,她也有自己的为难之处。
这天午后,她一会游荡在御花园里,一会呆坐在宫殿里,纠结着贵为一国之君的自己,和已斩断红尘的出家人唐僧到底是否合适。
在思考了大半天之后,她自言自语道:上天啊,我也很纠结,要不你来帮我决定吧。如果今晚下雨了,那就说明我和唐三藏合适,可以在一起。
此种情况,在Python中,可以这样表述:
1 weather = input('请回答:今晚下雨or没下雨')
2 if weather == '下雨':
3 print('我和唐僧可以在一起。')
请问,你发现了么,当输入“下雨”时,程序会给出“我和唐僧可以在一起”的回复;但如果输入“不下雨”,程序什么也不会出现。因为这不满足下一行代码的要求!
所以我们需要重新审视下if语句的使用逻辑:
if ...(条件):
...(做点儿什么)
...(做点儿什么)...
(if语句的外部命令)
if 后面跟的是一个条件。当条件为真时,就执行内部缩进的命令(做点儿什么);如果条件为假,不管,跳过if,去执行if语句的外部命令。
用流程图理解即为:
二、if...else 的【如果-否则】的逻辑:
回到女王的故事上面来。女王自己设定的是,如果晚上下雨,那么就表示,上天觉得女王可以和唐僧在一起。
你猜晚上下雨了吗?(⊙v⊙)嗯,下雨了。好,下一步,女王决定表白。
可是到了第二天早上,女王开始纠结新的东西——表白的结果。
唐僧如果答应了表白,当然好,自己愿意和他马上成婚;但是如果唐僧没有答应的话,是不是可以采取一些武力的手段呢?毕竟唐僧所处的行政区域正是自己管辖的领土,大唐的皇帝也管不到这么远。
这个逻辑如果体现在Python中,是这样的:
1 answer = input('唐僧接受了表白吗?请回答有or没有?')
2 if answer == '有':
3 print('很好,马上举行婚礼,全国放假')
4 else:
5 print('把唐僧软禁起来,从长计议')
(else代表否则如果)
所以 if...else...的使用逻辑也出来了。
1 if...(条件):
2 ...(做点儿什么)
3 ...(做点儿什么)
4 else:
5 ...(干点儿别的)
6 ...(干点儿别的)
if 后面跟的是一个条件,当条件为真时,执行 if 下面的(做点儿什么)命令,当条件为假时,跳到else: ,然后开始执行else: 下面的命令
放在流程图中:
三、if...elif...else... 的【如果1-如果2-否则】的逻辑:
照理说,女王该向唐三藏表白了。不过,毕竟是女王,习惯了身边有参谋,她又把自己的想法跟国师讲了下。
国师看女王这些天的状态,知道她一时为情所困,并不理性。唐僧取经,是奉王命行事,不论是成婚还是软禁唐僧,都涉及到大唐的政治关系,是一件外交上的麻烦事;而且国师私下也找唐僧谈过,了解他们师徒四人之前历经过种种艰难险阻,其心甚坚,是绝不肯为女王留下来的。
国师心里虽然清楚,但又不好直接告诉女王,于是她是这样对女王说的:“陛下,你这样做打算,考虑得不周全。”“噢,此话怎讲?”女王问。
“您只考虑了唐僧的两种反应:接受您的心意,和拒绝您的心意,却没有考虑到其他情况?”国师说。“那难道还有第三种情况?”女王问。
“臣以为有,万一唐长老心中对您有意,但取经也不可不进行,这算是接受还是拒绝呢?又万一唐长老一直沉默,不回答您,既不拒绝,也不接受,这又算什么呢?”国师说。女王问:“嗯,那国师以为如何是好?”女王说。“您可以再设置一种情况,其他类型的反应——容后再议。”
这样,女王心中,就有了三种应对策略。
1 a = input('''唐僧的反应是什么?
2 1.明确接受
3 2.明确拒绝
5 3.其他反应
5 请输入数字 ''')
6 if a == '1':
7 print('成婚')
8 elif a == '2':
9 print('软禁')
10 else:
11 print('容后再议')
再来审视一下elif的使用逻辑:
1 if...(条件1):
2 ...(做点儿什么)
3 elif...(条件2):
4 ...(做点儿其他的)
5 elif...(条件3):
6 ...(做点儿其他的)
7 else(其他):
8 ...(干点儿别的)
if后面跟的是一个条件,当此条件为真时,执行if下面的(做点儿什么)命令,然后结束条件判断;当条件为假时,跳到elif。
elif后面跟的是另一个条件,当此条件为真时,执行elif下面(做点儿其他的)命令,然后结束条件判断;当此条件为假时,跳到第二个elif:
elif后面跟的又是一个条件,当此条件为真时,执行elif下面(做点儿其他的)命令,然后结束条件判断;当此条件为假时,跳到else那里,去执行else下的命令。
流程图如此表示: