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)

其执行结果为:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44162361/article/details/124962666