打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
课程详情页
欢迎回来!请和我一起全屏吧~windows:请按F11(或Fn+F11);mac:请同时按control+command+F。
在上一关,小象君带你完成了奶茶馆自助结算系统的计算功能,你已经可以使用Python为顾客计算消费金额了。
期间我们攻克了与Python沟通的语言大关:字符串、整数和浮点数。
但是,对于学习Python来讲,光掌握正确的沟通语言还不够,还需要正确的沟通逻辑,这样才能让Python准确地执行你的命令。
也就是:在什么情况下,做什么,或者说,如果满足什么样的条件,就做什么。
比如在小象奶茶馆自助结算系统中,我们售卖1-5五种编号的奶茶,之后的服务和计算也基于这5种奶茶;如果奶茶编号被赋值为除了这5个编号之外的数字,那之后的服务也就无意义了。
所以,这个逻辑就是:
类似这样“如果…就…”的逻辑,就是与计算机沟通的逻辑:条件判断,它的作用是明确地让计算机知道:在什么条件下,该去做什么。
今天我们的目标就是优化自助结算系统,让它更加完善、智能。
我们将实现:
我们从条件判断语句开始。
条件判断
条件判断语句总共有三种表现形式,我们先从最简单的单向判断if说起:
单向判断:if
if翻译为中文是如果的意思,如果顾客是小象奶茶馆的会员,就可以享受会员价。
用代码来“翻译”上面的逻辑,我们可以用条件判断语句中的单项判断if来表述。直接运行下面这段代码,看看结果。
关 3-1 if初探
1
2
3
4
5
6
7
8
if_vip = 'y'
# 定义if_vip变量,记录顾客是否为会员,'y':yes的缩写,表示是会员
if if_vip == 'y':
#条件:如果顾客是会员
print('您是本店会员,可以享受会员价')
#结果:显示‘您是本店会员,可以享受会员价’的结果
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
您是本店会员,可以享受会员价
运行成功
这段代码是如何实现的呢?
第一步,我们用赋值运算符=对if_vip变量进行赋值:’y’表示yes的意思,if_vip = 'y'表示顾客是会员。
第二步,确定if条件。
if_vip变量可以赋值为任意值,如果if_vip的值正好是'y',就执行冒号后面,也就是下一行的命令。
如何判断if_vip的值正好是'y'呢?我们使用两个等号==来判断左右两边是否相等,相等则满足判断条件,执行下方的操作。
如果==左边是字符串,就判断两边的字符是否完全一样;如果==左边是数字,就判断两边的值是否相等。
小象君考你一下,'1'==1满足条件吗?
A
满足
B
不满足
回答错误,你选择的是A,正确答案是【B】。==左边是字符串'1',右边是数字1,不完全相同,不满足相等的条件
双等号==如果有点陌生的话,小象君show两个类似的符号你就get了:>=和<=,大于等于号和小于等于号,分别用于判断左边的值是否大于等于或者小于等于右边的值。比如:1>=2不满足条件,1<=2满足条件。1==2是不是也有感觉了些呢?1不等于2,所以不满足条件。
第三步,用print()打印出结果:您是本店会员,可以享受会员价。
所以,if语句的单向判断逻辑,我们可以这样归纳:
在这里,你可能注意到了一个细节:第二行内容的前面,会空几个格,这是为什么呢?
首先,在计算机的沟通语言中,空格的学名叫缩进,类似于我们写文章每个段落前的空格(首行缩进)。
对于Python而言,缩进是一种语法。它会帮助Python区分代码之间的层次,理解条件执行的逻辑及先后顺序。
并且,在if条件中,缩进不需要我们手动按空格键。当你输入英文冒号:后按回车,下一行代码就会自动向右缩进。
此时,被缩进的内容print( )和if条件语句组成了一个代码块(一个整体),成为了if条件的内部命令。
这意味着:如果if后面的条件成立,计算机就会准确执行if条件内部的命令。
通俗点讲,我们可以把if当作一个黑社会大哥,冒号后的内容都是他的小弟,当老大if提出一个条件时,他组织下的小弟就会自动执行任务。
那么下面,请你运行这段代码,看看运行结果是什么。(请不要更改代码,直接点击运行键,当终端出现红色报错提醒后,点击跳过本题)
关3-1 if缩进错误
1
2
3
4
5
6
7
if_vip = 'y'
# 定义if_vip变量,记录顾客是否为会员,'y':yes的缩写,表示是会员
if if_vip == 'y':
#条件:如果顾客是会员
print('您是本店会员,可以享受会员价')
#结果:显示‘您是本店会员,可以享受会员价’的结果
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
File "/sshhome/xxxy-122184248/course_1/pro
gram.py", line 6
print('您是本店会员,可以享受会员价')
^
IndentationError: expected an indented block
运行失败
喔呦,是不是报错了?这里的报错表示的意思是:缩进错误:期望有一个缩进。
这是因为,当我们去掉缩进时,if条件和print()成为了两个不同的代码块,属于平行关系。print小弟自立为王了,他自然就不会执行if老大的命令了。if老大没小弟,所以报错了。
所以,我们总结一下单向判断:if的代码逻辑及语法格式:
在刚刚的判断语句中,if_vip = 'y',顾客是会员,如果到店的顾客不是会员,if_vip是其它值时,会返回什么样的结果呢?
比如我们给if_vip赋值为'n',n代表no,不是会员。请将下面的代码复制到代码编辑区中,并在if条件不变的情况下,修改第一行的赋值语句,点击运行,看看会出现什么结果。
if_vip = 'y'  # 定义if_vip变量,记录顾客是否为会员,'y':yes的缩写,表示是会员if if_vip == 'y':    #条件:如果顾客是会员    print('您是本店会员,可以享受会员价')    #结果:显示‘您是本店会员,可以享受会员价’的结果
请注意:1.符号要在英文输入法下输入;2.检查条件判断语句下是否缩进;3.只要显示运行通过,就请点击回车键继续课程。
关 3-1 if练习
1
print
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
运行成功
这时,你可能会在心里犯嘀咕:纳尼?别提结果,为什么连个报错都没有呢?
别急,在这个操作下,终端里不显示结果就是正常的。小象君来解释一下这是怎么回事儿。
小象君曾说过,计算机是一行行往下执行代码的。所以,当变量的赋值不满足if条件时,Python的逻辑就会判断:条件不满足,无法执行if条件下的命令,从而自动跳过整个if代码框。
但是,在上面的代码中,除了if之外,我们并没有设置其他的命令让Python执行。因此,Python自然就无法输出结果。
也就是说,由于if_vip没有定义为'y',不满足if的条件,if条件下的打印命令就无法生效,顾客自然没有办法享受会员价。
很多时候,我们不能把鸡蛋放在同一个篮子里,要做好两手准备:如果不满足条件时,我们要怎么办。
作为一枚人性化的自助结算系统,如果顾客不是vip用户时,我们希望输出一句话提醒一下顾客,在Python中要如何实现呢?
双向判断:if…else…
我们可以利用if的双向判断形式:if…else…去实现不同情况下的不同操作。
下面,请你直接运行下面的代码,看看Python是如何识别的:
关 3-1 if-else初探
1
2
3
4
5
6
7
8
9
if_vip = 'n'
# 定义if_vip变量,记录顾客是否为会员,'n':no的缩写,表示不是会员
if if_vip == 'y':
#条件:如果顾客是会员
print('您是本店会员,可以享受会员价')
#结果:显示‘您是本店会员,可以享受会员价’的结果
else:
#条件:当赋值不满足if条件时,执行else下的命令
print('不好意思哦,您目前还不是我们的会员,\n本次无法享受会员价喽,永远爱你么么哒!')
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
不好意思哦,您目前还不是我们的会员,
本次无法享受会员价喽,永远爱你么么哒!
运行成功
Python则很贴心地,让我们使用if…else…语句,有了另一种选择如果满足…就…,不满足,就…
还记得我们在讲单向判断if条件时,小象君曾说过if条件下的内容,点击回车键都会自动缩进吗?
else也在if条件下,在上一行点回车它也会自动缩进,这个时候,你就需要将else前面的空格删掉,使else也是顶格写,和if成为平级关系。
当else条件顶格写时,if条件和else条件是平级的,它们各自抱团,形成两个不同的代码块。
我们用流程图来表示一下上面代码的逻辑:
由于赋值if_vip = 'n' ,并不满足if_vip == 'y':这个条件,所以不能执行print('您是本店会员,可以享受会员价')的命令。
只能走第二条else:的路,执行 print('不好意思哦,您目前还不是我们的会员,\n本次无法享受会员价喽,永远爱你么么哒!')的命令。
所以,if...else正确运行的语句逻辑是:(1)if和else两个条件是平级关系;(2)当if条件不被满足时,才会轮到执行else下的命令。
最后,我们来总结一下if…else…语句的语法结构:
在刚刚的判断条件中,如果我们给if_vip赋值为'y',输出您是会员可以享受会员价的信息;如果if_vip赋值为'n',输出您还不是我们的会员。
那么,如果if_vip被赋值为其他值,比如'do not know',看起来返回哪个结果也不太合适,这个时候就需要输出一条其它的信息。
这三个如果在Python中要如何实现呢?
多向判断:if…elif…else…
首先,我们需要先来梳理一下逻辑。
代码中需要添加三个如果:如果if_vip的值为'y',如果if_vip的值为'n',如果if_vip为其它值。并产生3个对应的执行结果。
那么,在判断3个或3个以上的条件时,我们就需要借助Python中的多向判断命令:if…elif…else…。
这三者共同构成了多向判断的命令逻辑关系:如果if条件不满足,就按顺序看看是否满足elif的条件,如果还不满足,就执行else的命令。
并且,当判断的条件超过3个时,中间的多个条件都可以使用elif,如下图。
那么,这个代码要怎么写呢?我们还是在代码中来感受一下elif的逻辑,直接点击运行就好:
关 3-1 体验if-elif-else
1
2
3
4
5
6
7
8
9
10
if_vip = 'n'
# 定义if_vip变量,记录顾客是否为会员,'n':no的缩写,表示不是会员
if if_vip == 'y':
#条件:如果顾客输入正确,是会员
print('您是本店会员,可以享受会员价')
#结果:显示‘您是本店会员,可以享受会员价’的结果
elif if_vip == 'n':
#条件:如果顾客输入正确,不是会员
print('不好意思哦,您目前还不是我们的会员,\n本次无法享受会员价喽,永远爱你么么哒!')
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
不好意思哦,您目前还不是我们的会员,
本次无法享受会员价喽,永远爱你么么哒!
运行成功
通过上面if和else的积累,多向判断elif的逻辑是不是很好理解?
在上面的代码里,Python会对if_vip = 'n'下面的if、elif、else条件逐个扫描,看看满足哪一个,就执行哪个条件下面的命令。
很显然,第二个条件if_vip == 'n'刚好能与if_vip = 'n'相匹配,于是,执行elif下面的命令:print('不好意思哦,您目前还不是我们的会员,\n本次无法享受会员价喽,永远爱你么么哒!')。
下面,请你练习一下,试着不要看刚才的代码,参考下面的提示,自己来重写一遍,通过修改if_vip的赋值语句,让输出结果变为'我还是个小宝宝,您的输入我看不懂,您拿着小票问问小象君吧!'
提示:
为if_vip变量赋值(可为任意字符串)
条件1:if_vip 的值为'y',输出'您是本店会员,可以享受会员价';
条件2:if_vip 的值为'n',输出'不好意思哦,您目前还不是我们的会员,\n本次无法享受会员价喽,永远爱你么么哒!';
条件3:如果是其它情况,输出'我还是个小宝宝,您的输入我看不懂,您拿着小票问问小象君吧!'
步骤有了,下面,请你来识别会员:
关 3-1 多向判断练习
1
print
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
运行成功
下面来看看小象君的答案:
if_vip = 'haha'  # 定义if_vip变量,记录顾客是否为会员,这里除了定义为'y'、'n'都是正确的if if_vip == 'y':    #条件:如果顾客输入正确,是会员    print('您是本店会员,可以享受会员价')    #结果:显示‘您是本店会员,可以享受会员价’的结果elif if_vip == 'n':    #条件:如果顾客输入正确,不是会员    print('不好意思哦,您目前还不是我们的会员,\n本次无法享受会员价喽,永远爱你么么哒!')else:    #条件:当赋值不满足if条件时,执行else下的命令    print('我还是个小宝宝,您的输入我看不懂,您拿着小票问问小象君吧!')
让我们简单总结一下Python逻辑判断的语法。
上面我们完成了会员和非会员顾客购买时的个性化输出。现在我们来根据奶茶的编号输出奶茶的单价。
小象奶茶馆售卖的奶茶有以下几种,单价也各不相同:
1号奶茶:3元,
2号奶茶:5元,
3号奶茶:5元,
4号奶茶:7元,
5号奶茶:7元,
如果顾客购买的奶茶是1号,就输出单价:3元;如果购买2号奶茶,就输出单价:5元;以此类推…
请在下面代码框里用if...elif...else...把奶茶单价判断语句写出来。
要点提示:
将奶茶编号变量milktea_num赋值为一个整数(比如2);
开始判断,if奶茶编号为1,奶茶单价变量price就赋值为3(整数),并打印;elif奶茶编号为2,奶茶单价变量price就赋值为5,并打印……,else 奶茶编号非这5个数字中的其中一个时,输出:奶茶编号有误;
判断两个值是否相等,用==;
if和else语句后需跟英文冒号:;
关 3-1 根据奶茶编号输出奶茶单价-练习
1
print
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
运行成功
来看看小象君的代码:
关 3-1 根据奶茶编号定义奶茶单价-答案
1
2
3
4
5
6
7
8
9
milktea_num = 2
if milktea_num == 1:
price = 3
print(price)
elif milktea_num == 2:
price = 5
print(price)
elif milktea_num == 3:
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
5
运行成功
刚才你用if...elif...else...写出了一个完整的条件判断语句。这样在售奶茶的单价就预设好了,顾客点餐的时候,只要设置购买的奶茶编号和数量,就可以直接识别奶茶单价,进入计算的步骤。
追求效率(懒)的小象君又上线了,有没有发现,2号和3号奶茶单价相同,4号和5号奶单价也相同。有没有办法让这两组奶茶合在一起定价少写几行代码呢?
条条大路通罗马,我们可以这样优化:
关 3-1 根据奶茶编号定义奶茶单价-优化
1
2
3
4
5
6
7
8
9
milktea_num = 2
if milktea_num == 1:
price = 3
print(price)
elif milktea_num == 2 or milktea_num == 3:
price = 5
print(price)
elif milktea_num == 4 or milktea_num == 5:
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
5
运行成功
这里冒出一个新的用法:or,我们用or链接了两个并列的条件,表示两边任意一个条件满足的时候就执行下面的操作。
上面的代码运行过程是这样的:奶茶编号定义为2,进入判断语句,首先不满足if中奶茶编号等于1的条件,从而自动跳过,执行下一行命令。下一行的条件是,奶茶编号是否为2或者3,恰好定义的是2号奶茶,满足条件,执行内部的命令。
类似的用法还有and和not。
不同的是,用and连接的两个条件必须都满足时,才可以执行条件内部的命令。not用于判断与条件相反的情况,满足相反的条件时才可以执行命令。
小象君写了三组判断语句,请你点击运行,探究一下and、or、not的用法。
关 3-1 and、or和not用法初探
1
2
3
4
5
6
7
8
9
a = 3
# and的用法
if a >= 1 and a <= 2:
# 数字a大于等于1且小于等于2
print('小可爱a满足条件^_^')
else:
print('哦呜,小可爱a不满足条件o(╥﹏╥)o')
# or的用法
if a >= 1 or a <= 2:
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
哦呜,小可爱a不满足条件o(╥﹏╥)o
小可爱a满足条件^_^
哦呜,小可爱a不满足条件o(╥﹏╥)o
运行成功
总结一下,
and两边的条件都满足时,才可以执行判断语句内部的操作
or两边的条件至少有一条满足,就可以执行判断语句内部的操作
not满足条件的相反情况,可以执行判断语句内部的操作
回到奶茶馆来,刚刚我们用一段代码预设了不同奶茶编号对应的单价。
milktea_num = 2if milktea_num == 1:    price = 3    print(price)elif milktea_num == 2 or milktea_num == 3:    price = 5    print(price)elif milktea_num == 4 or milktea_num == 5:    price = 7    print(price)else:    print('奶茶编号输入错误')
当编号为1、2、3、4、5时分别对应不同的单价,如果编号不是这5个数字中的其中一个,就会返回:奶茶编号输入错误。
小象君曾说过,Python执行代码是自上而下一行一行执行的。如果milktea_num定义为一个错误的奶茶编号,在上面的代码中,Python就会一行一行地执行判断语句,直到else才能发现奶茶编号有误。
那么,我们可不可以先保证奶茶编号满足要求之后再操作呢?当奶茶编号不满足要求时,直接输出提示信息并结束点单,也可以使代码效率更高。
我们将会完成这样的逻辑:
如果奶茶编号为1-5中的整数:
(1) 如果为1号奶茶,单价为3
(2) 如果为2或3号奶茶,单价为5
(3) 如果为4或5号奶茶,单价为7
如果奶茶编号非1-5中的整数:
输出:奶茶编号输入错误
像这种如果底下还有如果、条件里还套着条件的情况,我们要如何用Python写出来,并得出相应奶茶编号的单价呢?
答案就是,我们需要用到嵌套:
if嵌套
if嵌套的应用场景,简单来讲就是:在基础条件满足的情况下,再在基础条件里面增加额外的条件判断。
就像上面的基础条件是: 如果奶茶编号为1、2、3、4、5中的一个。满足条件时,再根据奶茶编号做判断,从而给奶茶单价变量赋值。
看起来有点复杂,别担心,跟着小象君,我们一层一层来搞定。
第一步就是:搞定最外层的结构,将最基础的代码和条件写出来。
那么,我们的思考逻辑应该是这样:
把奶茶编号整数赋值到变量milktea_num;
用if…else写最基础的判断条件:如果milktea_num <= 5 并且milktea_num >= 1时,打印’奶茶编号输入正确‘,否则,打印’Woops!我们只售卖以上五种奶茶哦!新口味敬请期待!‘;
用print()输出点单程序结束。
一起动起来,请你根据上面的提示自己写一遍代码,并点击运行。看看在奶茶编号赋值为5的情况下,第一层条件判断的代码会出现怎样的结果:
关 3-3 if嵌套第一步-练习
1
import pprint; pprint.pprint()
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
Traceback (most recent call last):
File "/sshhome/xxxy-122184248/course_1/pro
gram.py", line 1, in <module>
import pprint; pprint.pprint()
TypeError: pprint() missing 1 required posit
ional argument: 'object'
运行失败
运行通过了吗?正确的话,你应该会看到终端显示奶茶编号输入正确、程序结束。老师的答案是这样子的:
milktea_num = 5if milktea_num <= 5 and milktea_num >= 1:    print('奶茶编号输入正确')else:    print('Woops!我们只售卖以上五种奶茶哦!新口味敬请期待!')print('点单程序结束')
第二步,在最外层的框架里装东西。也就是在条件milktea_num <= 5 and milktea_num >= 1下,增加额外条件。
其中,
额外条件1:当奶茶编号为1时,显示奶茶单价为:3;
额外条件2:当奶茶编号为2或3时,显示奶茶单价为5;
额外条件3:当奶茶编号为4或5时,显示奶茶单价为7;
下面,请你先看一眼正确的代码,并注意小象君如何安排额外的条件。
milktea_num = 5if milktea_num <= 5 and milktea_num >= 1:    print('奶茶编号输入正确')    if milktea_num == 1:        price = 3        print('奶茶单价为:{}'.format(price))    elif milktea_num == 2 or milktea_num == 3:        price = 5        print('奶茶单价为:{}'.format(price))    else:        price = 7        print('奶茶单价为:{}'.format(price))else:    print('Woops!我们只售卖以上五种奶茶哦!新口味敬请期待!')print('点单程序结束')
到你了,请同步把上面那段代码写一遍,如果能够做到不看上面的答案,独立写出来是最好的。要点提示:请注意额外条件的缩进格式。
关 3-3 if嵌套第二步-练习
1
print
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
Traceback (most recent call last):
File "/sshhome/xxxy-122184248/course_1/pro
gram.py", line 1, in <module>
import pprint; pprint.pprint()
TypeError: pprint() missing 1 required posit
ional argument: 'object'
运行失败
怎么样,顺利码出来了吗?如果你能成功运行出奶茶编号输入正确、奶茶单价为:7、点单程序结束,证明你已经初步掌握嵌套代码的写法啦。
我们再来看看这段代码的运行逻辑。
首先,我们先从整体总览一下。
这段代码总共分为四部分(分别是赋值、if、else、print()),两个大代码组。根据缩进看,这四个部分都是平级关系。
并且,在if和else的代码组里面,又包含了条件判断命令if...else...。这正是嵌套在实际代码中的使用方式。
那么,这种嵌套命令我们要如何理解呢?这就需要你回想一下,小象君曾教给你的4个知识点:1.缩进;2.冒号:后的从属关系;3.命令按顺序执行;4.if和else条件的互斥。
首先,我们曾学过,缩进相同的平级命令都是老大,都是有头有脸的人物,谁都不能怠慢。所以,第一步,计算机就要按顺序一条一条地跟老大们“打招呼”(按顺序执行命令)。
那么,计算机执行的顺序就是:
接受赋值大哥的赋值;
因为if大哥和else大哥只能留一个,所以计算机要根据赋值,判断赋值的内容是满足if大哥还是else大哥的条件。
如果满足if大哥的条件,就执行if大哥的命令,如果不满足就执行else大哥的命令;第三步,执行print大哥的固定命令。
经过判断,我们知道了,奶茶编号要找if大哥。
所以我们的运行顺序是,先输出奶茶编号输入正确,然后再判断奶茶编号的赋值满足if、elif、else中的哪个的条件,从而输出相应的结果。
好了,本关的知识点就到此为止了,小象君带你回顾一下今天学习到的内容。
本关内容回顾
今天我们学习了条件判断语句。条件判断语句总共有三种表现形式,单向判断if、双向判断if…else…、多向判断if…elif…else…。
单向判断if的逻辑是:如果满足…就…,需要注意冒号之后下一行的代码需要有缩进。
双向判断if…else…的逻辑是:如果满足…就…不满足就…,注意else和if是平级的。
多向判断if…elif…else…的逻辑是:如果满足条件1…就…满足条件2…就…满足条件3…就…都不满足就…,注意elif、else和if是平级的,但是else语句不是必须的。
除此之外,如果底下还有如果、条件里还套着条件,就需要使用if嵌套。
这就是我们今天学习的主要内容,接下来又到你闪亮登场的时候了!
小象奶茶馆_店铺升级
今天我们的目标是实现以下点单过程:
① 奶茶编号milktea_num 、奶茶数量milktea_quantity 、是否为会员if_vip ,并分别赋值为:4、2、'y'
② 格式化输出:'您购买的是{}号奶茶,共购买{}杯,总计{}元'
③ 格式化输出:'您可以享受会员价,折后总价:{}元'
④ 输出:'不好意思哦,您目前还不是我们的会员,\n本次无法享受会员价喽,永远爱你么么哒!'
⑤ 输出:'我还是个小宝宝,您的输入我看不懂,您拿着小票问问小象君吧!'
奶茶馆的欢迎标语与结语打印代码,小象君又帮你写在这里了,你可以直接复制使用。
print('****************************************')print('欢迎光临小象奶茶馆!\n小象奶茶馆售卖宇宙无敌奶茶!\n奶茶虽好,可不要贪杯哦!\n每次限尝鲜一种口味:\n1. 原味冰奶茶 3元 \n2. 香蕉冰奶茶 5元 \n3. 草莓冰奶茶 5元  \n4. 蒟蒻冰奶茶 7元  \n5. 珍珠冰奶茶 7元 ')print('****************************************')print('****************************************')print('做一枚有态度、有思想的奶茶馆(傲娇脸)!\n\t祝您今日购物愉快!\n\t\t诚挚欢迎您再次光临!')print('****************************************')
关 3-5 小象奶茶馆V_3版本-练习
1
print
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
运行成功
来看一下小象君的代码和你的一样吗?
print('****************************************')print('欢迎光临小象奶茶馆!\n小象奶茶馆售卖宇宙无敌奶茶!\n奶茶虽好,可不要贪杯哦!\n每次限尝鲜一种口味:\n1. 原味冰奶茶 3元 \n2. 香蕉冰奶茶 5元 \n3. 草莓冰奶茶 5元  \n4. 蒟蒻冰奶茶 7元  \n5. 珍珠冰奶茶 7元 ')print('****************************************')milktea_num = 4milktea_quantity = 2if_vip = "y"if milktea_num <= 5 and milktea_num >= 1:    if milktea_num == 1:        price = 3    elif milktea_num == 2 or milktea_num == 3:        price = 5    elif milktea_num == 4 or milktea_num == 5:        price = 7    money = price * milktea_quantity    print('您购买的是{}号奶茶,共购买{}杯,总计{}元'.format(milktea_num, milktea_quantity, money))    if if_vip == 'y':        money *= 0.9        print('您可以享受会员价,折后总价:{}元'.format(money))    elif if_vip == 'n':        print('不好意思哦,您目前还不是我们的会员,\n本次无法享受会员价喽,永远爱你么么哒!')    else:        print('我还是个小宝宝,您的输入我看不懂,您拿着小票问问小象君吧!')else:        print('Woops!我们只售卖以上五种奶茶哦!新口味敬请期待!')print('****************************************')print('做一枚有态度、有思想的奶茶馆(傲娇脸)!\n\t祝您今日购物愉快!\n\t\t诚挚欢迎您再次光临!')print('****************************************')
在这个版本中我们完成了一个新的迭代,通过预置一些初始信息,让系统更加的自动化、人性化,帮助小象君减少了很多手动的工作,一步一步解放生产力。
本关内容就到此为止了,你掌握了与计算机沟通的逻辑,下一关我们将学习互动沟通。
敲黑板!!!正儿八经的通知: 恭喜你通过本关!下一关即将解锁,别忘了课后练习哦,小象君和你下关再会!
还差最后一步啦:
1、你对本关内容的满意度:
非常满意
满意
一般
不满意
很不满意
2、你是否掌握了本关知识呢,给自己打一个分吧~
0
1
2
3
4
5
6
7
8
9
10
给自己打分
3、本关内容学会了嘛~如果觉得哪里讲解不好,快来吐槽一下吧~(选填)
提交
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【Python 第23课】 if, elif, else
Python选择语句是什么?
Python基础语法——代码规范&判断语句&循环语句
Python3 条件控制 | 菜鸟教程
Python教程:Python的条件语句
7段代码带你玩转Python条件语句
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服