当前位置: 首页 > article >正文

python学习笔记(3)——控制语句

控制语句

        我们在前面学习的过程中,都是很短的示例代码,没有进行复杂的操作。现在,我们将开始学习流程控制语句。 前面学习的变量、数据类型(整数、浮点数、布尔)、序列(字符串、列表、元组、字 典、集合),可以看做是数据的组织方式。数据可以看做是“砖块”! 流程控制语句是代码的组织方式,可以看做是“混凝土”。

        一个完整的程序,离不开“砖块”,也离不开“混凝土”。他们的组合,才能让我们建立从小到“一个方法”,大到“操作系统”,这样各种各样的“软件”。

一、选择结构

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

1.单分支选择结构

if 语句单分支结构的语法形式如下:

        if 条件表达式:

                语句/语句块

其中:

        条件表达式:可以是逻辑表达式、关系表达式、算术表达式等等。

        语句/语句块:可以是一条语句,也可以是多条语句。多条语句,缩进必须对齐一致。

num =input("输入一个数字:")
if int(num)<10:
    print(num)
条件表达式详解

在选择和循环结构中,条件表达式的值为False的情况如下:

        False、0、0.0、空值None、空序列对象(空列表、空元祖、空集合、空字典、空字 符串)、空range对象、空迭代对象。

        其他情况,均为True。

·条件表达式中,不能有赋值操作符“=”

2.双分支选择结构

双分支结构的语法格式如下:

        if 条件表达式 :

                语句1/语句块1

        else:

                语句2/语句块2

三元条件运算符

        Python 提供了三元运算符,用来在某些简单双分支赋值情况。三元条件运算符语法格式如 下:

条件为真时的值 if (条件表达式) else 条件为假时的值

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

3.多分支选择结构

多分支选择结构的语法格式如下:

        if 条件表达式1:

                语句1/语句块1

        elif 条件表达式2:

                语句2/语句块2

                . . .

        elif 条件表达式n:

                语句n/语句块n

        [else:

                语句n+1/语句块n+1

        ]

二、循环结构

        循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为True,如果 为True则重复执行循环体里的语句。图示如下:

1.while 循环

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

i = 0
sum = 0
sum_o = 0
sum_e = 0
while i <= 100:
    sum = sum + i
    if i % 2 == 1:
        sum_e = i + sum_e
    else:
        sum_o = sum_o + i
    i = i + 1
print(sum)
print(sum_e)
print(sum_o)

# 5050
# 2500
# 2550

2.for 循环和可迭代对象遍历

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

                for 变量 in 可迭代对象:

                        循环体语句

遍历一个元组或列表:

for x in (20,30,40):
    print(x*3)
可迭代对象

Python 包含以下几种可迭代对象:

        1. 序列。包含:字符串、列表、元组

        2. 字典

        3. 迭代器对象(iterator)

        4. 生成器函数(generator)

        5. 文件对象

遍历字符串中的字符:

for i in 'love you':
    print(i)

遍历字典

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.items():#遍历字典所有的"键值对"
    print(x)
for x in d.values():#遍历字典所有的value
    print(x)
①range 对象

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

range(start, end [,step])

        生成的数值序列从start开始到end结束(不包含end)。若没有填写start,则默认从0 开始。step是可选的步长,默认为1。如下是几种典型示例:

        for i in range(10) 产生序列:0123456789

        for i in range(3,10)产生序列:3456789

        for i in range(3,10,2) 产生序列:3 5 7 9

例1.计算累加和

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

sum = 0
sum_e = 0
sum_o = 0
for i in range(1,101):
    sum = sum + i
    i = i + 1
for i in range(1,101,2):
    sum_e = sum_e + i
    i = i + 1
for i in range(2,101,2):
    sum_o = sum_o + i
    i = i + 1   
print(sum)
print(sum_e)
print(sum_o)

# 5050
# 2500
# 2550
②嵌套循环和综合练习

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

例1.打印如下图案

for i in range(5):
    for j in range(5):
        print(i,end = '\t')
    print( )    #仅用于换行
例2.打印九九乘法表
for i in range(1,10):
    for j in range(1,i+1):
        print(j,'*',i,'=',i*j,end = '\t')
    print( )    #仅用于换行


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

例3.用列表和字典存储下表信息,并打印出表中工资高于15000的数据

例3.用列表和字典存储下表信息,并打印出表中工资高于 15000 的数据
r1= dict(name="高小一",age=18,salary=30000,city="北京")
r2= dict(name="高小二",age=19,salary=20000,city="上海")
r3= dict(name="高小三",age=20,salary=10000,city="深圳")
tb = [r1,r2,r3]
for x in tb:
    if x.get('salary') > 15000:
        print(x)


#{'name': '高小一', 'age': 18, 'salary': 30000, 'city': '北京'}
#{'name': '高小二', 'age': 19, 'salary': 20000, 'city': '上海'}
③break 语句

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

使用 break 语句结束循环:

while 1:
    a = input("请输入字母,当输入Q或者q时循环跳出")
    if a == 'Q' or a == 'q':
        break
    else:
        print(a)
④continue 语句

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

        例4.要求输入员工的薪资,若薪资小于 0 则重新输入。最后打印出录入员工的数量和薪资明细,以及平均薪。
employee_num = 0
salary_sum = 0
salary_list = []
while 1:
    salary = input("请输入员工薪资,当输入q或Q时结束")
    
    if salary == "q" or salary == "Q":
        print("录入完成,退出系统")
        break

    if float(salary) < 0:
        continue

    employee_num = employee_num + 1
    salary_list.append(salary)
    salary_sum = salary_sum + float(salary)
    print("员工总数为:",employee_num)
    print("员工薪资总数为:",salary_sum)
    print("员工薪资平均数为:",salary_sum/employee_num)
    print("员工薪资列表为:",salary_list)
⑤else 语句

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

        while 条件表达式:

                循环体

        else: 语句块

或者:

        for 变量 in 可迭代对象:

                循环体

        else: 语句块

        例5.员工一共 4 人。录入这 4 位员工的薪资。全部录入后,打印提示“您已经全部录入 4 名员工的薪资”。最后,打印输出录入的薪资和平均薪资。
employee_num = 0
salary_sum = 0
salary_list = []
for i in range(4):
    salary = input("请输入共四名员工的工资(按q或Q退出): ")
    if salary == 'q' or salary == 'Q':
        print("录入完成,退出")
        break
    if float(salary) < 0:
        print("输入非法,请重新输入")
        continue
    salary_list.append(float(salary))
    salary_sum += float(salary)
    employee_num += 1
    print("当前录入员工个数为:", employee_num)
    print("当前录入员工工资总和为:", salary_sum)
    print("当前录入员工工资平均数为:", salary_sum / employee_num)
    print("当前录入员工工资列表为:", salary_list)

⑥循环代码优化

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

        1. 尽量减少循环内部不必要的计算

        2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。

        3. 局部变量查询较快,尽量使用局部变量

三、综合练习


http://www.kler.cn/a/319791.html

相关文章:

  • sql专题 之 where和join on
  • 现代无线通信接收机架构:超外差、零中频与低中频的比较分析
  • 信号-3-信号处理
  • 代码随想录第二十一天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
  • 优化时钟网络之时钟抖动
  • LeetCode【0033】搜索旋转排序数组
  • Java获取Object中Value的方法
  • 数据结构-3.链表
  • 无人机在隧道中如何实现在无卫星信号下的自主导航
  • 将ipad作为数位板使用教程/出现延迟拖拽怎么办?
  • 在jupyter notebook中取消代理服务器的解决方案
  • 编程遇到问题了?一个命令让 AI 解决你的困惑!
  • Android——内部/外部存储
  • HTTP常见状态码 HTTP的逐步发展(通俗易懂版)
  • 利士策分享,赚钱有道,底线思维不可抛
  • 网络安全-shire写任务计划、反弹shell、写私钥、反序列化
  • 机器学习算法与Python实战 | 三万字详解!GPT-5:你需要知道的一切(上)建议收藏!
  • 性能监控之Python实战SkyWalking链路追踪
  • [java][git]git学习
  • Linux动态库防止逆向编译参数
  • keil的debug功能
  • IT行业的未来:技术变革与创新的持续推动
  • 解决fatal: unable to access ‘https://........git/‘: Recv failure: Operation time
  • ~关于 CAS 机制、ABA问题、偏向锁、synchronized 实现原理、信号量、Callable
  • Prompt最佳实践|如何用参考文本让ChatGPT答案更精准?
  • 深入理解Kubernetes供应链安全:CKS考试核心知识点实践