python学习笔记3 -- 流程控制语句结构

第4章 流程控制语句结构

4.1 顺序结构

按照程序正常的执行顺序,依次执行每条语句。

4.2 输入和输出语句

如果接收用户在键盘上输入一些字符,Python提供了一个input()函数,可以让用户输入字符串,并存放到一个字符串变量里。

注意: 接收的数据默认都是字符串类型

python 复制代码
字符串变量 = input("提示信息:")
python 复制代码
# -----------输入语句----------
username = input("请输入用户名:")
print("用户名是:", username,type(username))

# 默认输入的为字符串
age1 = input("请输入年龄:")
print("年龄是:", age1,type(age1))
age2 = int(input("请输入年龄:"))
print("年龄是:", age2,type(age2))

4.3 输出语句

4.3.1 普通输出

  • 使用 print() 可将内容打印。
  • 多个内容之间可以使用逗号隔开。
  • 可以使用 sep = 来指定输出多个内容时,多个内容之间的分隔符,默认是空格。可以使用 end= 来控制 print() 以什么结尾,默认是\n
  • 普通输出: print( values , sep , end )
    sep:指定分隔符 默认是 空格 ' '
    end:指定结束符 默认是 \n
    格式化输出:
    f"{变量名}"
    f"{变量名=}"
    f"{变量名:.2f}"
    f"{变量名:x^10.2f}"
python 复制代码
# ------------普通输出--------------
print("hello world") # 输出单个值

a = 1
b = 2
print("a = ", a, ",b = ", b) # 输出多个参数值,用逗号分隔

#  可以指定参数的分隔符和结尾符
print("hello", "world", "python", sep="-", end=".")

4.3.2 格式化输出

1、字符串中使用 % 占位
格式符号 说明
%d 十进制整数
%f 浮点数,%.nf可指定显示小数点后n位
%s 字符串
%o 八进制整数 了解
%x 十六进制整数 了解
%e 科学计数法 了解
python 复制代码
# -----------------%占位符-----------------
a = 1
b = 2.5
print("a = %d, b = %f" % (a, b))
2、字符串.format()
python 复制代码
# -----------------字符串.format()-----------------
x = 1
y = 2
# 方式1:不设置指定位置,按默认顺序
print("x = {}, y = {}".format(x, y))

# 方式2:设置指定位置
print("如果想要得到 x = {1}, y = {0},就需要将x = {0}, y = {1}变量的值交换".format(x, y))

# 方式3:设置指定名称
num = 10
flag = True
print("整数:{intValue}, 布尔:{boolValue}".format(intValue=num, boolValue=flag))
3、字符串.format()+数字格式化

: 后可以添加多个参数对数字格式化:

  • 填充字符:例如以 * 填充空白,不写则默认以空格填充。
  • 对齐方式:可选 < 、 ^ 、 > ,分别是左对齐、居中、右对齐。
  • 数字长度:例如指定数字宽度为20,数字长度不足20则进行填充。
  • 数字分隔符:可选 , 和 _ ,每3位进行分隔。
  • 精度:例如.2f表示小数点后保留2位。
python 复制代码
print("{:.2f}".format(3.1415926))   # 3.14
print("{:.2%}".format(0.36)) # 36.00%
4、f字符串
  • 字符串前加上一个 f ,字符串中的{}内写入变量名。
  • {}内变量名后可以加上 = ,打印时会在变量值前加上 变量名=。
python 复制代码
# -----------------f字符串-----------------
name = "Irene"
age = 18
print(f"我的名字是{name}, 我的年龄是{age}")
print(f"我的个人信息:{name=}, {age=}")
5、f字符串 + 嵌套{}转义

{}外再套一层{},即{{}},会转义,即此时{}中的变量名只是普通字符而已。

python 复制代码
# -----------------嵌套{{}}转义-----------------
pi = 3.14
print(f"圆周率{{pi}},{pi=}")
总结:(方法三用的最多)

格式化输出:

f"{变量名}"

f"{变量名=}"

f"{变量名:.2f}"

f"{变量名:x^10.2f}"

python 复制代码
name = "张三"
age = 20
height = 1.78945

# print("姓名"+name+",age="+age+",height"+height)
print("姓名:", name, "年龄:", age)
print("----------------格式化输出 方式一  使用%占位---------------------------------")
print("姓名:%s 年龄:%d 身高:%f" % (name, age, height))
print("姓名:%s 年龄:%d 身高:%.2f" % (name, age, height))

print("八进制:%o 十六进制:%x" %(14,13))
print("%e" %(1234))
print("-----------------------格式化输出 方式二 使用format ---------------------------------")

name = "张三"
age = 20
height = 1.78945

print("姓名:{} 年龄:{} 身高:{:.2f}".format(name, age, height))
#                                             0     1     2
print("姓名:{1} 年龄:{0} 身高:{2}".format(name, age, height)) # 指定参数的下标 从0开始
print("姓名:{1} 年龄:{0} 身高:{2:.2f}".format(name, age, height))
# 给插入的值 填充一变量名
print("姓名:{strvalue} 年龄:{agevalue} 身高:{floatvalue}".format(strvalue = name, agevalue=age, floatvalue = height))

print("姓名:{agevalue} 年龄:{strvalue} 身高:{floatvalue:.2f}".format(strvalue = name, agevalue=age, floatvalue = height))

print("姓名:{:>10}".format("张三"))
print("姓名:{:*>10}".format("张三"))
print("姓名:{:*^10}".format("张三"))
print("姓名:{:^10}".format("张三"))


print("-----------------------格式化输出 方式三 ---------------------------------")
# f""
name = "张三"
age = 20
height = 1.78945
# 直接将变量值插入到字符串内
print(f"姓名:{name},年龄:{age},身高:{height}")
print(f"姓名:{name},年龄:{age:x^10},身高:{height:.2f}")
# print(f"name={name},age={age}")
# {变量名=} 会展示变量名也会展示变量值
print(f"{name=},{age=},{height=}")

pi=3.14
# 原样展示{{变量名}} 外层{} 转义操作
print(f"{{pi}} = {pi}")

4.4 分支语句

4.4.1 单分支

python 复制代码
if 条件表达式:
    语句块1
  • Python程序语言指定任何非0和非空(null)值为true,0 或者 null 为false。
  • if条件表达式后面必须加 :
  • 如果条件成立执行语句块1,否则不执行。
    -语句块1必须有缩进,可以多行语句,以缩进来区分表示同一范围,缩进取消后,就不在分支范围了。
python 复制代码
num = 5
if num % 2 == 0:
    print(f"{num}是偶数")
    print(f"{num}是双数")
    print(f"{num}是可以被2整除的数")

4.4.2 双分支

py 复制代码
if 表达式:
    语句块1
else:
    语句块2
  • if条件表达式后面和else后面都必须加 :
  • 如果条件成立执行语句块1,否则执行语句块2。语句块1和2必须有缩进,可以多行语句,以缩进来区分表示同一范围,缩进取消后,就不在分支范围了。
py 复制代码
num = 5
if num % 2 == 0:
    print(f"{num}是偶数")
else:
    print(f"{num}是奇数")
注意:简单的if双分支 可以使用 ifelse表达式进行替换的

简单的if双分支 分支内容只有一条语句

python 复制代码
age = 3
if age >= 18:
    print("成年了")
else:
    print("没有成年")
print(f"{age} 成年了" if age >= 18 else f"{age} 没有成年")


m, n = 10, 20
if m > n:
    print(m)
else:
    print(n)
print(m if m > n else n)

# 判断一个年份是否为闰年
# 1.能被400整除
# 2.能被4整除 不能被100整除

year = int(input("请您输入年份:"))
if year % 400 == 0 or year % 4 == 0 and year % 100 != 0:
    print(f"{year} 是闰年")
else:
    print(f"{year} 不是闰年")
#这里仅为示例,最好加个(),增加代码可读性
result = f"{year}是闰年" if year % 400 == 0 or year % 4 == 0 and year % 100 != 0 else f"{year} 不是闰年"
print(result)
print("GameOver")

4.4.3 多分支

python 复制代码
if 条件1:
    语句块1
elif 条件2:
    语句块2
elif 条件3:
    语句块3
else: # 可选
    语句块n+1
  • if、elif、else后面别忘了加:
  • 条件从上往下依次判断,上面的条件成立了,下面的条件就不看了
py 复制代码
from random import randint

# 定义年龄并打印
print("此人年龄为", age := randint(0, 100))
if age < 2:
    # 如果年龄<2
    print("这是个婴儿")
elif age < 4:
    # 如果2<=年龄<4
    print("这是个幼儿")
elif age < 13:
    # 如果4<=年龄<13
    print("这是个儿童")
elif age < 20:
    # 如果13<=年龄<20
    print("这是个青少年")
elif age < 65:
    # 如果20<=年龄<65
    print("这是个成年人")
else:
    # 如果65<=年龄
    print("这是个老人")

4.4.4 match-case语句

Python3.10新增了match case的条件判断方式,match后的对象会依次与case后的内容匹配,匹配成功则执行相应语句,否则跳过。其中_可以匹配一切。

python 复制代码
match x:
    case a:
        语句1
    case b:
        语句2
    case _:
        语句3

案例需求:输入星期值,如果星期值是1-5,则输出工作日,如果星期值是6-7,则输出休息日,如果输入的是其他值,就提示输入有误!

python 复制代码
week = int(input("请输入星期值:"))

match week:
    case 1 | 2 | 3 | 4 | 5:
        print("工作日")
    case 6 | 7:
        print("休息日")
    case _:
        print("输入的星期值有误")

4.4.5 嵌套

案例1

给定一个三位的状态码,

左边第一位标识大小写状态(1-大写,0-小写),

第二位标识输入法语言(1-简体中文,0-英语),

第三位标识输入法模式(1-中文,0-英文)。

判断输入法的状态:

  • 如果是大写状态,打印"大写状态"。
  • 如果不是大写状态,判断输入法语言是"简体中文-微软拼音"还是"英语-美式键盘"。
  • 如果是"简体中文-微软拼音",判断是中文模式还是英文模式,并打印。
  • 如果是"英语-美式键盘",打印"英语-美式键盘"。
python 复制代码
state = 0b011
# 判断是否为大写状态
if state & 0b100 == 0b100:
    # 是大写状态
    print("大写状态")
else:
    print("非大写状态")
    # 不是大写状态
    # 判断是否为"简体中文-微软拼音"
    if state & 0b010 == 0b010:
        # 是"简体中文-微软拼音"
        # 判断是否为"微软拼音-中文"
        if state & 0b001 == 0b001:
            # 是"微软拼音-中文"
            print("微软拼音-中文")
        else:
            # 不是"微软拼音-中文"
            print("微软拼音-英文")
    else:
        # 不是"简体中文-微软拼音"
        print("英语-美式键盘")
案例2

输入年月,输出该月总天数有几天

python 复制代码
year = int(input("请输入年:"))
month = int(input("请输入月:"))

if year>0 and 0 < month < 13:
    print("输入的日期合法")
    if month in [1,3,5,7,8,10,12]:
        print(f"{year}年{month}月有31天")
    elif month in [4,6,9,11]:
        print(f"{year}年{month}月有30天")
    elif month == 2:
        if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
            print(f"{year}是闰年,{month}月29天")
        else:
            print(f"{year}是平年,{month}月28天")
else:
    print("输入的日期不合法")

python 复制代码
year = int(input("请输入年:"))
month = int(input("请输入月:"))

if year>0 and 0 < month < 13:
    print("输入的日期合法")
    match month:
        case 4 | 6 | 9 | 11:
            print(f"{year}年{month}月有30天")
        case 2:
            if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
                print(f"{year}是闰年,{month}月29天")
            else:
                print(f"{year}是平年,{month}月28天")
        case _:
            print(f"{year}年{month}月有31天")
else:
    print("输入的日期不合法")

阶段总结

python 复制代码
四.输入和输出
    输入: input() 结果是str类型
    输出:
        普通输出: print(values,sep,end)
                     sep:指定分隔符 默认是 空格 ' '
                     end:指定结束符 默认是 \n
        格式化输出:
                f"{变量名}"
                f"{变量名=}"
                f"{变量名:.2f}"
                f"{变量名:x^10.2f}"

五.分支内容
    if分支:
    单分支:
        if 布尔表达式:
             分支内容

    双分支:
        if 布尔表达式:
            分支内容1
        else:
            分支内容2
        注意:
            1.简单的if双分支 可以使用 if else表达式进行替换
            2.简单的if双分支 分支内容只有一条语句
    多分支:
        if 布尔表达式1:
            分支内容1
        elif 布尔表达式2:
            分支内容2
        ......
        [else:
            分支内容3
        ]
        注意:
            1.else 是可以写也可以不写
            2.当所有的if都不满足时 会执行

4.5 循环结构

在满足某个条件下,重复的执行某段代码。

4.5.1 while循环

1、基本语法格式:

python 复制代码
while ①表达式:
    ②循环体语句

判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。如果条件表达式一直成立,那称之为无限循环,也叫死循环。

执行过程:①成立->②->①成立->②->①成立->②->①成立->②->①不成立结束。

2、while-else语法格式:

while 后可以加上 else,当 while 表达式结果为 False 时会执行 else 中的语句。

python 复制代码
while ①表达式:
    ②循环体语句
else:
    ③语句;

执行过程:①成立->②->①成立->②->①成立->②->①成立->②->①不成立->③结束。

案例1
python 复制代码
# ------------输出5次kyrie------------------
count = 1
while count <= 5:
    print("kyrie")
    count += 1
案例2
python 复制代码
# ------------输出1-100的偶数------------------
num = 2
while num <= 100:
    print(num)
    num += 2
案例3
python 复制代码
# ------------模拟输出进度条------------------
import time
num = 1
while num < 100:
    print("=", end="")
    num += 1
    time.sleep(0.05)
案例4
python 复制代码
# ------------while-else------------------
count = 1
while count <= 5:
    print("kyrie")
    count += 1
else:
    print(f"程序结束{count=}")
练习

1.随机产生一个幸运数字1,1000 666 键盘输入数据猜测幸运数字

请您输入一个数 500

小了

请您输入一个数 700

大了

...

666 找到停止

python 复制代码
# 随机数
from random import randint
lucky_num = randint(1,1000)#生成一个随机幸运数

num = 0 #你所猜的值
l = 0   #目前已知的左范围
r = 1000 #目前已知的右范围
num = int(input("请输入数字:"))

while num != lucky_num:
    if num > lucky_num:
        r = num
        print(f"大了,范围是{l}~~{r}")
        num = int(input("请重新输入数字:"))
    elif num < lucky_num:
        l = num
        print(f"小了,范围是{l}~~{r}")
        num = int(input("请重新输入数字:"))

print(f"恭喜你找到了,{lucky_num=}")

2.获取 1~100内能被3整除或者个位是3的数 要求 每一行输出5个

python 复制代码
count = 0
i = 1
while i <=100:
    if i % 3 == 0 or i %10 == 3:
        print(i,end=" ")
        count += 1
        if count % 5 == 0:
            print()
    i += 1

4.5.2 for循环

Python 的 for 循环确实是语法糖,底层使用迭代器协议,可以用来遍历所有可迭代对象,如列表或字符串。

1、基本语法格式:

python 复制代码
for 临时变量 in 可迭代对象:
    语句
  • for是关键字,in是关键字,
  • 临时变量是自己定义的,用来存储遍历出来元素的变量名字
  • 可迭代对象是要遍历的序列
  • 首先判断是否有下一个元素可以获取,如果有,则将元素取出,赋值给临时变量,执行语句1。
  • 继续判断是否有下一个元素可以进行取出,直到将所有元素都取出,循环结束

2、for-else语法格式:

for 循环后也可以加上 else,循环结束后会执行 else 中语句。

python 复制代码
for 临时变量 in 可迭代对象:
    语句1
else:
    语句2
案例1:遍历字符串
python 复制代码
# -----------------遍历字符串---------------------
for s in "hello":
    print(s)
案例2:range函数

作用:函数可以生成数列,它返回一个可迭代对象。

语法:range([start,] stop[, step])

  • start: 生成序列的起始值--包含 默认0

  • stop:生成序列的结束值--不包含

  • step:生成序列的步长 默认为1

    • 如果为正数:生成的序列是递增的,要求起始值 < 结束值

    • 如果为负数:生成的序列是递减的,要求起始值 > 结束值

    • 如果stop小于或等于 start且step为正数,

      -或者stop大于或等于start且step为负数,

      -range() 函数将生成一个空序列。

python 复制代码
# -------------range(10)产生0-9的数列---------------
for num in range(10):
    print(num)
print("-" * 10)

# -------------range(1,10,2)产生1-10的奇数数列---------------
for num in range(1, 10, 2):
    print(num)

print("-" * 10)

# -------------range(10, 1, -2)产生10-1的偶数数列---------------
for num in range(10, 1, -2):
    print(num)

# -------------打印乘法表---------------
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{i} × {j} = {i * j}", end="\t")
    print()

4.5.3 continue

跳过当前循环块中的剩余语句,继续进行下一轮循环。一般写在if判断中。

python 复制代码
# -------------打印0-9,跳过偶数------------------
for i in range(10):
    if i % 2 == 0:
        continue
    print(i)

4.5.4 break

跳出当前 for 或 while 的循环体,一般写在 if 判断中。

如果for 或 while 循环通过 break 终止,循环对应的 else 将不执行。

python 复制代码
# -------------打印0-9,遇到5结束------------------
for i in range(10):
    if i == 5:
        break
    print(i)
else:
    print("循环正常结束")

4.5.5 pass

pass是空语句,是为了保持程序结构的完整性。

pass不做任何事情,一般用做占位语句。

例如:在一个循环中,如果循环体为空,语法会提示报错,这个时候我们就可以使用pass占位

python 复制代码
for i in range(10):
   pass

循环的else

循环正常结束,会运行else

如果出现break,提前结束循环,则不运行else

python 复制代码
for i in range(4):
    print(i)
else:
    print("else")
print("end")
print()

#使用break
for i in range(4):
    if i == 2:
        break
    print(i)
else:
    print("else")
print("end")
print()
# 使用continue
for i in range(4):
    if i == 2:
        #break
        continue
    print(i)
else:
    print("else")
print("end")

总结

python 复制代码
"""
一.match case
      1.可以等值校验
      2.守卫模式可以进行范围校验
      3.可以匹配列表

循环结构: 满足特定条件 反复执行的代码结构
while:循环
     初始化条件
    while 循环条件:
        循环体
        迭代条件
   else:
        循环正常结束会执行(有break提前结束,则不会执行)

for:循环
    基本语法结构:
        for 变量名 in 可迭代对象:
         将可迭代对象的值 赋值给变量 可迭代对象中有几个值 循环执行几次
else:
   循环正常结束会执行(有break提前结束,则不会执行)

range([start,]stop[,step]):
     start:开始 默认0
     stop:结束 [start,stop)
     step: 步长 正数是正旭  负数 倒序  默认是1
随机数:
    from random import randint
    randint(start,end) [start,end]

嵌套循环: 将一个循环放到另一个循环内
        外层循环: 控制行数  外层执行一次(领导)
        内层循环: 控制列数  内层执行一遍(员工)

break continue pass
   break:结束|跳出循环  只能用在循环内
   continue:结束本次继续下一次 只能用在循环内
   pass:占位

注意:
    1.循环计算时需要变量 统计计算过程中的值 变量的位置 如何思考
        1.1如果记录的是循环总变化(循环结束才能获取最终结果) 循环外
        1.2如果记录的是循环的单次变化(每次循环结果都需要重新计算)    循环内

"""
相关推荐
冷凝娇1 小时前
【Pytest】2026 学习总结
学习·pytest
程序员小八7771 小时前
Java 快速转 Go
java·python·golang
hh9502 小时前
Agent Plan x DeepSeek Harness — Token 预算管理与成本追踪体系技术
人工智能·学习·adg·火山引擎·adg成都社区
梦想的旅途22 小时前
Python实现企业微信文本消息发送
开发语言·python·企业微信
丰锋ff2 小时前
基于 Qt 的智能门禁系统
qt·学习
%473 小时前
DAY41
pytorch·python
小小帅呀3 小时前
学习 VLA 第 2 天:深度学习基础
人工智能·深度学习·学习
敲代码还房贷3 小时前
VMware17 + Ubuntu22.04 共享 完整步骤
linux·python·ubuntu
具身AGI3 小时前
人类第一视角数据走上评测台:物理AI 人类学习路线
学习