欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python基础-分支和循环

程序员文章站 2022-04-06 15:08:19
...


一、分支【重要】

应用场景

我们目前写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构。然而仅有顺序结构并不能解决所有的问题,比如我们设计一个游戏,游戏第一关的通关条件是玩家获得1000分,那么在完成本局游戏后,我们要根据玩家得到分数来决定究竟是进入第二关,还是告诉玩家“Game Over”,这里就会产生两个分支,而且这两个分支只有一个会被执行。类似的场景还有很多,我们将这种结构称之为“分支结构”或“选择结构”。

1.代码结构

顺序结构:代码从上往下依次执行

分支结构:根据不同的条件,执行不同的语句

循环结构: 根据指定的条件,重复执行某段代码

2.分支结构-if语句

在Python中,要构造分支结构可以使用if、elif和else关键字。所谓关键字就是有特殊含义的单词,像if和else就是专门用于构造分支结构的关键字,很显然你不能够使用它作为变量名(事实上,用作其他的标识符也是不可以)。

2.1简单if语句【单分支】

语法:

if 表达式:

​ 执行语句

说明;要么执行,要么不执行,当表达式成立的之后,则执行语句;如果表达式不成立,则直接跳过整个if语句继续执行后面的代码

注意:表达式为真才执行语句

​ 假:0 0.0 False “” None【空值】

​ 一般情况下,表达式使用都是比较运算符

举例:

#单分支
num1 = 50
num2 = 60

#需求:当num1 == num2,则给num1重新赋值为100

#在pYthon中,通过缩进来区分代码块
if num1 != num2:
 	num1 = 100

print(num1)


#实践:从控制台输入一个数,判断这个数是否是偶数
num = int(input())
if num % 2 == 0:
 	print(num,"是一个偶数")

print(num,"不是一个偶数")

注意:
和C/C++、Java等语言不同,Python中没有用花括号来构造代码块而是使用了缩进的方式来表示代码的层次结构,如果if条件成立的情况下需要执行多条语句,只要保持多条语句具有相同的缩进就可以了。换句话说连续的代码如果又保持了相同的缩进那么它们属于同一个代码块,相当于是一个执行的整体。缩进可以使用任意数量的空格,但通常使用4个空格,建议大家不要使用制表键或者设置你的代码编辑工具自动将制表键变成4个空格。

2.2if-else语句【双分支】

语法:

if 表达式:

​ 执行语句1

else:

​ 执行语句2

说明:如果表达式成立,则执行语句1;如果不成立,则执行语句2

代码演示:

#双分支
#  从控制台输入一个数,判断这个数是否是偶数
num = int(input())

if num % 2 == 0:
 	print(num,"是一个偶数")
else:
 	print(num,"不是一个偶数")


#从控制台输入一个数字,根据数字打印年龄段
age = int(input())
if age >= 18:
 	print("成年人")
else:
 	print("未成年人")
2.3if-elif-else语句【多分支】

语法:

if 表达式1:

​ 执行语句1

elif 表达式2:

​ 执行语句2

elif 表达式3:

​ 执行语句3

。。。。。

else:

​ 执行语句n

说明:实现了多选一的操作,会根据不同的条件从上往下来进行匹配,如果匹配上了,则执行对应的语句,然后直接结束整个if-elif语句,但是,如果所有的条件都不成立的话,则执行else后面的语句

注意:不管if-elif-else有多少个分支,都只会执行其中的一个分支

代码演示:

#多分支
#需求:从控制台输入一个数字,根据数字打印年龄段
age = int(input())
if age < 0:
 	print("输入有误")
elif age <= 3:
 	print("婴儿")
elif age <= 6:
 	print("儿童")
elif age <= 12:
 	print("青少年")
elif age <= 18:
 	print("青年")
else:
 	print("hello")
#根据控制台输入的成绩,输出对应的等级
"""
90以上:优秀
80~90:良好
70~80:还行
70以下:加油吧,少年
"""
score = int(input("请输入学生的成绩:"))
if score >= 90:
 	print("优秀")
elif score >= 80:
 	print("良好")
elif score >= 70:
 	print("还行")
else:
 	print("")
2.4嵌套if语句

语法:

if 表达式1:

​ 执行语句1

​ if 表达式2:

​ 执行语句2

说明:if语句的嵌套,可以在单分支,双分支,多分支之间进行任意组合

代码演示:

score = int(input("请输入学生的成绩:"))
if score < 0 or score > 100:
 	print("输入有误")
else:
 	if score >= 90:
     	print("优秀")
 	elif score >= 80:
     	print("良好")
 	elif score >= 70:
     	print("还行")
 	else:
     	print("")

age = int(input("请输入年龄:"))
looks = input("请输入您的相貌:")

if age >= 18:
	if looks == "美女":
     		print("要微信")
 	else:
     		print("略过")

注意:从语法角度来说,嵌套的层数没有任何的限制,但是,为了代码的可读性和可维护性,嵌套层数不要超过3层

二、循环【重要】

应用场景
我们在写程序的时候,一定会遇到需要重复执行某条或某些指令的场景。例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向移动的指令。在这个场景中,让机器人向球门方向移动就是一个需要重复的动作,当然这里还会用到上一课讲的分支结构来判断机器人是否持球以及是否进入射门范围。再举一个简单的例子,如果要实现每隔1秒中在屏幕上打印一次“hello, world”并持续打印一个小时,我们肯定不能够直接把print(‘hello, world’)这句代码写3600遍,这里同样需要循环结构。

循环结构就是程序中控制某条或某些指令重复执行的结构。在Python中构造循环结构有两种做法,一种是while循环,一种是for-in循环。

while循环+for循环

如果要构造不知道具体循环次数的循环结构,我们推荐使用while循环。while循环通过一个能够产生或转换出bool值的表达式来控制循环,表达式的值为True则继续循环;表达式的值为False则结束循环。

1.用法

语法:

初始化表达式

while 条件表达式:

​ 循环体

​ 循环之后操作表达式

for 变量名 in 序列:

​ 循环体

2.range

range([start,]end[,step]) 注:[]表示start和step可写可不写

start:开始数字

end;结束数字

step;步长

start默认为0,step默认为1

功能:生成具有一定规律的序列

代码演示:

#range()
"""
range([start,]end[,step])
l例如:
range(100)    可以生成一个0~99的整数序列【不包含100】
range(1,100)  可以生成一个1~99的整数序列
range(1,100,2)  可以生成一个1~99之间的奇数序列
"""

#:计算1~100之间所有整数的和
num1 = 1
sum1 = 0
while num1 <= 100:
    	sum1 += num1
    	num1 += 1

sum11 = 0
#借助于range生成一个1~100之间所有整数的序列,然后使用for循环进行遍历这个序列
for x in range(1,101):
    	sum11 += x

#:计算1~100之间所有偶数的和
num2 = 1
sum2 = 0
while num2 <= 100:
    	if num2 % 2 == 0:
        	sum2 += num2
    	num2 += 1

num2 = 0
sum2 = 0
while num2 <= 100:
    	sum2 += num2
    	num2 += 2

sum22 = 0
for y in range(0,101,2):
    	sum22 += y

4.嵌套循环

代码演示:

#需求:打印九九乘法表

#while实现
line = 1
while line <= 9:
    	colum = 1
    	while colum <= line:
        	print("%dx%d=%d"%(colum,line,line*colum),end=" ")
        	colum += 1
    	print("")
    	line += 1


#for实现
#外层循环:控制行
for i in range(1,10):
    	#内层循环:控制列
    	for j in range(1,i + 1):
        	print("%dx%d=%d"%(j,i,i*j),end=" ")
    	print("")

三. break、continue和pass语句的使用

1.break

作用:跳出循环【直接跳出整个循环,继续执行循环后面的代码】

代码演示:

#break的使用
#1.while
n = 0
while n < 5:
    	print("n = %d"%(n))
    	#print("n =" ,n)
    	#注意:if语句充当的是一个条件判断
    	if n == 3:
        	break
    	n += 1
print("over")

#2.for
for x in range(1,6):
 	print("x = %d"%(x))
    	if x == 3:
        	break
   #结论:不管是while语句还是for语句,break的作用结束整个循环

#3.特殊情况一
#不管while中的条件是否满足,else分支都会被执行
#思考问题:如果在while循环体中出现了break,else分支还会执行吗?-------不会
m = 0
while m < 3:
 	print(m)
    	if m == 1:
        	break
    	m += 1
   else:
 	print("else")
   
#4.特殊情况二
#当break使用在嵌套循环中的时候,结束的是当前循环【就近原则】
x = 0
y = 0
while x < 20:
 	print("hello Python",x)
    	x += 1
    	while y < 5:
        	print("hello Python~~~~",y)
        	if y == 2:
            	break
        	y += 1
    #break
   
#注意:break是一个关键字,使用的过程中,单独就可以成为一条语句,后面不能跟任何的变量或者语句

2.continue

作用:跳出当前正在执行的循环,继续执行下一次循环

代码演示:

#continue的使用

#1.for
for i in range(10):
    	print(i)
    	if i == 3:
        	continue
    	print("*")

for i in range(10):
    	print(i)
    	if i == 3:
        	break
    	print("*")

#总结:continue只是结束当前正在执行的循环,而break表示直接结束整个循环

# 2.while
"""
num = 0
while num < 10:
    	print("num = %d"%(num))
    	num += 1
    	if num == 3:
        	continue
"""
num = 0
while num < 10:
    	if num == 3:
        	num += 1
        	continue
    	print("num = %d" % (num))
    	num += 1

3.pass

Python中的pass是一条空语句

作用:为了保持代码结构的完整性,pass不做任何操作,只是充当了一个占位语句,保证代码可以正常的运行起来

应用场景:if,while,for中使用,可以在代码块的部分不添加任何语句,代码正常运行

代码演示:

while True:
    	pass

print("over")

4.程序示例

代码演示:

#需求;判断一个数是否是素数【质数】
#方式一
num1 = int(input("请输入一个数:"))
#思路:一个数能被其他数整除,将次数记录下来
#条件:在2~num1 - 1的范围内,找到一个数能将num1整除,count1 + 1
count1 = 0
for i in range(2,num1):
    #整除:求余【大数对小数求余】
    if num1 % i == 0:
        count1 += 1

if count1 == 0 and num1 != 1:
    print("是质数")
else:
    print("不是质数")

#方式二:
#思路:假设num2是质数,寻找不成立的条件【有数能被整除】将假设推翻掉
num2 = int(input("请输入一个数:"))
#定义一个布尔类型的变量,用于记录这个数是不是一个质数
is_prime  = True
for j in range(2,num2):
    if num2 % j == 0:
        is_prime = False
        break

if is_prime == True and num2 != 1:
    print("是质数")
else:
    print("不是质数")