从零到深度学习实践(五)——Python分支与循环

1.分支

什么叫做分支?分支就像是岔路口,经过对自身条件判断后前往要走的路。好比是选择学校,假如小明高考考了570分,他看了看清华的分数线700分,好的,去不了,再看看985的分数线650分,好像也不太行,小明继续往下看,普通一本学校分数线是550分,小明一看自己达到了,于是他去了普通一本学校,下面的二本学校他也不再去看了。
在这里插入图片描述
在上述例子中包含了小明将自己的分数与分数线相比较,以及比较通过之后选择了学校,这和python中的分支是类似的,也就是说分支包含了判断和判断成功后执行,这里我们用代码演示一下:

score = 570

if score >= 700:
    print("恭喜你,被清华大学录取")

elif score >= 650:
    print("恭喜你,被985大学录取")

elif score >= 600:
    print("恭喜你,被211大学录取")

elif score >= 550:
    print("恭喜你,被一本大学录取")

elif score >= 450:
    print("恭喜你,被二本大学录取")

else:
    print("恭喜你,被专科大学录取")

最终输出结果如下:

恭喜你,被一本大学录取

现在我们来对这段代码进行分析,首先定义一个变量 score ,并将其赋值为570分,代表小明考了570分,我们将score与700进行比较,也就是将小明的分数与清华的分数进行比较,很明显是不成立的所以不执行 if score >= 700: 控制的语句,接下来是将 score 与650和600进行对比,发现都不成立,所以也都不执行,直到score与550对比时条件成立了,于是执行了这个分支所控制的语句(print(“恭喜你,被一本大学录取”)),和最开始的例子一样,当你选择了一条路之后后面路就不用再看了,所以跳过了后面两个分支语句。
(注:分支控制的语句需要缩进,一个分支可包含多个控制语句,只需要做相同的缩进,被控制的代码我们称之为语句块,缩进一般是四个空格)

再仔细观察这个代码,为什么有的地方用if有的地方用elif有的地方又用else呢?
其实这是一个比较完整的分支结构,python一共有三种分支结构:
if:单分支结构,如果表达式结果为真,则执行语句块,否则直接执行后续语句。
if…else:双分支结构,如果if表达式结果为真,则执行语句块,否则执行else中的语句块。
if…elif…else:多分支结构,判断流程也不赘述了,就是从上到下依次判断,如果if和elif中的表达式结果都为假,则执行else中的语句块(else不是必须得写的)

接下来是分支的嵌套,道理还是比较简单的,我们直接给出代码展示:

year = 2004

if year % 400 == 0:
    print("{}年是闰年".format(year))
else:
    if year % 100 != 0 and year % 4 == 0:
        print("{}年是闰年".format(year))
    else:
        print("{}年不是闰年".format(year))

输出结果如下:

2004年是闰年

这段代码是用于判断 year 是否是闰年的,我们都知道能被4整除但不能被100整除的年份是闰年(能被400整除的年份也是闰年),首先我们判断 year 能否被400整除(==用于判断表达式两边是否一致,!=用于判断表达式两边是否不一致),否则再进行判断 year 能否被4整除又不会被100整除,这样就形成了嵌套。这个代码中出现了两个else,那么怎么判断哪个else对应的哪个if呢?其实也比较简单,只需要看他们的缩进就行了,如果他们的缩进一样,那么就是同一组的。同时,这个代码中还存在一个关键字 and,这是什么呢?这是python的逻辑运算符,除此之外python还有两个逻辑运算符ornot,他们有什么用呢?他们分别代表着与,或,非。它们的作用如下:

and–得到的数据同时满足and前后的两个条件
or–得到数据至少满足一个条件
not–得到的数据不在这个条件内

通过这些逻辑与算符我们可以用更简洁的语法来写出表达式,否则会用上过多嵌套,使代码看上去非常冗杂。

2.循环

python的循环分为while循环和for循环,我们分别来看一下。

while循环:
“每天进步1%,365天之后你的能力就会是现在的37倍!”这句名言大家应该都听过,那具体是怎么算出来的呢,我们用python的while循环来实现一遍:

Knowledge = 1
day = 1

while day <= 365:
    day += 1
    Knowledge *= 1.01

print(Knowledge)

输出结果如下:

37.783434332887275

我们来分析一下这段代码,你最初的知识量为1,天数也是从第一天开始,在循环中每增长一天,你的知识量会变为前一天的1.01%,直到天数超过365后表达式不成立,然后会跳出循环并执行后面的输出语句。

当然我们不止可以对天数进行限制,如果我们想知道我们的知识量在第几天会达到10应该怎么表达呢?

Knowledge = 1
day = 1

while Knowledge <= 10:
    day += 1
    Knowledge *= 1.01

print(day)

输出结果:

233

可以看到我们只需要将表达式中的条件换掉,并将输出结果更改为day就可以输出我们想要的结果了:每天进步1%,233天后我们的知识量会超出现在的十倍。

在python循环中还存在两个重要的关键字:breakcontinue,它们分别又什么作用呢?
break:当执行到这个语句时,即使表达式为真也会跳出循环
continue:当执行到这个语句时,会跳过当前迭代
(PS:break和continue与分支蓬配套使用)
break很好理解,我们在这里演示一下continue的用法吧

Knowledge = 1
day = 1

while day <= 365:
    day += 1
    if day % 7 == 0:
        continue
    Knowledge *= 1.01

print(Knowledge)

输出结果:

22.52112048277706

这是什么意思呢?就是说你每周会有一天休息,你一年后的知识量(每七天会有一天被跳过)

for循环:
for循环可以遍历可迭代序列(列表,元组,字符串等):

比如:

string = "Hello world"
for i in string:
    print(i)

list1 = [124, "123", [1, 2, 3]]
for i in list1:
    print(i)

输出结果:

H
e
l
l
o
 
w
o
r
l
d
124
123
[1, 2, 3]

可以看到,for循环可以每次可以取出序列中的一个元素并将这个元素赋值给i(不一定是i可以根据具体含义进行命名),直到把所有元素遍历一遍。
同时,for循环经常会搭配range()进行使用,我们先来看看rang()是什么以及它的用法:

print("test1:")
for i in range(5):
    print(i, end=" ")

print("\ntest2:")
for i in range(1, 5):
    print(i, end=" ")

print("\ntest3:")
for i in range(0, 5, 2):
    print(i, end=" ")

输出结果:

test1:
0 1 2 3 4 
test2:
1 2 3 4 
test3:
0 2 4 

可以看到range()有三种用法,如果只填入一个参数x,则会遍历[0,x)中的整数,如果填入两个参数x和y则会遍历[x,y)中的整数,如果填入x,y,z三个参数时第一个表示左边界,第二个表示右边界,第三个表示步长step,即两个整数之间相差的数,含左不含右。

当然在for循环中也可以使用break以及continue。

下面为大家展示一下python如何利用分支循环输出九九乘法表:

for i in range(1, 10):
    for j in range(1, 10):
        if i > j:
            print(end="\t")
        else:
            print("{}*{}={}".format(i, j, i*j), end="\t")
    print()

结果如下:

1*1=1   1*2=2   1*3=3   1*4=4   1*5=5   1*6=6   1*7=7   1*8=8   1*9=9
        2*2=4   2*3=6   2*4=8   2*5=10  2*6=12  2*7=14  2*8=16  2*9=18
                3*3=9   3*4=12  3*5=15  3*6=18  3*7=21  3*8=24  3*9=27
                        4*4=16  4*5=20  4*6=24  4*7=28  4*8=32  4*9=36
                                5*5=25  5*6=30  5*7=35  5*8=40  5*9=45
                                        6*6=36  6*7=42  6*8=48  6*9=54
                                                7*7=49  7*8=56  7*9=63
                                                        8*8=64  8*9=72
                                                                9*9=81

猜你喜欢

转载自blog.csdn.net/YuqingF/article/details/127166178