在 Python 编程过程中,很多初学者和经验不足的开发者常常会遇到一些常见的错误。本文总结了一些我踩过的也是很常见的 Python 易错点,并提供了相应的解释,希望能帮助大家规避这些问题,提高编码效率。
1. Python 代码缩进
Python 依赖缩进来标识代码块,因此缩进错误往往是初学者最容易踩的坑之一。
1.1 if 语句中的缩进
x = 8
if x > 5:
print("x 大于 5")
print("这条语句不属于 if 代码块")
上面代码中,print("x 大于 5")
只有在 x > 5
时才执行,而 print("这条语句不属于 if 代码块")
一定会执行,因为它没缩进。
1.2 循环结构中的缩进
for i in range(3):
print(f"外部循环:{i}")
for j in range(2):
print(f" 内部循环:{j}")
print("结束内部循环")
print(f"外部循环:{i}")
属于外部循环。
print(f" 内部循环:{j}")
进一步缩进,属于内部循环。
print("结束内部循环")
缩进和外部循环一致,但不属于内部循环,因此每次外部循环执行 1 次。
1.3 类和方法中的缩进
class Mammal:
def __init__(self):
print("人类自然语言")
def sex(self):
print("生物性别")
__init__
方法的缩进表示它属于 Mammal
类,sex方法同样如此。
print("人类自然语言")
进一步缩进,表示它属于 __init__
方法。
1.4 函数作用域中的缩进
def greet():
print("你好")
print("欢迎使用 Python")
print("这是函数外部代码")
greet()
greet()
内部的 print
语句只有在函数被调用时才执行。
print("这是函数外部代码")
没有缩进,因此会直接执行。
2. for 和 while 循环的区别
for和 while是两种常见的循环结构,它们的适用场景有所不同:
for 循环:用于已知的循环次数,可迭代对象(字符串、字典等)遍历。
while 循环:用于未知的循环次数,适用于条件判断。
2.1 for循环的基本用法(以对一个序列进行遍历为例)
fruits = ["桔子", "香蕉", "苹果"]
for fruit in fruits:
print(fruit)
输出的结果便是(fruits 中字符串依次被打印出来):
for循环里面一般可以使用range()指定循环次数:
for i in range(3): # range(3) 生成 [0,1,2],共循环 3 次
print(i)
此时循环次数是固定的,一共执行 3 次。打印出来的结果是:
2.2 while循环的基本用法
在 Python 的 while
循环中,并不一定需要设置初始值,但通常情况下,使用 while
需要有一个变量来控制循环条件,而这个变量往往需要初始化。
2.2.1需要初始值的情况:
当 while
依赖于某个变量作为循环条件时,该变量通常需要先初始化,否则会导致错误。
x = 0 # 这里 x 需要一个初始值
while x < 5:
print(x)
x += 1
这里 最开始x = 0
初始值是必要的,否则 while x < 5
这一行就会出现NameError: name 'x' is not defined
。这段代码的意思是初始x=0,每次循环打印x的值,x依次加1,并且当x不满足小于5时结束循环。
2.2.2不需要设置初始值的情况:
当while
语句的判断条件不依赖于某个事先定义的变量,而是直接基于输入或某些函数的返回值,则不需要显式初始化变量。(以基于用户输入为例)
while input("请输入 'exit' 退出:") != "exit":
print("继续循环")
print("循环结束")
代码解读:当输入的内容不等于exit成立时,打印“继续循环”, 否则就打印“循环结束”。
3. end关键字
在 print
语句中,默认会换行,但 end
关键字可以控制输出格式:
for i in range(3):
print(i, end=" ") # 输出:0 1 2 (用空格隔开)
4.for...else
和 while...else结构
4.1 for
和 while
循环的 else
语句仅在循环没有 break
时执行:
(没有break的案例)
for i in range(3):
-
range(3)
生成一个 从 0 到 2(不包括 3) 的整数序列,相当于[0, 1, 2]
。 -
i
依次取值0 → 1 → 2
,并执行print(i)
语句。
else:
-
当
for
循环 正常执行完所有循环 (没有被break
提前终止) 时,执行else
语句中的代码。 -
这里
else
部分的print("循环正常结束")
会被执行。
for i in range(3):
print(i)
else:
print("循环正常结束")
输出的结果为:
4.2如果 for
循环中有 break
,则 else
不执行(含有break的案例):
for i in range(3):
print(i)
if i == 1:
break
else:
print("循环正常结束") # 不会执行
输出的结果为:
(循环被 break
语句提前终止,则 else
代码不会执行,即“循环正常结束”不会被打印出来。)
总结
-
Python 依赖缩进,不当的缩进可能导致逻辑错误或
IndentationError
。 -
for
和while
循环的else
语句仅在循环没有break
时执行。 -
continue
跳过当前循环的剩余部分,break
直接终止循环。 -
end
关键字可以控制print
语句的输出格式。
希望我的这些总结能帮助你在 Python 编程中避免常见的错误,提高编码效率! 🚀