本教程未完结,还有很多东西还没写

流程控制【第三课】

前面的课程我们对python语法有个基本的理解,这节课之后,我们能够使用python写出一个简单的输入输出程序。

让我们来运行这么一段程序——打印小于1000的斐波那契序列:

a, b = 0, 1
while a < 1000:
print(a, end=', ')
a, b = b, a + b
# 输出结果:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987,

观察上面的程序,有几个知识点:

  1. 第一行和第四行用了多重赋值,同时获得新值0, 1。等号右表达式求值顺序为从左到右
  2. print(a, end=', '),这里的end是print函数的命名参数,用途是:将print输出语句之后的文本替换为,默认是\n换行。以此来完成不换行输出
  3. while关键字,接下来单元所要讲解的东西

条件语句(Conditional)

在继续讲解之前,我们来了解计算机里一个很重要的概念——条件判断。在计算机的认知里,只有0和1两种区别。即1为真、0为假。知道这个有什么用呢?

我们来举个栗子:

有一个密码门,每个人都可以输入他们的名字,但只有叫“Bob”的人才能进入

if 语句

这时候我们就需要用到if判断语句。顾名思义:if就是如果的意思,事实上大部分的编程语言都可以这么理解。而Python是最好理解的其中一个编程语言——它的语法是这样的:如果 条件:条件成立要干什么。所以接着我们上面的例子,代码应该长这样:

name = input("请输入您的名字:") # 获取用户输入的名字
if name == "Bob": # 判断是否有权限进入
print("欢迎您!") # 如果有权限,则输出这段文字
print("验证完毕") # 不管有没有权限,都会输出这段文字(注意前面没有空格,也没有tab)

运行代码之后,他会让用户输入名字,如果用户输入的是Bob,则会输出:欢迎您!验证完毕,但如果用户输入别的名字,则只会输出验证完毕

这里我们需要注意的是:Python 里没有花括号{}的概念,用缩进(Indent)来辨认某一个块级语句。同级连续的缩进代表当前语句块是属于同一阶级的。

什么意思呢?如果我们把代码改成这样:

name = input("请输入您的名字:")
if name == "Bob":
print("欢迎您!")
print("验证完毕,") # 这个语句缩进了,和上面并行
# 上两句只有在条件为真的时候,才会执行
print("程序执行完毕!") # 这个语句无论有没有权限,都会执行

我们再次运行代码,输入Bob,这时候程序会输出:欢迎您!验证完毕,程序执行完毕!,但如果输入别个名字,这次只会输出程序执行完毕!

如果需要解释方便记忆的话,可以将这个语法结构理解为一整套单元项目,比如我们的目录,它的同一级的单元将会作为用一个缩进长度

好,我们学会了单分支判断。那么我们来换个题目,我们应该如何解决这个问题呢?

有一家娱乐中心,只能允许21岁的人士进入,小于21岁的人则会被请离开

if-else 语句

if语句要的是条件成立则完成什么事情,那么我们还需要另一个东西,表示条件不成立则执行什么语句。这时候我们要使用else来处理条件不成立时的操作

age = input("请输入您的年龄:")
if int(age) < 21: # 注意:由于input接收输入的是字符串,所以需要转换为整形数据类型才能进行比较。
print("年龄小于21,禁止入内!")
else:
print("欢迎光~临!")

运行这段代码片段,我们会发现当我们输入的值小于21时,他会输出禁止入内的消息、反之会输出欢迎光临。

以上就是双分支语句了。那么现在又有另一个需求,我们又该如何解决这个问题呢?

有一家游乐园,里面的设施只有高度介于140 - 180的人才能游玩,否者会根据高度显示玩家过矮或过高

if-elif 语句

刚刚提到的双分支条件判断只能处理一个条件,那么如果我们需要当不能满足这个条件的话,判断另一个条件,如果某一个条件为真,则执行该语句。我们可以通过这段代码完成上述要求:

height = int(input("请输入您的身高:"))
if height < 140: # 当身高小于140cm时,
print("您的高度不足,不能参与此活动")
elif height > 180: # 当身高大于180cm时,
print("您的高度过高,参与此活动会有危险")
else:
print("您的高度达到标准,请尽情享受!")

那么上面就是我们刚刚根据要求所编程的代码片段。需要注意的是,这个if-elif的流程是:从上往下有其中一项为真,则不会再执行其他判断语句

循环(Loop)

后续课程

详解print()函数(讲完函数再来讲这个)

当我们阅读python的builtins.pyi源码时会发现print()函数长这样:

def print(*values: object, sep: Optional[Text]=..., end: Optional[Text]=..., file: Optional[_Writer]=..., flush: bool=...)

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

他的参数解释大概是这样的:

  • values: 必须,在标准输出流、或默认在sys.stdout上打印values的值
  • 可选参数列表:
    • file: 一个类文件的对象(流stream),默认值为sys.stdout
    • sep: 两个值之间插入的字符串,默认是一个空格
    • end: 在最后一个value之后加上的字符串,默认是换行\n
    • flush: whether to forcibly flush the stream.

让我们来阅读这么一段代码:


什么是创建新的实例(id不相同)