<From Zero to Hero>零基础学习Python基础语法【条件判断与条件嵌套】
目录
条件判断
单向判断:if
双向判断:if…else…
多向判断:if…elif…else…
if嵌套
if嵌套的执行顺序
如何写嵌套代码
小练习1
小练习2
对于Python来讲,需要正确的【沟通逻辑】才能让Python准确地执行你的命令。
比方说,我想让天猫精灵在感知到我开门的一瞬间,打开客厅的灯。如果我只说:天猫精灵,打开灯。那么,由于缺少开门的前提条件,无论你开不开门,灯都会打开着。
所以,我们下的命令应该是这样:天猫精灵,如果我开门,你就打开客厅的灯。
而这个下命令的如果…就…逻辑,就是与计算机沟通的逻辑——条件判断,其作用就是明确地让计算机知道:在什么条件下,该去做什么。
对于Python也是同样。Python之所以能完成自动化任务,比如自动抓取网页关键词,自动下载小电影等,就是因为它可以执行条件判断。
import timeprint('如果你想拥有无限的力量和能量,那必须夺得力量宝石')time.sleep(2)print('如果你想扭曲时空和任意地传送,那必须夺得空间宝石')time.sleep(2)print('如果你想任意地修改现实,无视任何宇宙规律,那必须夺得现实宝石')time.sleep(2)print('如果你想到达任何一个时间点,无论是古老的年代还是遥远的未来,那必须夺得时间宝石')time.sleep(2)print('如果你想控制生者和死者的灵魂,那必须夺得灵魂宝石')time.sleep(2)print('如果你想拥有不朽的精神力量并操控任何人的思维,那必须夺得心灵宝石')time.sleep(2)print('那么,如果让你来选择的话,你想要获得哪颗宝石呢?')time.sleep(2)print('请在以下六个选项【1 力量宝石 ;2 空间宝石;3 现实宝石 ;4 时间宝石;5 灵魂宝石 ;6 心灵宝石;】中,选择你最想获得的宝石吧!')time.sleep(3)answer=input('请将对应数字输入在冒号后: ')if answer=='1':print('我告诉你哦,力量宝石保存在山达尔星的新星军团的总部基地')time.sleep(3)elif answer=='2':print('空间宝石在洛基手里')time.sleep(3)elif answer=='3':print('雷击已将现实宝石交给收藏家保管')time.sleep(3)elif answer=='4':print('奇异博士愿意用时间宝石换取钢铁侠的性命')time.sleep(3)elif answer=='5':print('必须献祭自己心爱的人才能得到灵魂宝石')time.sleep(3)else:print('幻视头上的心灵宝石被绯红女巫摧毁,但可用时间宝石复原')time.sleep(3)
如果你想拥有无限的力量和能量,那必须夺得力量宝石
如果你想扭曲时空和任意地传送,那必须夺得空间宝石
如果你想任意地修改现实,无视任何宇宙规律,那必须夺得现实宝石
如果你想到达任何一个时间点,无论是古老的年代还是遥远的未来,那必须夺得时间宝石
如果你想控制生者和死者的灵魂,那必须夺得灵魂宝石
如果你想拥有不朽的精神力量并操控任何人的思维,那必须夺得心灵宝石
那么,如果让你来选择的话,你想要获得哪颗宝石呢?
请在以下六个选项【1 力量宝石 ;2 空间宝石;3 现实宝石 ;4 时间宝石;5 灵魂宝石 ;6 心灵宝石;】中,选择你最想获得的宝石吧!
请将对应数字输入在冒号后: 4
奇异博士愿意用时间宝石换取钢铁侠的性命
亲爱的夺宝骑兵,你看到没?这就是条件判断如果…就…逻辑产生的魔法。那么,这个条件判断的代码,要怎么码呢?
条件判断
在Python宇宙,条件判断语句总共有三种表现形式,先从最简单的单向判断:if开始说起:
单向判断:if
单向判断:if代表什么呢?相传上面的六颗宝石是宇宙中最强大的东西。如果一个人同时拥有六颗宝石,ta就可以实现包括毁灭宇宙在内的所有事情。
你发现,上面的故事中,有一个如果……就。那么,如果我们要用代码来“翻译”这段话,就可以用条件判断语句中的单项判断:if来表述。
# 为宝石数量赋值
stonenumber=6# 条件:如果你拥有的宝石数量大于等于6个
if stonenumber>=6:# 结果:显示‘你拥有了毁灭宇宙的力量’的结果print('你拥有了毁灭宇宙的力量')
你拥有了毁灭宇宙的力量
那么,这段代码是如何实现的呢?
首先,第一行代码,用赋值运算符=对当前情况进行赋值:将你拥有的宝石个数6赋值给变量——宝石数stonenumber。
第二步,确定if条件:如果变量stonenumber的值>=个数6时,就执行冒号后,下一行的命令。
第三步,用print()命令打印出结果:你拥有了毁灭宇宙的力量。所以,if语句的单向判断逻辑,我们可以这样归纳:
在这里,你可能注意到了一个细节:在条件判断代码中的冒号:后、下一行内容的前面,会空几个格,但这是为什么呢?
首先,在计算机的沟通语言中,空格的学名叫缩进,比如我们写文章都要空两个格,这就叫首行缩进。
对于Python而言,冒号和缩进是一种语法。它会帮助Python区分代码之间的层次,理解条件执行的逻辑及先后顺序。【注:缩进是四个空格或一个Tab键】
并且,在if条件语言中,缩进不需要我们手动按空格键。当你用英文输入法打:后按回车,我们的开发工具(用来编写Python代码的程序)为了方便大家编程,会自动实现下一行代码,向右缩进的功能。
此时,被缩进的内容(print()函数)和if条件语句组成了一个代码块(一个整体),成为了if条件下的内部命令。
这意味着:如果赋值满足if条件,计算机就会准确执行if条件内部的命令(即缩进的代码块)。
以下是错误的代码,运行之后会报错:
# 赋值语句:为宝石数量赋值
stonenumber=6# 条件:如果你拥有的宝石数量大于等于6个
if stonenumber>=6:# 结果:显示‘你拥有了毁灭宇宙的力量’的结果
print('你拥有了毁灭宇宙的力量')
IndentationError: expected an indented block
这是因为,当我们去掉缩进时,if条件和print命令成为了两个不同的代码组,属于平行关系。你看:if条件下面,缺少了可以执行的动作。我们想一下:无论条件成不成立,都不会执行什么操作,这个条件的存在没有任何意义。
# 为宝石数量赋值
stonenumber=2# 条件:如果你拥有的宝石数量大于等于6个
if stonenumber>=6:# 结果:显示‘你拥有了毁灭宇宙的力量’的结果print('你拥有了毁灭宇宙的力量')
这时,你可能会在心里犯嘀咕:为什么连个报错都没有呢?那么,我来解释一下这是怎么回事。
首先,第一行的赋值语句【stonenumber=2】是后面if条件判断语句的前提情况,然而并不满足『stonenumber>=6』这个条件,所以不会执行条件下的『print』操作。
计算机是一行行往下执行代码的。所以,当第一行赋值情况的前提不满足if的条件时,Python的逻辑就会判断:条件不满足,无法执行if条件下的命令,从而自动跳过,执行下一行命令。
但是,在上方代码中,除了if之外,我们并没有设置其他的命令去让Python执行。因此,Python自然就无法输出结果。
也就是说,由于宝石数量只有2,没有满足6颗宝石的if条件,if条件下的打印命令就无法生效,自然没办法获得摧毁宇宙的力量。
而作为最强反派,灭霸当然不会就此善罢甘休。他要继续寻找宝石,直到集齐6颗,达到他的目的。
那么,这个如果6颗宝石的条件没满足,就做其他事情——寻找宝石的判断,在Python中要如何实现呢?
双向判断:if…else…
在Python宇宙,我们可以利用if的双向判断形式:if…else…去实现这个行动。
# 赋值语句:为宝石数量赋值
stonenumber=3# 条件:如果你拥有的宝石数量大于等于6个
if stonenumber>=6:# 结果:显示‘你拥有了毁灭宇宙的力量’的结果print('你拥有了毁灭宇宙的力量')# 条件:当赋值不满足if条件时,执行else下的命令
else:# 结果:显示‘去找灵魂宝石’的结果print('带着卡魔拉去沃弥尔星寻找灵魂宝石')
带着卡魔拉去沃弥尔星寻找灵魂宝石
很多时候,我们不能把鸡蛋放在一个篮子里,要做好两手准备:如果不满足条件时,我们要怎么办。
Python则很贴心地,让我们借用if…else…语句,让码农们有了另一种选择——【如果…不满足,就…】
在if...else条件语句中,if和else各自抱团,形成两个不同的代码块。表示的是条件和其他条件的互斥关系——如果不满足if条件,就执行else其他条件。
如果用我们上面宝石的例子讲解的话,if定义的就是宝石数>=6,而else定义的则是宝石数<6。
而由于赋值【stonenumber=3】,并不满足【if stonenumber>=6:】这个条件,所以不能执行【print('你拥有了毁灭宇宙的力量')】的命令。
只能走第二条else:的路——执行print('带着卡魔拉去沃弥尔星寻找宝石')的结果。
weight=101if weight>100:print('不吃宵夜')else:print('放心吃宵夜')
不吃宵夜
多向判断:if…elif…else…
在判断3个或3个以上的条件时,我们就需要借助Python中的多向判断命令:if…elif…else…。
这三者共同构成了多向判断的命令逻辑关系:如果if的条件不满足,就按顺序看是否满足elif的条件,如果不满足elif的条件,就执行else的命令。
并且,当判断的条件超过3个时,中间的多个条件都可以使用elif。
# 为宝石数量赋值
stonenumber=5# 条件:如果你拥有的宝石数量大于等于6个
if stonenumber>=6:# 结果:显示‘就拥有了毁灭宇宙的力量’的结果print('你拥有了毁灭宇宙的力量')# 条件:如果想让宝石数量停留在5个以下,至少一个
elif 0<stonenumber<=5:# 结果:显示‘绯红女巫需要亲手毁掉幻视额头上的心灵宝石’的结果print('绯红女巫需要亲手毁掉幻视额头上的心灵宝石')# 条件:当赋值不满足if和elif条件时,执行else下的命令,宝石数量为0个
else:# 结果:显示‘需要惊奇队长逆转未来’的结果print('需要惊奇队长逆转未来')
绯红女巫需要亲手毁掉幻视额头上的心灵宝石
通过上面if和else的积累,多向判断elif的逻辑是不是很好理解?
首先,第一行的赋值,会按照从上到下的顺序挨个试一遍,看自己满足哪个条件,满足了就不往下走,不满足就继续试,试到出结果为止。
其次,elif的运行本质上和else一样,已经带有其他条件的意思,所以elif后可以不接else。
比如上面的代码,stonenumber=5会对下面的if elif else条件逐个扫描,看看自己满足哪一个,就执行哪个条件底下的命令。
很显然,第二个条件elif 0<stonenumber<=5刚好能与stonenumber=5的前提相匹配,于是,执行elif底下的命令:print('绯红女巫需要亲手毁掉幻视额头上的心灵宝石')**。
总结一下elif的知识点:
if嵌套
来看一组规则:
像这种如果底下还有如果(即条件里还套条件)的情况,我们如何用Python把上面的规则写出来,并得出评价呢?
答案就是——嵌套条件。
if嵌套的应用场景,简单来讲就是:在基础条件满足的情况下,再在基础条件底下增加额外的条件判断。
就像上面的基础条件是60分及格,想要判断优秀和一般还要增加额外条件——是否大于等于80;在小于60分不及格基础条件下,想要判断学渣和可抢救还要增加额外条件——是否大于等于30。
因此,成绩评价规则,用if嵌套可以像下方代码这样:
historyscore=26if historyscore>=60:print('你已经及格')if historyscore>=80:print('你很优秀')else:print('你只是一般般')else:print('不及格')if historyscore<30:print('学渣')else:print('还能抢救一下')print('程序结束')
不及格
学渣
程序结束
居然出现了三个扎心的结果……那么,在Python中,我们如何同时得出不及格、学渣、程序结束这三个结果的呢?
if嵌套的执行顺序
先从整体总览一下,这段成绩评价规则的代码,总共分为四部分【赋值、if、else、print()】,两个大代码组。
并且,在代码组1的if条件和代码组2的else的条件下,又包含了条件判断命令if...else...。
那么,这种嵌套命令我们要如何理解呢?
缩进相同的命令处于同一个等级,第一步,计算机就要按顺序一条一条地执行命令。
那么,计算机执行的顺序就是:(1)先给historyscore赋值;
(2)因为if和else是只能留一个的互斥关系,if和else下的代码块只会执行一个,所以计算机要判断赋值的内容满足【historyscore>=60】还是【historyscore<60】的条件——如果满足if的条件,就执行if缩进下的内容,如果不满足就执行else缩进下的内容;
(3)执行print('程序结束')。
所以,我们的运行顺序是,先输出的结果不及格,然后再判断历史成绩26分的赋值符合历史成绩<60分且<30分还是历史成绩<60分且>=30分的条件。
如何写嵌套代码
if嵌套由于涉及多个条件判断,并且是条件套条件的判断,所以为了理清逻辑,我们可采用扒洋葱大法写if嵌套。
用成绩举例,第一步就要搞定最外层那张皮,将最基础的命令和条件写出来。
那么,我们的思考逻辑应该是这样(1)把26分的历成绩赋给变量historyscore;(2)用if…else写最基础判断条件如果historyscore>=60时,打印你已经及格,否则,打印不及格;(3)用print()输出程序结束。
在成绩为26分的赋值情况下,只套了一层“条件判断”皮的代码,会出现怎样的结果:
historyscore=26
#赋值语句:为历史成绩赋值if historyscore>=60:#条件:当历史成绩大于等于60时:print('你已经及格')else:#条件:当历史成绩小于60时print('不及格')#结果:输出不及格的结果print('程序结束')
#打印最终结果
不及格
程序结束
第二步,在“第一层皮”里装东西。也就是在条件【historyscore>=60】下,增加额外条件。
其中,额外条件1:当历史成绩大于等于80分,显示结果你很优秀;额外条件2:当历史成绩在60到80分之间,显示结果:你只是一般般。
historyscore=26
#赋值语句:为历史成绩赋值if historyscore>=60:#条件:当历史成绩大于等于60时print('你已经及格')#结果:输入及格的结果if historyscore>=80:#条件:当历史成绩大于等于60,且历史成绩大于等于80print('你很优秀')#结果:输出你很优秀的结果else:#条件:当历史成绩大于等于60,且小于80时print('你只是一般般')#结果:输出你只是一般般的结果else:#条件:当历史成绩小于60时print('不及格')#结果:输出不及格的结果print('程序结束')
#打印最终结果
不及格
程序结束
最后一步,你要为另一个大条件else增加额外条件了!
historyscore=26if historyscore>=60:if historyscore>=80:print('你很优秀')else:print('你只是一般般')elif historyscore<60:if historyscore<30:print('学渣')else:print('还能抢救一下')print('程序结束')
学渣
程序结束
总结一下整节课的知识点:
小练习1
题目要求:
请你写出一段代码,在一颗宝石都没偷回来的赋值下,进行条件判断,并产生对应的结果:
1.如果偷回的宝石数是4颗及以上,输出结果获得了打败灭霸的力量,反杀稳了
2.如果偷回的宝石数是1-3颗,输出结果可以全员出动,殊死一搏
3.如果偷回的宝石数是0颗,输出结果没办法了,只能尝试呼叫惊奇队长
题目讲解:
1.赋值:因为他们一个宝石都没偷回来,为偷来的宝石stonenumber
赋值为0。
2.用if
写第一个条件:如果偷回的宝石数是4颗及以上,输出结果:获得了打败灭霸的力量,反杀稳了
3.用elif
写第二个条件:如果偷回的宝石数是1-3颗,输出结果:可以全员出动,殊死一搏
4.用else
写第三个条件:如果偷回的宝石数是0颗,输出结果:没办法了,只能尝试呼叫惊奇队长
书写代码:
stonenumber=0if stonenumber>=4:print('获得了打败灭霸的力量,反杀稳了')elif 0<stonenumber<4:print('可以全员出动,殊死一搏')else:print('没办法了,只能尝试呼叫惊奇队长')
没办法了,只能尝试呼叫惊奇队长
小练习2
题目要求:
复仇者联盟的成员也是有工资的,然而,由于美国队长一直被冰封在北极,错过了多次调薪机会,所以美国队长的工资一直是每月80美元。光荣挺进史塔克穷人榜前三名,并获封“美元队长”称号。
请你写出一段代码,判断美国队长的工资水平,代码需要满足如下条件:
1.如果月工资小于等于500美元,显示“欢迎进入史塔克穷人帮前三名”
1.1如果月工资在100-500美元之间,显示“请找弗瑞队长加薪”
1.2如果月工资小于等于100美元,显示“恭喜您荣获“美元队长”称号!”
2.如果月工资在500-1000美元之间(含1000美元),打印“祝贺您至少可以温饱了。”
3.其他情况下,如果工资大于1000美元,打印“经济危机都难不倒您!”
3.1如果工资在1000-20000美元(含20000美元)之间,打印“您快比钢铁侠有钱了!”
3.2如果月工资大于20000美元,打印“您是不是来自于瓦坎达国?”
4.不管赋值改变后输出结果如何,都需固定打印结果“程序结束”
步骤讲解:
1.根据if条件嵌套分析,最基础的条件有三个:条件1工资小于等于500美元;条件2工资在500-1000美元之间(含1000美元);条件3工资大于1000美元。
2.基础条件1的额外条件有两个:1工资在100-500美元之间;2工资小于等于100美元
3.基础条件2无额外条件
4.基础条件3的额外条件有两个:1工资在1000-20000美元(含20000美元)之间;2工资大于20000美元
5.输出固定结果程序结束
书写代码:
import timesalary=80if salary<=500:print('欢迎进入史塔克穷人帮前三名')time.sleep(1)if 100<salary<=500:print('请找弗瑞队长加薪')if salary<=100:print('恭喜您荣获“美元队长”称号!')elif 500<salary<=1000:print('祝贺您至少可以温饱了。')else:print('经济危机都难不倒您!')time.sleep(1)if 1000<salary<=20000:print('您快比钢铁侠有钱了!')if salary>20000:print('您是不是来自于瓦坎达国?')time.sleep(1)
print('程序结束')
欢迎进入史塔克穷人帮前三名
恭喜您荣获“美元队长”称号!
程序结束
<From Zero to Hero>零基础学习Python基础语法【条件判断与条件嵌套】相关推荐
- python语言的单行注释以井号开头_推荐|零基础学习Python基础知识
原标题:推荐|零基础学习Python基础知识 Python是一种面向对象.解释型计算机程序设计语言.语法简洁清晰,强制用空白符作为语句缩进. Python具有丰富和强大的库,又被称为胶水语言.能把其他 ...
- python编程入门免费_python编程入门 零基础学习Python基础(附带最新免费教程)...
本篇是面向编程零基础学员的Python入门教程,内容涵盖了Python的基础知识和初步应用.以较轻快的风格,向零基础学习者介绍了一门时下比较流行的.并且用途比较广泛的编程语言.同时,其语法简洁而清晰, ...
- 自学python编程免费教程-python编程入门 零基础学习Python基础(附带最新免费教程)...
本篇是面向编程零基础学员的Python入门教程,内容涵盖了Python的基础知识和初步应用.以较轻快的风格,向零基础学习者介绍了一门时下比较流行的.并且用途比较广泛的编程语言.同时,其语法简洁而清晰, ...
- python语法基础学习-Python基础语法精心总结!看完都知道的可以往下继续学习了...
原标题:Python基础语法精心总结!看完都知道的可以往下继续学习了 这应该是最详细的Python入门基础语法总结! 定义变量,使用变量 1. input 用户自己输入值 2. print 打印值 可 ...
- 0基础学习Python基础语法(0)-print()与变量
文章目录 Python[人工智能]时代的立身武器 print 无引号 单引号的用法 双引号的用法 三引号的用法 转义字符 变量和赋值 变量的命名规范 下关预告 Demo 例子:打印 例子:转义字符 要 ...
- 0基础学好python难不难_零基础学习Python难不难?Python有什么优势?
原标题:零基础学习Python难不难?Python有什么优势? Python是一种计算机程序设计语言.首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个 ...
- 零基础学python多久可以工作-零基础学习python,要多久才可以学好并且找到工作?...
原标题:零基础学习python,要多久才可以学好并且找到工作? 零基础的你想学习python肯定很关注学习python的最短时间是多久,怎样才能快速学习python等问题,今天就为大家详细地回答一下这 ...
- 零基础学python需要多久-零基础学习Python大概要多久,感悟分享?
在互联网时代编程无处不在,它存在于我们生活和工作之中,可以说哪里有通讯,哪里有互联网就一定会有编程.由于Python软件比较简便,因而Python已经成为,编程人员乐于选择的一款软件,这款软件的语言比 ...
- 零基础学python需要多久-零基础学习Python开发需要多长时间?
原标题:零基础学习Python开发需要多长时间? Python开发技术目前可谓是互联网行业编程界的新宠,不少零基础想要进入IT行业的人员都纷纷加入学习Python开发.零基础学习Python开发技术需 ...
最新文章
- maven中打包项目为war包的pom.xml配置
- spring boot2 整合(一)Mybatis (特别完整!)
- clusense VS2008版本
- php常量数组吗,包含数组的PHP常量?
- paragon+ntfs+linux,NTFS For Mac 超强兼容性
- 以房养老骗局高发,背后套路何在?
- html简单实现下拉菜单
- 【语音编辑】基于matlab语音编辑【含Matlab源码 539期】
- 迈高图手机版_迈高图地图下载
- matlab三维网格绘图函数mesh、meshc、mesh、zmeshgrid、surf【matlab图行绘制五】
- Stata: 正则表达式和文本分析
- Windows实现微信双(多)开—微信分身
- ESD防护选型思路(一)
- 【Leetcode】232.用栈实现队列
- Chapter17: Artificial Intelligenc-Enabled De Novo Design of Novel Compounds that Are Synthesizable
- PyQt5 QLabel标签
- 使用C语言编写三子棋小游戏
- iOS Core Bluetooth_4 用作中央设备的常用方法(2/2)[swift实现]
- 试用MarkDown标记法和Haroopad编辑器
- 数据结构 第一节 第一课