控制语句

选择结构

选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为:单分支、双分支、多分支。流程图如下:
在这里插入图片描述
在这里插入图片描述
单分支选择结构
if语句单分支结构的语法形式如下:
if 条件表达式:
语句/语句块

其中:

  1. 条件表达式:可以是逻辑表达式、关系表达式、算术表达式等等
  2. 语句/语句块:可以是一条语句,也可以是多条语句。多条语句缩进必须对齐一致

eg. 输入一个数字,小于10,则打印这个数字

num = input("输入一个数字:")   #默认返回字符串
if int(num)<10:
     print(num)
  • 在选择和循环结构中,条件表达式的值为False的情况如下:
    False、0、0.0、空值None、空序列对象(空列表、空元组、空集合、空字典、空字符串)、空range对象、空迭代对象

  • 其他情况,均为True。这么看来,Python所有的合法表达式都可以看做条件表达式,甚至包括函数调用的表达式

eg.

if 3:    #整数作为条件表达式
      print("ok")
  
a=[]
if a:
    print("空列表,False")

s = "False"    #非空字符串,是True
if s:
    print("非空字符串,是True")

c = 9
if 3<c<20:
    print("3<c<20")
   
if 3<c and c<20:
    print("3<c and c<20")

if True:     #布尔值
    print("True")
  • 条件表达式中,不能有赋值操作符“=”
    在Python中,条件表达式不能出现赋值操作符“=”,避免了其他语言中经常误将关系运算符“==”写作赋值运算符“=”带来的困扰。如下代码将会报语法错误:
if 3<c and (c=20):
    print("赋值符不能出现在条件表达式中")

双分支选择结构
双分支结构的语法格式如下:
if 条件表达式:
语句1/语句块1
else:
语句2/语句块2

eg.输入一个数字,小于10,则打印该数字;大于10
,则打印“数字太大”

num = input("输入一个数字:")
if int(num)<10:
    print(num)
else:
    print("数字太大")

三元条件运算符
Python提供了三元运算符,用来在某些简单双分支赋值情况,三元条件运算符语法格式如下:
条件为真时的值 if (条件表达式) else 条件为假时的值

eg.

num=input("请输入一个数字")
print(num if int(num)<10 else "数字太大")

多分支选择结构
多分支选择结构的语法格式如下:
if 条件表达式 1:
语句1/语句块1
elif 条件表达式 2:
语句2/语句块3
.
.
.
elif 条件表达式 n:
语句n/语句块n
[else:
语句n+1/语句块n+1
]

多分支结构,几个分支之间是有逻辑关系的,不能随意颠倒顺序

eg. 输入一个学生的成绩,将其转化成简单描述:不及格(小于60)、及格(60-79)、良好(80-89)、优秀(90-100)
方法 1:使用完整的条件表达式

score = int(input("请输入分数"))
grade = ""
if(score<60):
    grade="不及格"
if(60<=score<80):
    grade="及格"
if(80<=score<90):
    grade="良好"
if(90<=score<=100):
    grade=“优秀”

print("分数是{0},等级是{1}".format(score,grade))

方法2:利用多分支结构

score = int(input("请输入分数"))
grade = ""
if score<60:
    grade="不及格"
elif score<80:
    grade="及格"
elif score<90:
    grade="良好"
elif score<=100:
    grade=“优秀”

print("分数是{0},等级是{1}".format(score,grade))

选择结构嵌套
选择结构可以嵌套,使用时一定要注意控制好不同级别代码块的缩进量,因为缩进决定了代码的从属关系。语法格式如下:、
if 表达式1:
语句块1
if 表达式2:
语句块2
else:
语句块3
else:
if 表达式4:
语句块4

eg. 输入一个分数,分数在0-100之间,90以上是A,80以上是B,70以上是C,60以上是D,60以下是E

score = int(input("请输入一个分数"))
if score>100 or score<0:
    print("请输入一个0-100的分数")
else:
    if score>=90:
        print("A")
    elif score>=80:
        print("B")
    elif score>=70:
        print("C")
    elif score>=60:
        print("D")
    else:
        print("E")
score = int(input("请输入一个分数"))
degree="ABCDE"
if score>100 or score<0:
    print("请输入一个0-100的分数")
else:
    num = score/10
    if num<6:
        num=5
    print(degree[9-num])

循环结构

循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为True,如果为True则重复执行循环体里的语句。图示如下:
在这里插入图片描述
循环体里面的语句至少应该包含改变条件表达式的语句,以使循环趋于结束;否则,就会变成一个死循环

while循环
while循环的语法格式如下:
while 条件表达式:
循环体语句

eg. 利用while循环打印从0-10的数字

num=0
while num<=10:
    print(num)
    num +=1

eg. 利用while循环,计算1-100之间数字的累加和;计算1-100之间偶数的累加和,计算1-100之间奇数的累加和

num=0
sum_all=0
sum_even=0
sum_odd=0
while num<=100
    sum_all+=num
    if num%2==0: sum_even+=num
    else: sum_odd+=num
    num+=1

print("1-1001所有数的累加和", sum_all)
print("1-100偶数的累加和",sum_even)
print("1-100奇数的累加和",sum_odd)

for循环和可迭代对象遍历
for循环通常用于可迭代对象的遍历,for循环的语法格式如下:
for 变量 in 可迭代对象:
循环体语句

eg. 操作遍历一个元组或列表

for x in (20,30,40):
    print(x*3)

可迭代对象
Python包含一下集中可迭代对象:

  1. 序列。包含:字符串、列表、元组
  2. 字典
  3. 迭代器对象(iterator)
  4. 生成器对象(generator)
  5. 文件对象

eg. 遍历字符串中的字符

for x in list("sxt001"):   #或者直接写 for x in "sxt001"
    print(x)

eg. 遍历字典

d = {'name':'gaoqi','age':18,'address':'西三旗001号楼'}
for x in d:    #遍历字典所有的key
    print(x)

for x in d.keys():   #遍历字典所有的key
    print(x)

for x in d.values():    #遍历字典所有的value
    print(x)

for x in d.items():    #遍历字典所有的“键值对”
    print(x)

range对象
range对象是一个迭代器对象,用来产生指定范围的数字序列。格式为:
range(start, end [,step])
生成的数值序列从start开始到end结束(不包含end)。若没有填写start,则默认从0开始。step是可选的步长,默认为1.如下是几种典型示例在:
for i in range(10) 产生序列:0 1 2 3 4 5 6 7 8 9 10
for i in range(3,10) 产生序列: 3 4 5 6 7 8 9
for i in range(3,10,2) 产生序列: 3 5 7 9

eg. 利用for循环,计算1-100之间数字的累加和;计算1-100之间偶数的累加和,计算1-100之间奇数的累加和

num=0
sum_all=0
sum_even=0
sum_odd=0
for num in range(101):
    sum_all+=num
    if num%2==0: sum_even+=num
    else: sum_odd+=num

print("1-1001所有数的累加和", sum_all)
print("1-100偶数的累加和",sum_even)
print("1-100奇数的累加和",sum_odd)

嵌套循环
一个循环内可以嵌入另一个循环,一般称为“嵌套循环”,或者“多重循环”

eg. 打印出如下图案
在这里插入图片描述

for x in range(5):
    for y in range(5):
        print(x, end="\t")
    print()

eg. 利用嵌套循环打印九九乘法表

for m in range(1,10):
    for n in range(1,m+1):
        print("{0}*{1}={2}".format(m,n,(m*n)), end="\t")
    print()

break语句
break语句可用于while和for循环,用来结束整个循环。当有嵌套循环时,break语句只能跳出最近一层的循环

eg.使用break语句结束循环

while True:
    a=input("请输入一个字符(输入Q或q结束)")
    if a.upper()=='Q':
        print("循环结束,退出")
        break
    else:
        print(a)

continue语句
continue语句用于结束本次循环,继续下一次。多个循环嵌套时,continue也是应用于最近的一层循环

eg. 要求输入员工的薪资,若薪资小于0则重新输入。最后打印出录入员工的数量和薪资明细,以及平均薪资

empNum=0
salarySum=0
salarys=[]
while True:
    s=input("请输入员工的薪资(按Q或q结束)")
    if s.supper=='Q':
        print("录入完成,退出")
        break
    if float(s)<0:
        continue
    empNum+=1
    salarys.append(float(s))
    salarySum+=float(s)

print("员工数{0}".format(empNum))
print("录入薪资: ", salary)
print("平均薪资{0}".format(salarySum/empNum))

else语句
while、for循环可以附带一个else语句(可选)。如果for、while语句没有被break语句结束,则会执行else子句,否则不执行。语法格式如下:
while 条件表达式
循环体
else:
语句块

或者

for 变量 in 可迭代对象:
循环体
else:
语句块

eg. 员工一共4人,录入这4位员工的薪资,全部录入后,打印显示“您已经全部录入4名员工的薪资”。最后,打印输出录入的薪资和平均薪资

salarySum=0
salarys=[]

for i in range(4):
    s=input("请输入一共4名员工的薪资(按Q或q中途结束)")
    if s.upper()=='Q':
        print("录入完成,退出")
        break
    if float(s)<0:
        continue

    salarys.append(float(s))
    salarySum+=float(s)

else:
    print("您已经全部录入4名员工的薪资")

print("录入薪资:",salarys)
print("平均薪资{0}".format(salarySum/4))

循环代码优化
虽然计算机越来越快,空间也越爱越大,我们仍然要在性能问题上“斤斤计较”。编写循环时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算:

  1. 尽量减少循环内部不必要的计算
  2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提
  3. 局部变量查询较快,尽量使用局部变量

eg.

import time

start = time.time()
for i in range(1000):
    result=[]
    for n in range(10000):
        result.append(i*1000+n*100)

end= time.time()
print("耗时:{0}".format((end-start)))

start2 = time.time()
for i in range(1000):
    result=[]
    c=i*1000
    for n in range(10000):
        result.append(c+n*100)

end2= time.time()
print("耗时:{0}".format((end2-start2)))

其他优化手段

  1. 连接多个字符串,使用join()而不使用+
  2. 列表进行元素插入和删除,尽量在列表尾部操作

使用zip()并行迭代
我们可以通过zip()函数对多个序列进行迭代,zip()函数在最短序列“用完”时就会停止

eg.

names=("高淇","高老二","高老三","高老四")
ages=(18,16,20,25)
jobs=("老师","程序员","公务员")

for name, age, job in zip(names,ages,jobs):
    print("{0}--{1}--{2}".format(name,age,job))

#也可以这样实现:
for i in range(3):
    print("{0}--{1}--{2}".format(names[i],ages[i],jobs[i]))

执行结果:
高淇–18–老师
高老二–16–程序员
高老三–20–公务员

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值