Python基础——分支和循环

Posted 薛定谔的猫ovo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础——分支和循环相关的知识,希望对你有一定的参考价值。

文章目录


if - else语句

条件分支,也就是判断,习惯用到的是if-else的搭配。

if  条件:
 条件为真(True)执行的操作
else:
 条件为假(False)执行的操作

e.g. 按照100分制,92分以上成绩为A,80~ 90成绩为B,60~80成绩为C,60以下为D。要求写一个程序,当用户输入分数,自动转换为A、B、C、D的形式打印。

score = int(input('请输入一个分数:'))
if 90 <= score <= 100:
    print('A')
if 80 <= score < 90:
    print('B')
if 60 <= score < 80:
    print('C')
if 0 <= score <60:
    print('D')
if score < 0 or score >100:
    print('输入错误')

当然,也可以写成下面这种形式:

score = int(input('请输入一个分数:'))
if 90 <= score <= 100:
    print('A')
else:
    if 80 <= score < 90:
        print('B')
    else:
        if 60 <= score < 80:
            print('C')
        else:
            if 0 <= score <60:
                print('D')
            else:
                print('输入错误')

如果是这样写,条件多了可能会有诸多不便,故可以写成下面这种形式:

score = int(input('请输入一个分数:'))
if 90 <= score <= 100:
    print('A')
elif 80 <= score < 90:
    print('B')
elif 60 <= score < 80:
    print('C')
elif 0 <= score <60:
    print('D')
else:
    print('输入错误')

假设输入成绩是94,按照第一种方法,第一次判断成立,接着输出字母A,但是会接着进行第二、三、四、五次判断,然后条件都不符合,退出程序。
若采用第二、三种方式,那么在第一次判断成立并打印字母A后,接着就不需要再进行任何判断就可以直接退出程序。
可见,即使对于一个简单的例子,假设每判断一次就会消耗一个CPU的时间,那么第一种方法就比第二种和第三种方法多消耗了400%的时间!



Python有效避免“悬挂else”

什么叫做“悬挂else”?可以看下面这个例子。学过C语言的同学可能很容易被以下代码欺骗:

if(score>=80)
	if(score>=90)
		printf('A')
else
	printf('C')

在这个例子中,虽然else是想和外层的 if 匹配,但事实上按照C语言的就近匹配原则,这个else是属于内层 if 的。这就是悬挂else。(举个小例子,与上一个代码的题干无关)

但是,Python的缩进使用强制规定代码必须正确对齐,让程序员来决定else到底是属于哪一个if。这就减少了不确定性,所以在Python中制造出“悬挂else”的问题是不可能的
所以,在Python中可以让else匹配外层 if :

score = int(input('请输入一个分数:'))
if score >= 80:
    if score >= 90:
        print('A')
else:
    print('C')

当输入的分数小于80时,会打印字母C。(假设分数小于80时打分为C)


条件表达式(三元操作符)

我们所说的“多少元”操作符的意思是这个操作符有多少个操作数
例如赋值操作符“=’’是二元操作符,所以它有左边和右边两个操作数。再例如“-”是一元操作符,它表示负号,因为只有一个操作数。

有了三元操作符的条件表达式,就可以使用一条语句来完成以下的条件判断和赋值操作:

if x < y :
	min = x
else:
	min = y

那么上面的代码用三元操作符是怎么表示的呢?

三元操作符语法:
a = x i f 条 件 e l s e y a = x \\quad if \\quad 条件\\quad else \\quad y a=xifelsey

所以当条件为True的时候,a的值赋值给x,否则赋值给y。
故上面的例子可以改进为:

min = x if x < y else y


断言assert

断言的语法有点像是 if 条件分支语句的近亲,故放在一起来讲。
assert这个关键字就称为“断言”。当这个关键字后面的条件为假的时候,程序自动崩溃并抛出AssertionError的异常。

什么情况下需要这样的代码呢?当我们在测试程序的时候就很好用,因为与其让错误的条件导致程序今后莫名其妙的崩溃,不如让错误条件出现的那一刻自我毁灭。

一般来说,可以用它在程序中置入检查点,当需要确保程序中的某一个条件一定为真时才能让程序正常工作时,assert关键字就非常有用了。



while循环语句

Python的while循环跟 if 条件分支类似,在条件为真的情况下,执行一段代码。不同的是,只要条件为真,while循环会一直重复执行那段代码,把这段代码称为循环体。

while 条件:
 循环体



for循环语句

Python的计数器循环,就是for循环。Python的for循环会自动调用迭代器的next()方法,会自动捕获StopIteration异常并结束循环。



range()

for循环其实还有一个小伙伴,range()内建函数。
range的语法为:
range( [start, ] stop [, step=1] )

这个BIF有三个参数,其中用中括号[]括起来的两个表示这两个参数是可选的
step=1表示第三个参数的默认值是1。而第一个参数默认设置为0。
这个函数的作用就是生成一个从start参数的值开始,到stop参数的值结束的数字序列,其步长为step。注意:包含start的值,但不包含stop的值

例如:range(5)会生成0~5的所有数字(包含0但不包含5)

传递两个参数的range():

传递三个参数的range():



break语句

break语句的作用是终止当前循环,跳出循环体

number = 8
answer = int(input("猜一个1到10之间的整数:"))
while True:
    if answer == number:
        break
    answer = int(input("错误,请重新输入:"))
print("游戏结束")

程序运行后,只有当用户输入8的时候,才会执行break语句,也就是跳出while循环体,否则将会一直执行循环:



continue语句

continue语句的作用是终止本轮循环并开始下一轮循环(这里要注意的是,在开始一轮循环之前,会先测试循环条件)。

for i in range(10):
    if i % 2 != 0:
        print(i)
        continue
    i += 2
    print(i)

其执行结果为:

以上是关于Python基础——分支和循环的主要内容,如果未能解决你的问题,请参考以下文章

Python基础04-分支及循环

Python基础之条件和循环

Python开发第六篇:Python基础条件和循环

第四篇:python基础之条件和循环

第四篇:python基础之条件和循环

Python基础知识进阶(五---2)----程序基本结构简单分支异常处理三大实例分析基本循环结构通用循环构造方法死循环嵌套循环布尔表达式