python学习第四天(上)

今天来学习条件语句和循环

条件语句

学完数据结构之后,我们来学习条件语句。

基本语法结构:

1.if语句

当条件为True时执行特定的代码块(缩进部分)

如果条件为False则跳过特定的代码块(缩进部分)

比如:

password=int(input())
if password == 8888:     # 条件为 True 时执行的代码(注意缩进)
    print('登陆成功')

2.if-else语句

如果if判断为False,不执行if的缩进,执行else
password=int(input())
if password == 8888:     # 条件为 True 时执行的代码(注意缩进)
    print('登陆成功')
else:
    print('登录失败')

缩进通常为四格(Tab键),不要忘记:

3.if-elif-else语句

如果只有两种判断还是太简单了,所以可以用elif来做更细致的判断。

下面来写一个完整的判断:

# 获取用户输入并去除前后空格
password = input("请输入密码:").strip()

# 先判断是否为空输入
if not password:
    print("请输入密码")
# 尝试判断密码是否正确(假设正确密码是8888)
elif password == "8888":
    print("登录成功")
# 其他情况均视为密码错误
else:
    print("登录失败")

分析一下:

1.改用字符串更严谨,因为如果用户忘记输入密码直接回车的时候,如果是空字符串可以执行,但是空格是不能被转换为整数的,会报错ValueError。

2.首先判断用户是否直接回车(空输入),如果为空输入也就是空字符串,password判断为False,再加上not,所以当输入为空的时候,if条件为True,执行if条件的特定代码块。

3.密码正确执行elif,错误执行else。

elif是else if的缩写,可以写多个elif,但if和else只能有一个。

关于条件语句,从上往下依次判断,如果某个判断为True,就执行它的缩进,然后忽略掉后面的elif和else

再举个例子:

score = 85

# 判断成绩等级
if score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")
elif score >= 60:
    print("及格")
else:
    print("不及格")
# 输出:良好

布尔表达式:

只要返回的值是布尔值(True/False),则为布尔表达式。比如比较运算(<、>、==、!=)、逻辑运算(and、or、not),不包括四则运算。

在进行比较运算的时候,要注意数据类型是否统一。

嵌套条件:

条件语句可以嵌套,实现更复杂的判断逻辑,比如:
age = 17
id = True

if age >= 18:
    print("已成年")
    if id:
        print("可以进入")
    else:
        print("请出示身份证")
else:
    print("未成年,不能进入")
# 输出:未成年,不能进入

格外情况:

a = 1
if a:
… print(‘True’)

当if后面这个数是一个非零非空(非零值、非空字符串、非空列表…相当于不是None、不为0)的值时,就判断为True,否则为False。

match语句:

当我们针对某个变量匹配若干情况时,可以用match语句:
match 变量:
    case 模式1:
        # 变量匹配模式1时执行
    case 模式2:
        # 变量匹配模式2时执行
    case _:  # 通配符,匹配所有未被前面模式匹配的情况
        # 默认执行

case _表示任意值

匹配值:

匹配具体值

status = 200

match status:
… case 200:
print(“请求成功”)
…case 404:
print(“资源未找到”)
… case 500:
print(“服务器错误”)
… case _:
print(“未知状态码”)

匹配数据结构:

匹配数据结构(解构)

point = (3, 4)

match point:
… case (0, 0):
print(“原点”)
…case (x, 0):
print(f"在x轴上,x={x}“)
…case (0, y):
print(f"在y轴上,y={y}”)
…case (x, y):
print(f"在平面上,坐标({x},{y})")

在match语句中的case模式中,x、y这样的名称相当于模式变量,不需要提前定义

当执行case(x,0)的时候,会自动执行:

1.检查point是否包含两个元素的元组

2.检查第二个元素是否为0

3.如果匹配成功,会自动将第一个元素的值赋值给变量x(即使x未被定义)

这种机制叫解构赋值,允许在匹配模式的同时提取数据。模式变量会在匹配成功时被临时创建,仅在case块有效。

这种语法让代码更简洁,无需提前定义变量,也无需手动提取元组中的元素

匹配列表:
`match` 匹配列表的关键规则:

1.列表模式需要和 args 的「元素顺序」完全对应

2.用 *变量名 表示「捕获剩余所有元素」

3.模式中的固定值(如 'gcc''clean')必须完全相等才会匹配

args = ['gcc', 'hello.c', 'world.c']
# args = ['clean']
# args = ['gcc']

match args:
    # 如果仅出现gcc,报错:
    case ['gcc']:
        print('gcc: missing source file(s).')
    # 出现gcc,且至少指定了一个文件:
    case ['gcc', file1, *files]:
        print('gcc compile: ' + file1 + ', ' + ', '.join(files))
    # 仅出现clean:
    case ['clean']:
        print('clean')
    case _:
        print('invalid command.')

第一个case:表示列表里面只有一个’gcc’字符串,没有指定文件名

第二个case:表示了列表第一个字符串,第二个字符串绑定到file1,后面任意个字符串绑定到*files(*是函数的参数),表示至少指定一个文件

第三个case:表示列表仅有’clean’一个字符串

第四个case:表示其它所有的情况

由此可见match语句更加简洁方便,如果用if语句,会很麻烦:

args = ['gcc', 'hello.c', 'world.c']
if args == ['gcc']:
    print('gcc: missing source file(s).')
elif len(args) >=2 and args[0] == 'gcc':
    file1 = args[1]
    files = args[2:]  # 手动截取剩余元素
    print(f'gcc compile: {file1}, {", ".join(files)}')
elif args == ['clean']:
    print('clean')
else:
    print('invalid command.')
复杂匹配:
match语句可以匹配单个值、多个值、或者一定范围,并且把匹配的值给变量:
age = 15

match age:
    case x if x < 10:
        print(f'< 10 years old: {x}')
    case 10:
        print('10 years old.')
    case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18:
        print('11~18 years old.')
    case 19:
        print('19 years old.')
    case _:
        print('not sure.')

1.第一个case:表示当age<10的时候成立,且赋值给变量x

2.第二个case:匹配单个值

3.第三个case:匹配多个值,用|分隔。

4.最后一个case_:表示匹配任意值。

if条件语句和match语句对比:

if条件语句

判断依据:布尔表达式的真假

灵活性:极高,可处理任意条件

代码简洁性:复杂条件可能冗长

适用场景:任意条件判断(范围、逻辑组合)

match语句

判断依据:变量与模式的匹配关系

灵活性:适合固定模式的匹配,结构更严谨

代码简洁性: 模式清晰时更简洁,尤其适合解构

适用场景: 固定值匹配、数据结构解析、匹配列表、枚举等

关于match语句的枚举,这个后面学到枚举的时候会说。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值