分享

课程详情页

 昵称1pWJU 2020-10-10
欢迎回来!请和我一起全屏吧~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:
#ifelse
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)ifelse两个条件是平级关系;(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
  运行成功

通过上面ifelse的积累,多向判断elif的逻辑是不是很好理解?

在上面的代码里,Python会对if_vip = 'n'下面的ifelifelse条件逐个扫描,看看满足哪一个,就执行哪个条件下面的命令。

很显然,第二个条件if_vip == 'n'刚好能与if_vip = 'n'相匹配,于是,执行elif下面的命令:print('不好意思哦,您目前还不是我们的会员,\n本次无法享受会员价喽,永远爱你么么哒!')

下面,请你练习一下,试着不要看刚才的代码,参考下面的提示,自己来重写一遍,通过修改if_vip的赋值语句,让输出结果变为'我还是个小宝宝,您的输入我看不懂,您拿着小票问问小象君吧!'

提示:

  1. if_vip变量赋值(可为任意字符串)

  2. 条件1:if_vip 的值为'y',输出'您是本店会员,可以享受会员价'

  3. 条件2:if_vip 的值为'n',输出'不好意思哦,您目前还不是我们的会员,\n本次无法享受会员价喽,永远爱你么么哒!'

  4. 条件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...把奶茶单价判断语句写出来。

要点提示:

  1. 将奶茶编号变量milktea_num赋值为一个整数(比如2);

  2. 开始判断,if奶茶编号为1,奶茶单价变量price就赋值为3(整数),并打印;elif奶茶编号为2,奶茶单价变量price就赋值为5,并打印……,else 奶茶编号非这5个数字中的其中一个时,输出:奶茶编号有误;

  3. 判断两个值是否相等,用==

  4. 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号奶茶,满足条件,执行内部的命令。

类似的用法还有andnot

不同的是,用and连接的两个条件必须都满足时,才可以执行条件内部的命令。not用于判断与条件相反的情况,满足相反的条件时才可以执行命令。

小象君写了三组判断语句,请你点击运行,探究一下andornot的用法。

关 3-1 and、or和not用法初探
1
2
3
4
5
6
7
8
9
a = 3
# and
if a >= 1 and a <= 2:
# a12
print('a^_^')
else:
print('ao(╥╥)o')
# or
if a >= 1 or a <= 2:
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
终端
W
ao(╥╥)o
a^_^
ao(╥╥)o
  运行成功

总结一下,

  1. and两边的条件都满足时,才可以执行判断语句内部的操作

  2. or两边的条件至少有一条满足,就可以执行判断语句内部的操作

  3. 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. 如果奶茶编号为1-5中的整数:
    (1) 如果为1号奶茶,单价为3
    (2) 如果为2或3号奶茶,单价为5
    (3) 如果为4或5号奶茶,单价为7

  2. 如果奶茶编号非1-5中的整数:
    输出:奶茶编号输入错误

像这种如果底下还有如果条件里还套着条件的情况,我们要如何用Python写出来,并得出相应奶茶编号的单价呢?

答案就是,我们需要用到嵌套:

if嵌套

if嵌套的应用场景,简单来讲就是:在基础条件满足的情况下,再在基础条件里面增加额外的条件判断。
就像上面的基础条件是: 如果奶茶编号为1、2、3、4、5中的一个。满足条件时,再根据奶茶编号做判断,从而给奶茶单价变量赋值。
看起来有点复杂,别担心,跟着小象君,我们一层一层来搞定。
第一步就是:搞定最外层的结构,将最基础的代码和条件写出来。

那么,我们的思考逻辑应该是这样:

  1. 把奶茶编号整数赋值到变量milktea_num

  2. if…else写最基础的判断条件:如果milktea_num <= 5 并且milktea_num >= 1时,打印’奶茶编号输入正确‘,否则,打印’Woops!我们只售卖以上五种奶茶哦!新口味敬请期待!‘;

  3. 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点单程序结束,证明你已经初步掌握嵌套代码的写法啦。

我们再来看看这段代码的运行逻辑。

首先,我们先从整体总览一下。

这段代码总共分为四部分(分别是赋值ifelseprint()),两个大代码组。根据缩进看,这四个部分都是平级关系。

并且,在ifelse的代码组里面,又包含了条件判断命令if...else...。这正是嵌套在实际代码中的使用方式。

那么,这种嵌套命令我们要如何理解呢?这就需要你回想一下,小象君曾教给你的4个知识点:1.缩进;2.冒号:后的从属关系;3.命令按顺序执行;4.ifelse条件的互斥。

首先,我们曾学过,缩进相同的平级命令都是老大,都是有头有脸的人物,谁都不能怠慢。所以,第一步,计算机就要按顺序一条一条地跟老大们“打招呼”(按顺序执行命令)。

那么,计算机执行的顺序就是:

  1. 接受赋值大哥的赋值;

  2. 因为if大哥else大哥只能留一个,所以计算机要根据赋值,判断赋值的内容是满足if大哥还是else大哥的条件。

如果满足if大哥的条件,就执行if大哥的命令,如果不满足就执行else大哥的命令;第三步,执行print大哥的固定命令。

经过判断,我们知道了,奶茶编号要找if大哥

所以我们的运行顺序是,先输出奶茶编号输入正确,然后再判断奶茶编号的赋值满足ifelifelse中的哪个的条件,从而输出相应的结果。

好了,本关的知识点就到此为止了,小象君带你回顾一下今天学习到的内容。

本关内容回顾

今天我们学习了条件判断语句。条件判断语句总共有三种表现形式,单向判断if、双向判断if…else…、多向判断if…elif…else…

单向判断if的逻辑是:如果满足…就…,需要注意冒号之后下一行的代码需要有缩进。

双向判断if…else…的逻辑是:如果满足…就…不满足就…,注意else和if是平级的。

多向判断if…elif…else…的逻辑是:如果满足条件1…就…满足条件2…就…满足条件3…就…都不满足就…,注意elifelseif是平级的,但是else语句不是必须的。

除此之外,如果底下还有如果条件里还套着条件,就需要使用if嵌套。

这就是我们今天学习的主要内容,接下来又到你闪亮登场的时候了!

小象奶茶馆_店铺升级

今天我们的目标是实现以下点单过程:

① 奶茶编号milktea_num 、奶茶数量milktea_quantity 、是否为会员if_vip ,并分别赋值为:42'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、本关内容学会了嘛~如果觉得哪里讲解不好,快来吐槽一下吧~(选填)

提交             

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多