返回目录

第1节:条件语句

在 Python 中,条件语句是控制程序流转的核心。它们根据表达式的真假(Boolean value)来决定执行哪一段代码。

以下是 if / elif / else 多分支判断的详细用法指南:

本节知识点到这里先打个分隔线,喝口水继续。

1. 基础语法结构

最标准的结构是从 if 开始,中间可以有任意多个 elif,最后以可选的 else 结尾。

if 条件A:
    # 当条件A为 True 时执行
    do_something()
elif 条件B:
    # 当条件A为 False 且条件B为 True 时执行
    do_another_thing()
else:
    # 当以上所有条件都不满足时执行
    do_default()
本节知识点到这里先打个分隔线,喝口水继续。

各种用法详解,单一条件判断 (Basic If)

这是最简单的形式,如果不满足条件,则什么都不做。

age = 18
if age >= 18:
    print("你已经成年了")

② 二选一 (If-Else)

必须在两个逻辑分支中选其一执行。

score = 55
if score >= 60:
    print("及格")
else:
    print("不及格")

③ 多分支判断 (If-Elif-Else)

用于处理相互排斥的多个逻辑区间。注意:一旦某个分支满足并执行,后续的分支都会被跳过。

score = 85
if score >= 90:
    level = "优秀"
elif score >= 80:
    level = "良好"
elif score >= 60:
    level = "及格"
else:
    level = "不及格"

④ 嵌套条件判断 (Nested If)

在一个条件分支内部再嵌套另一个条件。

status = "管理员"
password_correct = True
if status == "管理员":
    if password_correct:
        print("准许进入后台")
    else:
        print("密码错误")
    else:
        print("普通用户无权限")
本节知识点到这里先打个分隔线,喝口水继续。

3. 高级与特殊用法

⑤ 条件表达式(三元运算符)

如果你只是想根据条件给变量赋值,可以用这一行搞定的简洁写法:

语法: 变量 = 值1 if 条件 else 值2
# 传统写法
if x > y:
    max_val = x
else:
    max_val = y
    # 三元运算符写法
    max_val = x if x > y else y

⑥ 逻辑运算符结合 (and, or, not)

可以在一个 if 语句中组合多个判断条件。

* and: 两者皆为真。

* or: 只要有一个为真。

* not: 取反。

if (age > 18 and has_ticket) or is_vip:
    print("允许入场")

隐式真值测试 (Truth Value Testing)

Python 中不需要显式写 if x == True,很多对象自带“真假”属性。

* 视为 False 的值None, 0, 0.0, "" (空字符串), [] (空列表), {} (空字典), set()

* 视为 True 的值:除了上述之外的所有内容。

items = []
if not items:
    print("列表是空的")
本节知识点到这里先打个分隔线,喝口水继续。

4. 易错点提醒

* 缩进:Python 强依赖缩进(通常是 4 个空格)。缩进不对会导致 IndentationError

* 冒号:每个 if, elif, else 后面必须带冒号 :

* 执行顺序:多分支语句中,条件的顺序非常重要。如果把 score >= 60 放在 score >= 90 之前,那么 95 分的人也会进入“及格”分支。

* 多重 if vs elif

* 使用多个 if:每个条件都会被独立判断。

* 使用 if-elif:只要一个满足,其他的就不看了。

本节知识点到这里先打个分隔线,喝口水继续。

5. 补充:Python 3.10+ 的新选择

如果你的分支非常多(例如根据不同的字符串执行不同操作),可以考虑使用 Match-Case (结构化模式匹配),它在某些场景下比 if-elif 更清晰:

status_code = 404
match status_code:
    case 200:
        print("成功")
        case 404:
            print("未找到")
            case 500:
                print("服务器错误")
                case _:
                    print("未知状态码")

第2节:布尔逻辑

欢迎来到布尔逻辑(Boolean Logic)的奇妙世界!在代码的世界里,生活是非黑即白的。没有“大概”、“还行”或者“看心情”,只有纯粹的 True(真) 和 False(假)。

我们可以把布尔运算想象成一个极其毒舌且死板的裁判。下面是这位裁判在不同组合条件下的“判罚标准”:

1. AND(与):极致的挑剔狂

逻辑: 必须所有条件都为 True,结果才为 True。只要有一个是 False,全盘皆输。 口诀: “缺一不可,一票否决”。

场景条件 A条件 B结果毒舌点评
相亲门槛有钱长得帅True恭喜,你是偶像剧男主!
相亲门槛有钱长得丑False只有钱?那叫“金主爸爸”,不叫“真爱”。
洗澡警告浴缸有水没停瓦斯True温暖的泡澡时光。
洗澡警告浴缸有水停瓦斯了False这叫“冬泳”,容易感冒,兄弟。

2. OR(或):随和的备胎王

逻辑: 只要有一个条件为 True,结果就为 True。只有全部都是 False,才彻底凉凉。

口诀: “给个理由,我就放行”。

场景条件 A条件 B结果逗比解读
出门借口陪女朋友老板加班True只要有一个理由,兄弟们的酒局你就可以心安理得地鸽了。
垃圾食品它是炸的它甜度爆表True只要占一样,我那该死的大脑就会分泌多巴胺。
起飞条件准时出发延误但有盒饭True既然有肉排饭,晚点两小时我也能原谅机长。
离职念头钱给少了心委屈了True哪怕占一个,我的简历就已经在招聘网站挂好了。

3. NOT(非):杠精的日常

逻辑: 也就是“反转”。True 变 False,False 变 True。

口诀: “你说的都对,但我偏不”。

场景 A: NOT (我很穷)

结果:我很富有。 (虽然现实中很难,但在代码里只需一个 ! 就能翻身)

场景 B: NOT (前任的电话)

结果:接听可能性 = True。(当你设置了“拒绝接听前任”,系统检测到是前任,结果就是“不接”)

4. 复杂组合:成年人的世界充满套路

在现实中,布尔逻辑通常是连环炮。我们来看看这些“套路组合”:

情况一:(有钱 AND 有颜) OR (真心)

实际场景: 择偶标准。

如果你既有钱又有颜,你是满分;

如果你是个穷光蛋但有一颗金子般的真心,你也能通关;

但是,如果你长得丑、没钱、还没心没肺——那就是 (False AND False) OR (False),系统直接弹出:“再见,慢走不送”。

情况二:(下雨 OR 降温) AND (NOT 没带伞)

实际场景: 是否会淋湿。

今天下雨了(True),但我带了伞(NOT 没带伞 = True)。

结果:虽然天气很烂,但我依然是个干爽的打工人。

情况三:(没写完作业 AND 老师没来) OR (写完了作业)

实际场景: 学生的心理状态(是否慌张)。

如果你作业写完了,你稳如老狗。

如果你没写完,但只要老师没来(双重 Buff),你也能暂时假装稳如老狗。

总结:布尔逻辑生存法则

AND 是极致的贪心:即要又要。

OR 是宽容的备选:东方不亮西方亮。

NOT 是无情的反转:把你的梦想(True)变成现实(False)……噢不,程序员一般用它来纠错。

下次当你女朋友问你:“你是不是觉得我胖了,还不爱我了?” 你可以冷冷地回答:NOT (胖了 OR 不爱了)。

免责声明:对该回答导致的任何跪搓衣板行为概不负责。

第3节:循环语句

Python 循环的“财富密码”

1. for 循环:勤劳的搬砖工

for 循环就像一个极其听话的员工,你给他一个清单(列表、字符串、区间),他就会按顺序把活儿干完。

情况 A:遍历列表/字符串

想象你在相亲,手里有一张候选人名单。

candidates = ["路人甲", "隔壁老王", "吴彦祖(分祖)"]
for person in candidates:
    print(f"正在与 {person} 眼神交流...")
    # 输出:
    # 正在与 路人甲 眼神交流...
    # 正在与 隔壁老王 眼神交流...
    # 正在与 吴彦祖(分祖) 眼神交流...

情况 B:搭配 range() 使用

如果你想对生活大喊 5 次“我不干了!”,range() 是最好的计数器。

for i in range(5):
    print(f"第 {i+1} 次尝试辞职,由于余额不足,操作撤回。")

2. while 循环:倔强的死心眼

while 循环只要条件成立,它能干到天荒地老。

情况 A:常规用法

只要还没追到女神,就一直发消息(容易被拉黑,请勿模仿)。

is_single = True
attempts = 0
while is_single:
    attempts += 1
    print(f"这是第 {attempts} 次告白:'你是我的优乐美吗?'")
    if attempts >= 3:
        print("女神:滚。")
        is_single = False # 终于清醒了

情况 B:死循环 (慎用)

就像你的甲方,永远觉得方案还可以再改改。

# while True:
#     print("改个颜色,还是觉得第一版好,再改回来。")

3. continue:战略性尿遁

continue 的作用是:“这一轮我不玩了,直接跳到下一轮。”

场景: 你在吃一盘凉拌折耳根,你只想挑出里面的花生米。

food_plate = ["花生米", "折耳根", "花生米", "折耳根", "生姜(伪装的花生)"]
for food in food_plate:
    if food == "折耳根" or food == "生姜(伪装的花生)":
        print(f"发现{food}!退!退!退!")
        continue # 直接跳过,看下一个
    print(f"吃到一颗香喷喷的 {food}")

4. break:掀桌子不干了

break 的作用是:“这日子没法过了,整个循环给我停掉!”

场景: 作为一个吃货,你吃自助餐,吃到扶墙出为止。

stomach_capacity = 100 # 胃容量
fullness = 0
while True:
    fullness += 30
    print(f"狂吃中,当前饱腹度:{fullness}%")
    if fullness >= 100:
        print("肚皮要炸了!撤退!")
        break # 强行终止循环,账单都不看就跑

5. pass:优雅的“占着茅坑不拉屎”

pass 是空语句。它什么都不做,只是为了让代码不报错。

场景: 你写代码逻辑时,还没想好怎么处理“前任发来的消息”,先占个位置。

ex_message = "在吗?"
if ex_message == "在吗?":
    pass  # 还没想好怎么优雅地装死,先放个 pass 占位
else:
    print("回复:不在,去火星了。")

6. 进阶玩法:for...else(冷门但有用)

这是一个常被误解的语法。else 块只有在循环正常结束(没有被 break 掉)时才会执行。

场景: 寻找真爱。

girls = ["拜金女", "海王姐", "普信女"]
for girl in girls:
    if girl == "灵魂伴侣":
        print("终于等到你,还好我没放弃!")
        break
    print(f"接触过 {girl},感觉八字不合。")
else:
    # 如果把上面的名单翻遍了都没 break,就会执行这里
    print("循环结束:我还是孤独终老吧。")

总结表格

关键字通俗解释搞笑比喻
for按顺序一个一个来军训报数
while只要...就一直干没钱就一直搬砖
continue跳过本次,继续下个遇到前任,绕道走,后面的街还要逛
break彻底结束循环遇到抢劫,直接收摊回家
pass啥也不干,占个位电影院里占座的空包

希望这套“循环全家桶”能让你不仅看懂,有什么想深入了解的吗?

第4节:列表与字典

列表(List)和字典(Dict)

今天就来聊聊 Python 里的两大“护法”:。

如果把 Python 比作一个江湖,列表就是你的“多宝阁”,东西按顺序摆放;而字典就是你的“藏经阁”,想找秘籍得靠“口令”(键)。

一、 列表 (List):有序的“排排坐”

列表就像是一串羊肉串,每个签位都有编号(索引),你可以随时换肉、加菜。

1. 查找:索引与切片

正向索引:从 0 开始。list[0] 是第一个。

反向索引:-1 是最后一个,专门给懒得数数的人准备的。

切片:[start:stop:step]。记住:包头不包尾。

# 你的前任名单
exes = ["翠花", "如花", "酸菜", "大锤"]
print(exes[0])      # "翠花"(初恋总是难忘的)
print(exes[-1])     # "大锤"(最近刚分的那个硬汉)
print(exes[1:3])    # ["如花", "酸菜"](那段不堪回首的中期岁月)
print(exes[::-1])   # 倒序排列,看看你的人生是怎么一步步走偏的

2. 增加:添砖加瓦

append():在末尾加一个。

insert():插队。虽然不文明,但在代码里合法。

extend():把另一个列表合并进来。

exes.append("建国")       # 队伍壮大中
exes.insert(1, "小蝶")    # 强行插入,如花被挤到了后面
exes.extend(["二狗", "旺财"]) # 引入了一批奇奇怪怪的生物

3. 修改:移花接木

直接赋值即可。

exes[2] = "翠兰" # 把"如花"换成"翠兰",心情瞬间好多了

4. 删除:毁尸灭迹

pop():弹出最后一个(或指定位置),还会告诉你删了谁。

remove():指定名字删人(只删第一个匹配的)。

clear():全军覆没。

gone = exes.pop()   # 拜拜了旺财
exes.remove("大锤") # 指定踢走大锤

二、 字典 (Dictionary):精准的“对暗号”

字典不讲顺序,讲的是Key (键) 和 Value (值) 的映射。就像查字典,你得知道拼音(Key)才能找到解释(Value)。

1. 查找:按图索骥

dict[key]:直接查。如果 Key 不存在,程序会崩溃(很暴力)。

get(key, default):温柔查。没有就返回默认值,不会报错。

# 你的私房钱藏匿点
stashed_money = {"臭袜子": 50, "书架": 200, "花瓶": 1000}
print(stashed_money["书架"])          # 200
# print(stashed_money["老婆兜里"])    # 报错!KeyError,这地方绝对没钱
print(stashed_money.get("鞋盒", 0))   # 返回 0,虽然没钱但程序不崩

2. 增加与修改:简单粗暴

如果 Key 存在就是改,不存在就是增。

stashed_money["马桶水箱"] = 5000 # 新增(非常大胆)

stashed_money["臭袜子"] = 0 # 修改(可能被洗了)

3. 删除:断舍离

pop(key):删除指定的键值对。

popitem():删掉最后一个进去的(Python 3.7+ 保证有序)。

del:万能删除关键字。

del stashed_money["臭袜子"] # 彻底放弃这个阵地

4. 遍历:全盘托出

.keys():只要暗号。

.values():只要宝贝。

.items():暗号和宝贝全都要。

for spot, money in stashed_money.items():
    print(f"在{spot}藏了{money}块钱")

三、 总结:该选哪一个?

为了方便记忆,请看下表:

操作列表 (List)字典 (Dict)
存储逻辑靠位置排队(有序)靠名字索引(映射)
查找速度慢(得挨个找,像找人)极快(直接定位,像导航)
增/改append, insert / list[i]=xdict[key] = value
适用场景存一组名字、分数、清单存用户信息、配置参数、对应关系

一句话总结:

如果你需要排队(谁先谁后很重要),选列表;

如果你需要查户口(通过名字找信息),选字典。

你是想往你的“多宝阁”里塞个新前任,还是想给你的“私房钱字典”换个更隐蔽的 Key?

第5节:函数定义

函数定义

函数其实就像是一张外卖订单或者一个自动炒菜机:你丢进去一些食材(参数),它噼里啪啦一顿操作,最后给你吐出一盘热腾腾的饭菜(返回值)。

为了让你不睡着,我们用“深夜食堂”的例子来串联这些知识点。

1. def 声明:招牌挂起来

定义函数就像开店,def 就是 "Define"(定义)的缩写。

def make_joke():
    # 这里是函数体,记得缩进!
    print("为什么程序员分不清万圣节和圣诞节?")
    print("因为 Oct 31 == Dec 25。") # 这是一个只有大佬懂的冷笑话

用法: 没啥好说的,名字别起得太离谱(比如 def a():),不然一个月后的你自己会想穿越回来掐死现在的你。

2. 参数传递:把食材丢进去

函数如果不能传参数,就像只能点“随便”的饭馆,早晚倒闭。

A. 必需参数(位置参数)

你不给,它就罢工。

def feed_pet(pet_name, food):
    print(f"正在给 {pet_name} 喂 {food}... 它看起来快撑死了。")
    feed_pet("旺财", "战斧牛排") # 顺序不能乱,否则就是给牛排喂旺财了

B. 关键字参数:指名道姓

为了防止把“旺财”喂给“牛排”,你可以带上名字。

feed_pet(food="红烧肉", pet_name="富贵") # 顺序乱了也没关系,Python 聪明着呢

3. 默认参数:老板的“潜规则”

有些参数如果客人没要求,我们就按默认的来。

def buy_coffee(size="中杯", sugar="正常糖"):
    print(f"您点的 {size} 咖啡,放了 {sugar},请慢用(小心烫嘴)。")
    buy_coffee()                    # 默认中杯、正常糖
    buy_coffee("大杯")               # 大杯、正常糖
    buy_coffee("特大杯", "不加糖")    # 健身人士的自我救赎

注意: 默认参数必须放在非默认参数的后面。你不能先给个默认的,再来个必需的,Python 解释器会当场 CPU 烧干。

4. 不定长参数:老板,来个全家桶!

有时候你也不知道客人会点多少东西。

A. *args:打包成元组(Tuple)

如果你有很多个食材,但懒得一个一个起名字:

def make_hotpot(*ingredients):
    print("火锅锅底正在翻滚,你丢进了:")
    for item in ingredients:
        print(f"- {item}")
        make_hotpot("毛肚", "黄喉", "鸭血", "香菜(异端!)")

B. kwargs:打包成字典(Dictionary)

如果你想知道每个食材的具体信息(比如单价):

def hire_worker(**details):
    for key, value in details.items():
        print(f"求职者信息 - {key}: {value}")
        hire_worker(name="小王", skill="写代码", salary="200k", hobby="加班")

5. 返回值:老板,货呢?

函数如果没有 return,它执行完就消失在空气中了。return 就是把结果“快递”回给调用者。

def check_wallet(money):
    if money > 1000:
        return "土豪,我们做朋友吧!"
elif money > 100:
    return "够吃顿火锅,还行。"
else:
    return "别看了,去搬砖吧。"
status = check_wallet(50)
print(status) # 输出:别看了,去搬砖吧。

进阶:返回多个值

Python 其实很慷慨,它可以一次性给你好几个东西。

def get_status():
    mood = "想摸鱼"
    battery = "2%"
    return mood, battery # 实际上返回的是一个元组 (tuple)

current_mood, current_power = get_status()

print(f"当前状态:{current_mood},剩余电量:{current_power}")

总结:究极混合用法

如果你把这些全揉在一起,长这样:

def ultimate_function(required, default="默认值", *args, **kwargs):
    print(f"必需参数: {required}")
    print(f"默认参数: {default}")
    print(f"多余的位置参数: {args}")
    print(f"多余的关键字参数: {kwargs}")
    # 调用它:
    ultimate_function("必须给", "改掉默认", "赠品1", "赠品2", boss="马云", money=999)

⚠️ 避坑指南:

参数顺序:位置参数 > *args > 默认参数 > kwargs。(虽然这个规则有点复杂,但记住“必需的在前,杂碎的在后”就对了)。

默认参数的坑:千万别用可变对象(比如列表 [])当默认参数,否则你会发现你的列表在多次调用之间会“偷偷长大”,非常恐怖。

掌握了这些,你就是 Python 界的“米其林主厨”了!还有哪个部分想深入探讨的吗?

💎 综合练习

这是一个员工考勤自动化查询系统,适合综合复习条件判断、循环、列表、字典和函数。

练习目标:
输入员工姓名和打卡时间,让 Python 自动判断考勤状态。这一节就像把前面的知识点装进一个小饭盒,打开就能开练。

完整脚本代码:

def check_attendance(name, time):
    if time <= "09:00":
        return f"{name}:{time} 打卡,正常上班,今天是打工小太阳!"
    elif time <= "09:30":
        return f"{name}:{time} 打卡,迟到了,老板的眉毛抬了一下。"
    else:
        return f"{name}:{time} 打卡,严重迟到,工位差点报警。"


employees = []
print("--- 欢迎使用考勤录入系统(输入 'quit' 结束录入) ---")

while True:
    name = input("\n请输入员工姓名: ")
    if name.lower() == 'quit':
        break

    time = input(f"请输入 {name} 的打卡时间 (格式如 08:30): ")
    employee_data = {"name": name, "time": time}
    employees.append(employee_data)

print("\n--- 正在生成考勤报告... ---")

for employee in employees:
    result = check_attendance(employee["name"], employee["time"])
    print(result)