news 2026/10/24 6:35:34

条件控制循环和调试与PEP8规范的学习感想

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
条件控制循环和调试与PEP8规范的学习感想

在上一次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 单独一行,按顺序分组:

    1. 标准库

    2. 第三方库

    3. 本地应用/库

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 规范落实到每一次练习中,做到“能跑通”和“写得好”同时兼顾。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/24 6:31:29

ABAP 里的断肠草,是一条反复生效的错误规则

一笔销售订单刚保存成功,库存也已预留,夜间作业却再次把它当成待处理订单。第二天,作业又处理了一遍。界面上看不到一场轰轰烈烈的故障,业务数据却一天比一天偏离正确状态。用《仙剑奇侠传 1》的物品作比喻,这种问题很像断肠草。 《仙剑奇侠传 1》的物品资料将断肠草列为…

作者头像 李华
网站建设 2026/10/24 6:28:02

评测迭代执行事件新鲜度分区器:边界规则、可运行源码与验收

项目编号&#xff1a;20261021-003。需求方向来自当日公开产品简介&#xff1b;所有示例均为独立合成数据&#xff0c;不是产品真实日志。要解决的具体问题 按显式参考时刻和有效期&#xff0c;将时间戳分成有效、到期和未来三组&#xff0c;等于有效期即到期。本工具只处理主动…

作者头像 李华
网站建设 2026/10/24 6:23:12

土木本科生的 STM32 探索之旅:以物联网监测为起点(第一篇)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 6:22:05

FPGA实现LFM脉冲压缩:Vivado工程与匹配滤波详解

简介&#xff1a;LFM_comp.rar 是一份面向 FPGA 开发者和雷达信号处理学习者的 Verilog 实现资源&#xff0c;用于在 Vivado 环境中完成线性调频&#xff08;LFM&#xff09;信号的下变频与匹配滤波处理。LFM 信号广泛应用于雷达、通信和电子战系统&#xff0c;该压缩包内的代码…

作者头像 李华
网站建设 2026/10/24 6:17:21

PCA9422与STM32F469II的硬件级电源协同设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 6:17:11

本体论实战指南:从概念建模到生产推理的四层架构

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华