Python3(控制语句)

Python学习(控制语句)

前面所学习的基本数据类型和序列等,可以看做数据的组织方式,可以说是“砖块”;现在开始学习流程控制语句,这是代码的组织方式,可以看做是“混凝土”。一个完整的程序,离不开“砖块”和“混凝土”,他们的组合,才能让我们建立从小到大“一个方法”,“大到”操作系统,甚至是建立各种各样的软件。

选择结构

选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为︰单分支、双分支、多分支。流程图如下︰

在这里插入图片描述

单分支结构

if单分支结构的语法形式如下:
if条件表达式:
  语句/语句块
其中:
①条件表达式: 可以使逻辑表达式、关系表达式、算术表达式等。
②语句、语句块: 可以是一条语句,也可以是多条语句。多条语句,缩进必须对其一致。

a = input("请输入一个小于10的数字: ")   #input输入的是一个字符串  我们需要强转成int

if(int(a)<10):
    print(a)

③条件表达式详解

在选择和循环结构中,条件表达式的值为False的情况如下:False、0、0.0、空值None、空序列对象(空列表、空元祖、空集合、空字典、空字符串)、空range 对象、空迭代对象。
其他情况,均为True。这么看来,Python所有的合法表达式都可以看做条件表达式,甚至包括函数调用的表达式。

a =""  #非空的字符串也是:Ture
if not a:
    print(a)

b = []
if not b:
    print("空的列表是false")

c = True
if c:
    print("c");

d = 0
if not d:
    print("数字0是false")

运行效果:
在这里插入图片描述
Tip: 条件表达式中,不能有赋值操作符"="
>

双分支选择结构
s = input("请输入一个数字: ")

if int(s)<10:
    print("s是小于10的数字")
else:
    print("s是大于10的数字")

运行效果:
在这里插入图片描述

三元运算符

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

下面是三元运算符的案例代码:

num = input("请输入一个数字:")
print(num if int(num)<10 else ("数字太大"))
多分支结构

在这里插入图片描述
多分支结构,几个分支之间室友逻辑关系的,不能随意颠倒顺序,流程图如下:
在这里插入图片描述

案例: 输入分数获得学生的分数等级

#这是完整的条件表达
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))


#下面用多分支结构表达
score = int(input("请输入该学生的分数"))
grade = ""

if score<60:
    grade = "不及格"
elif score<80:     #表达分数为[60,80)
    grade = "良好"
elif score<=100:    #表达分数为[80,100]
    grade = "优秀"

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

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

选择结构嵌套

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

if表达式1:
  语句块1:
  if表达式2:
    语句块2
  else:
    语句块3;
else:
  if表达式4:
    语句块4

循环语句

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

while循环

while循环的语法格式如下:

while 条件表达式:
  循环体语句

我们通过一些简单的练习,来慢慢熟悉while循环。

①利用while循环打印0-10的数字

num = 0;
while num<=10:
    print(num,end="\t")
    num+=1

②计算1-100累加和

num1 = 100;
sum = 0;
while num1>0:
    sum+=num1;
    num1-=1;
print(sum)  #sum = 5050
for循环和可迭代对象

for循环常用于可迭代循环对象的遍历。for循环的语法格式如下:

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

[操作]遍历一个元组或列表

for x in(20,30,20):
    print(x,end="\t")
    
d= {'name':'asa','age':12,"job":'ssss'}
for x in d:  #其实就是相当于是遍历keys
    print(x)
for x in d.keys():
    print(x,end="\t")
for x in d.values():
    print(x,end="\t")
range 对象

range对象是一个迭代器对象,用来产生指定范围的数字序列。格式为:

range(start,end[,step])   #[]代表可以省略

生成的数值序列从start开始到end结束(不包含end)。若没有填写start,则默认为从0开始。step是可选的步长,默认为1如下是几种典型示范:
在这里插入图片描述
[操作]求和

sum_all = 0;
sum_odd = 0;
sum_even = 0;
for x in range(101):
    sum_all+=x;
    if(x%2==0):
        sum_odd+=x;
    elif(x%2!=0):
        sum_even+=x;

print(sum_all);
print(sum_odd);
print(sum_even);
print("1-100和:{0},1-100奇数和:{1},1-100偶数和:{2}".format(sum_all,sum_odd,sum_even))
嵌套循环

一个循环体内可以嵌入另一个循环,一般称为“嵌套循环”,或者“多重循环”。
[操作] 打印如下图案
在这里插入图片描述

a = 0
for x in range(5):
    for s in range(5):
        print(a,end="\t")
    a+=1
    print()

[操作] 打印九九乘法表

for a in range(9):
    for b in range(a+1):
        print("{0}*{1}={2}".format(a+1,b+1,(a+1)*(b+1)),end="\t")
    print()

[操作]用列表和字典存储下表信息,并打印出表中工资高于1500的数据/font>
在这里插入图片描述

r1 = dict(name = "aaa",age = 18,salary = 331231)
r2 = dict(name = "bbb",age = 12,salary = 123)
r3 = dict(name = "ccc",age = 13,salary = 344124)
tb = [r1,r2,r3]   #随手写的,表达意思

for x in tb:   
    if x.get("salary")>15000:
        print(x)
break语句

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

[操作]使用break语句结束循环

a = 10
while True:
    b = input("请输入一个字母Y/y,来结束循环:")
    if b.upper()=="Y":
    	print("循环已经退出")
        break;
    else:
        print(a)
continue语句

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

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

num = 0
salary = []
all_salary = 0
while True:
    s = input("请输入员工的薪资:(按Q结束录入)")

    if s.upper()=="Q":
        print("录入已经完成,已经退出了")
        break;
    if int(s)<0:
        continue
    num+=1
    salary.append(int(s))
    all_salary+=int(s)

print("员工数量: {0}".format(num))
print("录入的薪资:{0}".format(salary))
print("平均薪资:{0}".format(all_salary/num))


else语句

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

while 条件表达式
  循环体
else:
  语句块

或者:

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

如果循环体里的语句被break语句中断,else里的语句是不会执行的,若循环正常的退出,则else里的代码会被执行
[操作]【操作】员工一共4人。录入这4位员工的薪资。全部录入后,打印提示“您已经全部录入4名员工的薪资”。最后,打印输出录入的薪资和平均薪资

salary = []
num = 0
all_salary = 0
for i in range(4):
    s = input("输入员工的薪资:(按下Q退出录入)")

    if s.upper()=="Q":
        print("你已经退出了输入")
        break;
    else:
        num+=1
        salary.append(int(s))
        all_salary+=int(s)
else:
    print("你完成了本次的录入")

print("录入薪资{0}".format(salary))
print("平均薪资{0}".format(all_salary))

循环代码优化

虽然计算机越来越快,空间也越来越大,我们仍然要在性能问题上“斤斤计较”。编写循环
时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算∶
1.尽量减少循环内部不必要的计算
2.  嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
3.局部变量查询较快,尽量使用局部变量

在这里插入图片描述
在这里插入图片描述

其他优化手段

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

使用zip()并行迭代

我们可以通过zip()函数对多个序列进行并行迭代,zip()函数在最短序列"用完"时就会停止。
[操作]测试zip()并行迭代

names = ('aaa','bbb','ccc','ddd')
ages = (12,23,3,13)
jobs = ('teacher','studnet','programmer')

for name,age,job in zip(names,ages,jobs):   #只能迭代三次
    print("{0},{1},{2}".format(name,age,job))

推导式创建序列

推导式是从一个或者多个迭代器快速创建序列的一种方法,他可以将循环和条件判断结合,从而避免夯长的代码,推导式是典型的Python风格(很多优化,效率很高),会使用它代表已经超过Python初学者的水平。

列表推导式

列表推导式生成列表对象,语法如下:

[表达式 for item in 可迭代对象]
或者:[表达式 for item in 可迭代对象 if 条件判断]

>>> a = [x for x in range(1,5)]
>>> print (a)
[1, 2, 3, 4]
>>> b = [x*2 for x in range(1,5)]
>>> print(b)
[2, 4, 6, 8]
>>> c = [a for a in "asdasdada"]
>>> c
['a', 's', 'd', 'a', 's', 'd', 'a', 'd', 'a']
>>> b = [x*2 for x in range(1,10) if(x%2==0)]
>>> b
[4, 8, 12, 16]
>>>cells = [(row,col) for row in range(1,10) for col in range(1,10)]
>>>print(cells)
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (5, 7), (5, 8), (5, 9), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (6, 8), (6, 9), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 7), (7, 8), (7, 9), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 8), (8, 9), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9)]

字典推导式

字典推导式生成字典对象,格式如下:

{key_expression_) value_expression ( for表达式in可迭代对象

类似于列表推导式,字典推导式也可以增加if条件判断式,多个for循环

[操作]统计文本中字符出现的次数

>>>my_text = 'i love you,i love sxt, i love yyy'
>>>char_count  = {c:my_text.count(c) for c in my_text}
>>>print(char_count)
{'i': 3, ' ': 7, 'l': 3, 'o': 4, 'v': 3, 'e': 3, 'y': 4, 'u': 1, ',': 2, 's': 1, 'x': 1, 't': 1}

集合推导式

集合推导式生成集合,和列表推导式的语法类似:

{表达式 for item in 可迭代对象}

或者:

{表达式 for item in 可迭代对象 if 条件判断}

>>> b = {x for x in range(1,100) if x%9==0}
>>> print(b)
{99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}
生成器推导式(生成元组)

初学者(比如我)都会有一个疑问:都有推导式,元组没有?,能不能用小括号呢?

>>> (x for x in range(1,10) if x&9==0)
<generator object <genexpr> at 0x000001E9E9488D60>

我们发现提示的是一个“生成器对象”。显然,元组是没有推导式的。

一个生成器只能运行一次。第一次迭代可以得到数据,第二次迭代发现数据已经没有了。

gnt = (x for x in range(1,100) if x%9==0)
for x in gnt:
    print(x,end = " ")
# 9 18 27 36 45 54 63 72 81 90 99 
for x in gnt:    #指针已经跳出了   所以是无法继续得到数据的
    print(x,end=" ")
#(输出为空)


>>> gnt = (x for x in range(1,100) if x%6==0)
>>> for c in gnt:
	print(c,end=" ")
6 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 
>>> print(c)
96
>>> print(gnt)
<generator object <genexpr> at 0x000001E9E93FFB30>
>>> print(tuple(gnt))
()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python3 的流程控制语句主要有三种:条件语句、循环语句和异常处理语句。 1. 条件语句条件语句用于判断某个条件是否为真,然后根据判断结果执行不同的操作。Python中的条件语句使用if、elif和else关键字来实现。其基本语法格式如下: ``` if condition1: statement1 elif condition2: statement2 else: statement3 ``` 其中,condition1、condition2是判断条件,statement1、statement2、statement3是执行的语句块。 2. 循环语句: 循环语句用于重复执行某段代码,Python中的循环语句有while和for两种。while循环会在指定条件为真时重复执行,而for循环则会遍历一个序列,依次执行其中的代码块。其基本语法格式如下: ``` # while循环 while condition: statement # for循环 for variable in sequence: statement ``` 其中,condition是循环条件,statement是执行的语句块,variable是for循环中的变量,sequence是需要遍历的序列。 3. 异常处理语句: 异常处理语句用于捕获和处理程序运行过程中可能出现的异常情况。Python中的异常处理语句使用try、except和finally关键字来实现。其基本语法格式如下: ``` try: statement1 except ExceptionType: statement2 finally: statement3 ``` 其中,statement1是可能会出现异常的代码块,ExceptionType是可能会出现的异常类型,statement2是出现异常时需要执行的代码块,statement3是无论是否出现异常都需要执行的代码块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值