在上一次python的基础语法的一轮学习之后,我进一步学习了python的条件控制和循环语句。
什么是条件语句呢?它是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。通过下图我们可以更加直观地看出条件控制的实现:
什么是循环语句呢?用概念性的话来说,循环就是让计算机重复执行某一段代码,直到满足特定条件才停止。
同样,上一段图帮助理解:
接下来,就是详细梳理一下条件控制和循环语句的使用。
一、条件控制
1、if语句
1.1、常用代码
在运行代码之前,让我们看看if语句的一些常用代码:
| 关键字 / 函数 | 说明 | 示例 |
|---|---|---|
if | 条件判断语句,当条件为 True 时执行代码块 | if x > 0: |
elif | 多条件判断分支(else if) | elif x == 0: |
else | 所有条件不满足时执行 | else: |
1.2、常用举例讲解
让我们看一段代码:
x = int(input"请输入数字:")
if x > 0:
print (x)
elif: x < 0
x += 1
print(x)
else:
x = x -1
print(x)
那么运行的时候我们假设输入了一个3,进行条件判断:
3 > 0(满足第一个如果大于0的条件判断),打印出3,并结束进程;
输入一个-3,进行条件判断:
-3 < 0(不满足第一个大于0的条件,往下判断,满足第二个elif的条件),打印出-2,并结束进程。
那么同样的,当两者都不满足条件即为0时,则判断的是else的条件,打印出-1并结束进程。
条件语句也有它的注意事项:
- 1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
- 2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
1.3、if语句常用运算符
| 操作符 | 描述 |
|---|---|
< | 小于 |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
== | 等于,比较两个值是否相等 |
!= | 不等于 |
1.4、if嵌套
在嵌套 if 语句中,可以把 if...elif...else 结构放在另外一个 if...elif...else 结构中,例如:
if 表达式1: 语句 if 表达式2: 语句 elif 表达式3: 语句 else: 语句 elif 表达式4: 语句 else: 语句
在输入数字后,和之前一样会从上到下进行层级判定来打印结果。
程序从外到内逐层判断:只有外层条件成立,才会进入内层继续判断;外层不成立时,内层语句根本不会被执行。
2、循环语句
2.1、while循环
先让我们看看while循环的一般形式:
while 判断条件(condition):
执行语句(statements)……
再拿简单一点的代码示例来看看:
a = 1
while a < 10:
a += 1
print(a)
只要a一直小于10这个数字,那么他就会一直循环下去,直到不能满足循环条件为止。
所以上方的打印结果会是从2到9的结果。
2.2、无限循环(while True)
当while循环中的条件表达式恒为真时,会进入无限循环模式。
当你使用while True时,系统会默认你的条件恒为真,于是直接进入无限循环。
看一串代码:
while True:
user_input = input("请输入内容(输入 q 退出):")
if user_input == 'q':
break
print("你输入了:", user_input)
print("程序结束")
运行结果:
请输入内容(输入 q 退出):hello
你输入了: hello
请输入内容(输入 q 退出):q
程序结束
如果我们不输入q使循环条件为假,那他将一直循环下去:
while True:
# 1. 做事
# 2. 判断是否该退出
if 退出条件:
break
2.3、for循环
for 循环可以遍历任何可迭代对象,如一个列表或者一个字符串。
for循环的一般格式如下:
for <variable> in <sequence>:
<statements>
else:
<statements>
代码示例:
sites = [1,2,3,4]
for site in sites:
print(site)
运行结果:
1
2
3
4
当列表没有元素时,循环自动退出
2.4、for与while的区别
| 对比项 | for循环 | while循环 |
|---|---|---|
| 循环次数 | 固定/可数,遍历某个序列(列表、字符串、range等) | 不确定,只要条件成立就一直循环 |
| 条件依赖 | 依赖"还有没有下一个元素" | 依赖"条件是否为真" |
| 是否必须手动更新 | 不需要,自动取下一个 | 必须在循环体里手动改变条件变量(否则死循环) |
| 适用场景 | "我要循环N次" 或 "遍历每个元素" | "我要循环直到某个条件不再成立" |
| 何时进循环 | 进入时就知道要循环多少次 | 每次执行前才判断条件 |
二、PEP8规范
1. 代码布局(Code Layout)
1.1、缩进
使用4 个空格进行缩进,禁用 Tab。
续行应对齐或使用悬挂缩进:
正确 - 对齐 foo = long_function_name(var_one, var_two, var_three, var_four) 正确 - 悬挂缩进 foo = long_function_name( var_one, var_two, var_three, var_four) 错误 foo = long_function_name(var_one, var_two, var_three, var_four)
1.2、每行最大长度
限制79 字符(代码),文档字符串/注释 72 字符。
长行可通过括号隐式续行或换行连接。
1.3、空行
顶层函数和类之间用2 个空行。
类内方法之间用1 个空行。
函数内可适当用空行分隔逻辑块。
1.4、import 导入
每个 import 单独一行,按顺序分组:
标准库
第三方库
本地应用/库
import os import sys import requests from mypackage import module
2. 空白与运算符
在运算符两侧、逗号/冒号后加空格,但函数括号内不加:
x = 1 + 2 y = (a + b) * (c + d) spam(ham[1], {eggs: 2}) x=1+2 spam( ham[1], { eggs: 2 } )默认参数、关键字参数赋值处
=两边不加空格(除非带类型注解):
def foo(a, b=5): # ✅ def foo(a, b=5) -> int: # ✅ 有注解可以 def foo(a:int=5): # ✅
切片中冒号两侧不建议加空格。
3. 命名规范(Naming Conventions)
| 场景 | 风格 | 示例 |
|---|---|---|
| 变量、函数、方法 | 小写下划线 | my_var,do_work() |
| 常量 | 大写加下划线 | MAX_WORKERS |
| 类名 | 驼峰(CapWords) | MyClass |
| 模块、包 | 简短小写 | utils.py |
| 私有用例(模块内部) | 单下划线前缀 | _private |
| "name mangling"(类内私有) | 双下划线前缀 | __private |
| 特殊方法 | 双下划线两端 | __init__,__str__ |
| 避免 | 与内置冲突 | 用list_代替list |
4. 表达式与语句
一行只写一条语句。
比较时应把较长的操作数放左边、较短的放右边(提高可读性)。
4.1、错误写法对比
# 应避免 if not x in lst: if x is not None and x > 5:
4.2、函数返回
函数要么显式返回有意义的值,要么统一
return None(不要混用)。
def foo(): return # 隐式返回 None(不推荐混用带值返回)
5. 函数与类内部
5.1、类定义
方法参数第一个命名:实例方法用
self,类方法用cls。
5.2、类型注解
def add(a: int, b: int) -> int: return a + b
5.3、变量命名建议
变量名要做到见名知意(
elapsed_time优于t)。不要用
l、O、I(易混淆 1/0)。
6. 注释与文档字符串
注释用
#并留一个空格,与代码同行时至少间隔两个空格。注释应为完整句子,以句号结束。
# 这是说明性注释 x = 5 # 这是行内注释
6.1、Docstring 规范
每个模块、类、公开方法都应写 docstring。
用三引号
"""...""",结尾引号单独成行。
def add(a: int, b: int) -> int: """返回两个整数之和。""" return a + b
7. 其他注意事项
空函数体:使用
pass或写 docstring 占位。尾随空格:不要残留(Trailing Whitespace)。
编码:Python 3 默认 UTF-8,无需额外声明。
运算符换行:Python 3 建议运算符放在行首。
# Python 3 推荐 total = (a + b + c)
三、学习总结
这一轮学习围绕 Python 的条件控制和循环语句展开,并在最后补充了PEP8 编码规范。整体下来,我对“程序如何做判断、如何重复做事、如何把代码写得更规范”这三件事有了比较完整的认识。
1、条件控制:让程序学会做选择
- if / elif / else 是条件控制的核心结构:程序从上到下依次判断,一旦某个条件成立就执行对应代码块,并跳过其余分支。
- 冒号和缩进是语法的一部分:每个条件后面必须跟冒号,语句块靠缩进划分,相同缩进的语句属于同一个块,缩进错了逻辑就错了。
- 常用运算符要记牢:
<、<=、>、>=、==、!=,其中判断相等要用==,不能用=。 - if 嵌套是逐层判断:只有外层条件成立,才会进入内层继续判断;外层不成立时,内层语句根本不会被执行。
2、循环语句:让程序学会重复
- while 循环依赖条件:条件为真就一直执行,因此循环体里必须手动改变条件变量,否则容易变成死循环。
- while True 是常见的无限循环写法:通常配合
if 退出条件: break使用,例如输入q就退出,这种“先做事、再判断是否退出”的模式在实际开发中很常用。 - for 循环用于遍历可迭代对象:列表、字符串、
range等都可以遍历,元素取完循环自动结束,不需要手动维护计数器。 - for 与 while 的选择:循环次数固定或需要遍历元素时用 for;循环次数不确定、只依赖某个条件是否成立时用 while。
3、PEP8 规范:让代码更易读
- 代码布局:用 4 个空格缩进、禁用 Tab;代码行不超过 79 字符;顶层函数和类之间空 2 行,类内方法之间空 1 行;import 分行并按标准库、第三方库、本地库分组。
- 空白与运算符:运算符两侧、逗号冒号后加空格,但函数括号内不加;默认参数赋值处
=两边不加空格;切片冒号两侧不加空格。 - 命名规范:变量和函数用小写下划线,常量用大写加下划线,类名用驼峰,模块名简短小写,私有成员用单下划线或双下划线前缀。
- 表达式与语句:一行只写一条语句;函数要么显式返回有意义的值,要么统一返回
None,不要混用。 - 注释与文档字符串:注释用
#并留一个空格,写成完整句子;模块、类、公开方法都应写 docstring,用三引号包裹。
4、学习中的问题与改进方向
- 代码示例要写成规范代码块:之前记录示例时把代码拆成了多个段落,既不方便复制运行,也不符合 PEP8 的排版要求,后续应统一用代码块呈现。
- 注意细节写法:例如
input()的括号、elif x < 0:的冒号位置、中文冒号与英文冒号的区别,这些细节一旦写错,程序就无法运行。 - 养成边写边检查的习惯:缩进、空格、命名这些看似琐碎的地方,恰恰是 PEP8 最强调的部分,也是代码可读性的基础。
5、下一步计划
接下来准备在掌握条件控制和循环的基础上,继续学习函数与数据结构(列表、字典、元组、集合),并尝试把 PEP8 规范落实到每一次练习中,做到“能跑通”和“写得好”同时兼顾。