if 语句
Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块
# 语法(多种写法 if, if-elif, if-else, if-elif-else)if 判断条件1: 执行语句1 ……elif 判断条件2: 执行语句(1) ……elif 判断条件3: 执行语句① ……else: 执行语句㈠ ……# 三元运算,三目运算# mysql : if(表达式, True 时执行,False 是执行)# python: 为True时执行 if 表达式 else 为False时执行a = 30b = 20c = a if a < b else bprint(c) # 20
while 循环
while 循环是个死脑筋,“只要条件在,我就一直干!”,只要你给它的条件是成立的(True),它就会一直循环下去,直到海枯石烂。
注意:while 循环要注意条件的变化,否则容易陷入死循环
sheep_count = 1while sheep_count <= 5:print(f"数到第 {sheep_count} 只羊 🐑")# 一定加上 条件的变化 sheep_count += 1# 相当于 sheep_count = sheep_count + 1print("睡着了...")
for 循环
for 循环适合“有清单,按着做!”的任务。只要你给它一个列表,它就能挨个处理。
for 变量 in 可迭代对象: dosthing 可以 与 变量有关的事情 与变量无关的事情,都可以# 可迭代对象: str list tuple dict set range
例如:清空购物车
shopping_cart = ["键盘", "鼠标", "快乐水", "防脱洗发水"]for item in shopping_cart:print("正在购买:" + item)print("钱花光了,心安理得了!")
神器辅助:range() 函数
如果没有列表,只想单纯重复几次怎么办?用 range()!它是个数字制造机。
'''可迭代数字对象 range( start ,end ,step ) start: 开始的值 end : 结束的值 (不包含) step: 默认为1range(end): 默认取 0-end ,不包含 end '''for i inrange(3): # 会生成 0, 1, 2print("重要的事情说三遍!")
else子句
在循环中接else 子句,else 子句中的内容只有循环正常结束(没有被break)时才会执行
# ----- for -----# 搜索水果fruits = ["苹果", "香蕉", "橘子"]search = "榴莲"for fruit in fruits:if fruit == search:print(f"找到{search}啦!")breakelse:print(f"没有找到{search}...") # 只有循环没有被break中断时才执行# ----- while -----count = 0while count < 3:print(f"count = {count}") count += 1else:print("循环正常结束!") # 只有循环没有被break中断时才执行
循环嵌套
循环嵌套,简单来说,就是一个循环里面再放一个循环。就像俄罗斯套娃一样,一层套一层。
print('---- for + for ---')for zu inrange(1, 4): # 外层循环:控制组数(1到3组)print(f"--- 第 {zu} 组开始了!咬咬牙! ---")for ge inrange(1, 6): # 内层循环:控制个数(1到5个)print(f"做了第 {ge} 个俯卧撑 💦")print("教练:练得不错,明天继续!你:卒 💀")print('---- while + while ---')i = 1while i < 6:print(f'小明同学跑了{i}圈了') j = 0while j < 5 - i:print(f' 小明同学做了{j + 1}个俯卧撑') j += 1 i += 1
性能警告:嵌套层数越多,循环次数呈指数级增长!
在实际开发中,超过3层嵌套就要考虑优化了,否则程序可能会慢得像蜗牛。
循环控制
循环控制语句可以更改语句执行的顺序 。我们很多时候并不需要循环完整的执行完毕,我们需要再一些步骤跳过,甚至是结束循环。
| 控制语句 | 描述 |
| break | |
| continue | 在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。 |
| pass | |
''' pass : 保证 结构 ,在 if 可以用 break : 结束当前所在层级的 循环 ,包括else continue : 跳过当次循环,开始下一次'''# break:强制结束当前循环dates = ["正常人", "正常人", "奇葩", "正常人"]for person in dates:if person == "奇葩":print("遇到奇葩,快溜!")break# 掀桌子,后面的相亲都取消!print("愉快地喝咖啡 ☕")# 重点:break只结束当前所在层级的循环!for i inrange(1, 4):print(f"\n外层循环第{i}次")for j inrange(1, 6):if j == 3:print(f" 遇到{j},内层循环break!")break# 内层循环被break了,但外层循环照常执行!print(f" 内层循环当前值:{j}")# continue:跳过本次,继续下一次fried_rice = ["米饭", "鸡蛋", "葱花", "火腿"]for food in fried_rice:if food == "葱花":print("恶心心,挑出去![吐了呀]")continue# 跳过葱花,继续吃下一个print("吧唧吧唧吃掉:" + food)# pass:还没想好if要做什么# 也可用于函数、类等age = 18if age >= 18:pass# 等会儿再写成年人的逻辑else:print("未成年人")
循环的高级玩法
1. 列表推导式:一行搞定循环
列表推导式,也叫:列表的解析式,推导式主要的用途是让Python对数据结构的处理更加简单,方便,而且更高效 。
# 传统方法squares = []for i inrange(1, 6): squares.append(i ** 2)print(squares) # [1, 4, 9, 16, 25]# 列表推导式(Python特有)squares = [i ** 2for i inrange(1, 6)]print(squares) # [1, 4, 9, 16, 25]# 还能加条件过滤even_squares = [i ** 2for i inrange(1, 11) if i % 2 == 0]print(even_squares) # [4, 16, 36, 64, 100]
2. enumerate:既要索引又要值
# 普通写法fruits = ["苹果", "香蕉", "橘子"]for i inrange(len(fruits)):print(f"第{i+1}个水果是{fruits[i]}")# 优雅写法for i, fruit inenumerate(fruits, 1): # 从1开始计数print(f"第{i}个水果是{fruit}")
3. zip:并行遍历
names = ["张三", "李四", "王五"]scores = [85, 92, 78]for name, score inzip(names, scores):print(f"{name}得了{score}分")