python基础之流程控制语句

流程控制

# 控制事物的执行流程
流程控制,是计算机运算领域的用语,意指在程序运行时,个别的指令(或是陈述、子程序)运行或求值的顺序。
三大流程控制结构:
1. 顺序结构 :代码从上到下,全部执行
2. 分支结构 :判断语句,代码有选择性的执行
3. 循环结构 :重复执行某一部分的代码
# Python中的流程控制语句
ifforwhilebreakcontinue 五个。Python3.10增加了match。当然也有人会将pass(类似于汇编指令nop,什么也不做的空指令)归类于流程控制

流程控制如何使用

注意事项:
1. 所有的条件都会转为布尔值进行判断
2. 在Python中,我们使用缩进来表示代码的从属关系
# 一般我们使用四个空格来表示一个缩进
3. 不是所有的代码都有从属关系
4. 同属于一个代码块的子代码块缩进量要保持一致
小技巧:如果上面一行代码的结尾是冒号:那么,下一行必缩进

1. 顺序结构

- 在计算机程序中,顺序结构是指按照代码书写的顺序,一条语句接着一条语句执行,没有跳过、重复或其他特殊的结构。
- 程序按照从上到下的顺序逐行执行。

2. 分支结构(if elif else)

单分支(if 结构)

# 基本语法
if 判断条件:
书写条件成立(真),执行的代码
书写条件成立(真),执行的代码
顶格书写,没有缩进的代码,和 if无关, 不管条件是否成立,都会执行
# 1. if 是一个关键字, 和后续的判断条件之间需要一个空格
# 2. 判断条件后边需要一个冒号,不要少了
# 3. 冒号之后,回车,代码需要缩进, 在 pycharm 中会自动进行缩进, 一般是 4 个空格 或者 一个 tab 键 # 4. 所有在 if 代码下方的缩进中书写的代码,属于 if 语句的代码块, 判断条件为 True 的时候会执行
# 5. if 代码块中的代码,要么都执行,要么都不执行
# 6. if 代码块结束之后, 代码要顶格书写(不再有缩进), 表示是和 if 无关的代码
案例
# 1. 使用 input 获取用户的年龄, 类型是
str age = input('请输入你的年龄:')
# 2. 判断年龄是否满足 18 岁
if int(age) >= 18: # 字符串和 int 类型不能比大小, 先类型转换,再比大小
# 3. 如果年龄大于等于(满足)18 岁, 输出 '满 18 岁了,可以进入网吧为所欲为了'
print('满 18 岁了,可以进入网吧为所欲为了')
print('我和 if 判断没有关系,不管怎样,都会执行')

双分支(if-else 结构)

# 基本语法:
if 判断条件:
书写条件成立(真),执行的代码 书写条件成立(真),执行的代码
else:
书写条件不成立(假), 执行的代码 书写条件不成立(假), 执行的代码
# 1. else 是关键字, 后边需要冒号
# 2. 冒号之后回车,同样需要缩进
# 3. 处于 else 代码下方缩进中的内容,属于 else 的代码块
# 4. if 和 else 的代码块, 只会执行其中的一个
# 5. else 需要结合 if 使用
# 6. if else 之间不能有其他顶格书写的内容(不提 elif)
案例
# 1. 使用 input 获取用户的年龄, 类型是 str
age = input('请输入你的年龄:')
# 2. 判断年龄是否满足 18 岁
if int(age) >= 18: # 字符串和 int 类型不能比大小, 先类型转换,再比大小
# 3. 如果年龄大于等于(满足)18 岁, 输出 '满 18 岁了,可以进入网吧为所欲为了'
print('满 18 岁了,可以进入网吧为所欲为了')
# 4. 如果不满足, 输出 '不满 18 岁,回去写作业吧'
else:
print('不满 18 岁,回去写作业吧')

多分支(if-elif-else 结构)

# 基本语法
if 判断条件1:
判断条件1成立,执行的代码
elif 判断条件2: # 只有判断条件1不成立,才会判断 判断条件2
判断条件2成立执行的代码
else:
以上条件都不成立,执行的代码
# 1. elif 也是关键字,后边和判断条件之间需要一个空格,判断条件之后需要冒号
# 2. 冒号之后回车需要缩进, 处在这个缩进中的的代码表示是 elif 的代码块
# 3. 在一个 if判断中,可以有很多个 elif
# 4. 只有 if 的条件不成立,才会去判断 elif 的条件
# 5. 在一个if 中, 如果有多个 elif , 只要有一个条件成立,后续的所有都不再判断
# 6. if elif else 结构, 和 if 的缩进相同的只能是 elif 和 else,如果是其他的,就表示这个判断结构# 结束了
案例:
# 1. 定义 score 变量记录考试分数
score = int(input('请输入你的分数')) # int float
# 2. 如果分数是大于等于90分应该显示优
if score >= 90:
print('优')
# 3. 如果分数是大于等于80分并且小于90分应该显示良
elif (score >= 80) and score < 90:
print('良')
# 4. 如果分数是大于等于70分并且小于80分应该显示中
# and score < 80 可以不写的, 原因只有上边一个判断条件不成立(一定满足 score<80),才会执行 这个 elif score >= 70:
print('中')
# 5. 如果分数是大于等于60分并且小于70分应该显示差
elif score >= 60:
print('差')
# 6. 其它分数显示不及格
else:
print('不及格')

if 嵌套

​ if 嵌套, 是指在一个 if(elif else) 中嵌套另一个 if.
使用场景: 判断条件存在递进关系(只有第一个条件满足了,才会判断第二个条件)

# 基本语法
if 判断条件1:
判断条件1成立,执行的代码
if 判断条件2:
判断条件2成立,执行的代码
else:
判断条件2不成立,执行的代码
else:
判断条件1不成立,执行的代码

实战:猜拳游戏

import random
# 1. 自己出拳(石头(1)/剪刀(2)/布(3)) input (player)
player = int(input('请出拳石头(1)/剪刀(2)/布(3):')) # 不要忘了类型转换
# 2. 电脑随机出拳 (使用随机数模块(工具)完成) (computer)
computer = random.randint(1, 3)
# 3. 判断输赢
# 3.1 玩家胜利
if (player == 1 and computer == 2) or (player == 2 and computer == 3) or (player == 3 and computer == 1):
print('恭喜你获得胜利')
# 3.2 平局 player == computer
elif player == computer:
print('平局')
# 3.3 玩家输了 else
else:
print('输了, 不要放弃, 再来一局')

3. 循环结构

1. 需要重复地执行某些相似的任务,使用用循环结构(就是让 指定的代码 重复的执行)
2. 根据循环次数是否有限,循环可以分为循环次数有限的有限循环和循环次数无限的无限循环。无限循环又称死循环,不过死循环有时并非语法错误,有时候是正好需要死循环的
3. Python中的循环流程控制语句有forwhile 两个。Python中没有do...while、wend语句

死循环和无限循环

死循环: 一般是由写代码的人不小心造成的 bug, 代码一直不停的运行下去
无限循环: 写代码的人故意让代码无限制的去执行,代码一直不停的运行下去 无限循环的
使用场景: 在书写循环的时候,不确定循环要执行多少次 无限循环的使用一般会在循环中添加一个 if 判断, 当 if 条件成立,使用关键字 break 来终止循环

while循环

# 基本语法
设置循环的初始条件(计数器)
书写循环的判断条件
while 判断条件:
需要重复执行的代码
改变循环的初始条件(计数器)
# while 是关键字
案例
# 1. 设置循环的初始条件 (记录说了几遍 我错了)
i = 0
# 2. 书写判断条件
while i < 5:
# 3. 重复执行的代码
print('媳妇, 我错了')
# 4. 改变初始条件,
# i = i + 1
i += 1
while案例1(猜拳游戏)
# 基本语法:
while True:
重复执行的代码 # 可以在 if 的上边
if 判断条件:
break # 关键字的作用就是终止循环, 当代码执行遇到 break,这个循环就不再执行了
重复执行的代码 # 可以在 if 的下边
例(猜拳游戏)
import random
while True: # 不知道你想玩几次,所以使用 无限循环
# 1. 自己出拳(石头(1)/剪刀(2)/布(3)) input (player)
player = int(input('请出拳石头(1)/剪刀(2)/布(3)/退出(0):')) # 不要忘了类型转换
if player == 0:
break # 代码遇到 break,就会终止循环
# 2. 电脑随机出拳 (使用随机数模块(工具)完成) (computer)
computer = random.randint(1, 3)
# 3. 判断输赢
# 3.1 玩家胜利
if (player == 1 and computer == 2) or (player == 2 and computer == 3) or (player == 3 and computer == 1):
print('恭喜你获得胜利')
# 3.2 平局 player == computer
elif player == computer:
print('平局') # 3.3 玩家输了 else
else:
print('输了, 不要放弃, 再来一局')
while案例2(使用循环求 1-100 之间偶数的和)
# 方法一
# 直接找到 1-100 之间所有的偶数,进行相加 2 4 6 8 .. 98 100
# 1. 定义变量 保存求和的结果
num = 0
# 2 定义循环获取 1- 100 之间的偶数并求和
# 2.1 定义初始条件
i = 2
# 2.2 书写循环的条件
while i <= 100:
# 2.3 书写重复执行的代码
num += i # 因为每一次 i 的值会变化 num = num + i
# print(i)
# 2.4 改变计数器
i += 2 # 每次加 2, 才可以保证所有的数字都是偶数
# 3 打印求和的结果
print('求和的结果是:', num)
# 方法二
# 1. 找 1-100 之间所有的数字
# 2. 判断这个数字是不是偶数, 如果是偶数再求和
# 偶数: 能被 2 整除的数, (数字除 2 的余数是 0) i % 2 == 0
num = 0
i = 1
while i <= 100:
# 判断该数字是不是偶数,如果是偶数再求和
if i % 2 == 0:
# print(i)
num += i
# 改变计数器
i += 1
print('求和的结果是:', num)

for 循环

for循环也可以让指定的代码重复执⾏ (循环)
for循环可以遍历容器中的数据(
遍历: 从容器中把数据⼀个⼀个取出
容器: 可以简单理解为盒⼦, 盒⼦中可以存放很多的数据 (字符串 str, 列表 list, 元组 tuple, 字典 dict)
)
for 循环 也可以称为 for 遍历
# 基本语法
for 变量名 in 容器:
重复执⾏的代码
# 1. for 和 in 都是关键字
# 2. 容器中有多少个数据,循环会执⾏多少次(0 个数据,执⾏ 0 次, ...)
# 3. 每次循环,会将容器中数据取出⼀个保存到 in 关键字前边的变量中
for 做指定次数的循环
for 变量 in range(n):
重复执⾏的代码
# 1, range() 是 Python 中的函数, 作⽤使⽤可以⽣成 [0, n) 之间的整数,
# 不包含 n 的 , ⼀个有 n 个数字, 所 以这个循环循环 n 次
# 2, 想让 for 循环循环多少次,n 就写⼏
# 3, 变量的值 也是每次循环从 [0, n) 取出⼀个值, 第⼀ 次取得是 0 ,最后⼀次取得是 n-1
for 变量 in range(a, b):
重复的代码
# range(a, b) :作⽤是⽣成 [a, b) 之间的整数数字, 不包含 b
break 和 continue
breakcontinue 是 Python 中的两个关键字, 只能在循环中使⽤
1. break: 终⽌循环, 即代码执⾏遇到 break, 循环不再执⾏,⽴即结束
2. continue: 跳过本次循环. 即代码执⾏遇到 continue,本次循 环剩下的代码不再执⾏, 继续下⼀次循环

补充:

标志位

语法

flag = True # 初始化标志位
while flag:
# 循环体
if some_condition:
flag = False # 修改标志位,退出循环

使用

flag = True # 初始化标志位
while flag:
user_input = input("请输入:")
if user_input == 'exit':
flag = False # 当用户输入 'exit' 时,修改标志位,退出循环
else:
print("用户输入:", user_input)

登陆案例 (while循环嵌套+tag标志位)

# 登陆案例
user_list = [
{'username': 'user1', 'password': '123'},
{'username': 'user2', 'password': '456'},
{'username': 'user3', 'password': '789'},
]
login_flag = False # 初始化登陆标志位
while True:
username = input("请输入用户名:")
password = input("请输入密码:")
for user in user_list:
if username == user['username'] and password == user['password']:
print("登陆成功!")
login_flag = True # 修改登陆标志位为 True
break
if login_flag:
break # 如果登陆标志位为 True,退出循环
else:
print("用户名或密码错误,请重新输入。")
username = "Dream"
password = "123"
count = 0
tag = True
while tag:
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
while tag:
cmd = input('>>: ')
if cmd == 'quit':
tag = False # tag变为False, 所有while循环的条件都变为False
break
print('run <%s>' % cmd)
break # 用于结束本层循环,即第一层循环
else:
print("输入的用户名或密码错误!")
count += 1

循环分支 (else)

  • 在while循环的后面
    • 我们可以跟else语句
  • 当while 循环正常执行完并且中间没有被break 中止的话
    • 就会执行else后面的语句
  • 所以我们可以用else来验证
    • 循环是否正常结束
count = 0
while count <= 5 :
count += 1
print("Loop",count)
else:
print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循环正常执行完啦 #没有被break打断,所以执行了该行代码
-----out of while loop ------
  • 如果执行过程中被break
    • 就不会执行else的语句
count = 0
while count <= 5 :
count += 1
if count == 3:
break
print("Loop",count)
else:
print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
-----out of while loop ------ #由于循环被break打断了,所以不执行else后的输出语句

循环分支嵌套

  • 循环结构和分支结构可以嵌套在一起,形成复杂的程序逻辑。
for i in range(5):
print("Outer loop, current value:", i)
for j in range(3):
print("Inner loop, current value:", j)
print("Nested loops finished!")
  • 上述代码中,外层循环 for i in range(5): 执行五次,内层循环 for j in range(3): 每次外层循环执行时都会执行三次。这样就形成了嵌套的循环结构。
# 案例2
while 1:
score = input("请输入您的成绩>>") # "100"
if score.isdigit():
score = int(score) # 100
if score > 100 or score < 0:
print("您的输入有误!")
elif score > 90:
print("成绩优秀")
elif score > 70: # else if
print("成绩良好")
elif score > 60:
print("成绩及格")
else:
print("成绩不及格")
else:
print("请输入一个数字")

range关键字

(1)遍历数字序列

语法

for i in range(stop):
# 循环体
for i in range(start, stop):
# 循环体
for i in range(start, stop, step):
# 循环体

使用

for i in range(5):
print(i)
# 输出:
# 0
# 1
# 2
# 3
# 4
for i in range(2, 6):
print(i)
# 输出:
# 2
# 3
# 4
# 5
for i in range(1, 10, 2):
print(i)
# 输出:
# 1
# 3
# 5
# 7
# 9

(2)指定区间

语法

range(start, stop, step)

使用

for i in range(2, 6):
print(i)
# 输出:
# 2
# 3
# 4
# 5

(3)步长

语法

range(start, stop, step)

使用

for i in range(1, 10, 2):
print(i)
# 输出:
# 1
# 3
# 5
# 7
# 9

(4)range + len 遍历序列

原理

my_list = ['apple', 'banana', 'orange']
for i in range(len(my_list)):
# 循环体

使用

my_list = ['apple', 'banana', 'orange']
for i in range(len(my_list)):
print(f"Index {i}: {my_list[i]}")
# 输出:
# Index 0: apple
# Index 1: banana
# Index 2: orange

(5)range创建

原理

numbers = list(range(start, stop, step))

使用

numbers = list(range(1, 6))
print(numbers)
# 输出:[1, 2, 3, 4, 5]

练习题

1. 求偶数元素的和

numbers = [1, 2, 1, 2, 3, 3, 6, 5, 8]
even_sum = sum(num for num in numbers if num % 2 == 0)
print(even_sum)

2. 求和一

  • 计算 1 - 2 + 3 - 4 + ... + 99 中除了88以外所有数的总和
result_sum = sum(num if num != 88 else 0 if i % 2 == 0 else -num for i, num in enumerate(range(1, 100)))
print(result_sum)

3. 求和二

  • 求1+2!+3!+4!+……+10!的和
import math
factorial_sum = sum(math.factorial(i) for i in range(1, 11))
print(factorial_sum)

4. 猜数字游戏

  • 程序随机内置一个位于一定范围内的数字作为猜测的结果,由用户猜测此数字。
  • 用户每猜测一次,由系统提示猜测结果:太大了、太小了或者猜对了,直到用户猜对结果或者猜测次数用完导致失败。
  • 设定一个理想数字比如:66, 让用户三次机会猜数字,如果比66大,则显示猜测的结果大了; 如果比66小,则显示猜测的结果小了; 只有等于66,显示猜测结果正确,退出循环。
  • 最多三次都没有猜测正确,退出循环,并显示‘都没猜对,继续努力’。
import random
ideal_number = 66
guess_count = 3
while guess_count > 0:
user_guess = int(input("Enter your guess: "))
if user_guess > ideal_number:
print("Your guess is too large.")
elif user_guess < ideal_number:
print("Your guess is too small.")
else:
print("Congratulations! You guessed the correct number.")
break
guess_count -= 1
if guess_count == 0:
print("You didn't guess correctly. Keep trying!")

5. 打印菱形小星星

*
***
*****
*******
*********
***********
***********
*********
*******
*****
***
*
def print_diamond(rows):
for i in range(1, rows + 1):
print(" " * (rows - i) + "*" * (2 * i - 1))
for j in range(rows - 1, 0, -1):
print(" " * (rows - j) + "*" * (2 * j - 1))
print_diamond(7)

6. 猜年龄游戏

(1)基础版(普通要求)

  • 只允许输错3次,输入正确直接结束
age=18
count=0
while count<3:
count+=1
guess = int(input(">>:"))
if guess > age :
print("猜的太大了,往小里试试...")
elif guess < age :
print("猜的太小了,往大里试试...")
else:
print("恭喜你,猜对了...")

(2)高级版(增加次数)

  • 当输错3次之后,不要直接结束,问用户是否还要在次输入,如果要,继续输入,如果不要,直接结束
right_age = 22
count_start = 3
while count_start > 0:
age_input = input("请输入你的年龄:>>>")
if right_age == age_input:
print(f"你真聪明,真实年龄就是{age_input}")
else:
count_start -= 1
print(f"加油呀,你还有{count_start}次机会")
if count_start == 0:
count = input(f"你的机会耗尽了,请选择是否继续游戏:>>>是或否")
if count == '是':
count_start = 3
else:
break

7. 打印九九乘法表

for i in range(1,10):
for j in range(1,i+1):
print('%s*%s=%s' %(i,j,i*j),end=' ')
print()

8. 打印金字塔

(1)分析

'''
#max_level=5
* # current_level=1,空格数=4,*号数=1
*** # current_level=2,空格数=3,*号数=3
***** # current_level=3,空格数=2,*号数=5
******* # current_level=4,空格数=1,*号数=7
********* # current_level=5,空格数=0,*号数=9
# 数学表达式
空格数=max_level-current_level
*号数=2*current_level-1
'''

(2)实现

max_level=5
for current_level in range(1,max_level+1):
for i in range(max_level-current_level):
print(' ',end='') #在一行中连续打印多个空格
for j in range(2*current_level-1):
print('*',end='') #在一行中连续打印多个空格
print()
posted @   Xiao0101  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示

目录