发布于 2026-01-06 1 阅读
0

5个Python初学者常犯的错误

5个Python初学者常犯的错误

仿佛是上辈子的事了,我第一次接触编程,拼凑了一些 HTML、CSS 和 PHP 代码来搭建网站。不久前,我下载了 Borland 的 Turbo C++,并尝试自学(当时进展并不顺利——因为我还年轻!)。

最近我一直在辅导一些大学生,他们都是第一次学习Python。对他们中的一些人来说,这甚至是他们第一次接触编程。这让我对完全的初学者容易犯的错误有了更深入的了解,并能以此为基础改进提供给他们的学习材料。

在多次课程中,出现了一些问题,有些在我预料之中,有些则完全出乎我的意料。那么,事不宜迟,以下就是Python初学者最常犯的错误。

Python 2.7 与 Python 3

这是一个经典案例。大学的每台电脑上都安装了两个版本:2.7 和 3.6。这导致了一些典型问题,这些问题正是并行运行两个不同版本时可能遇到的。

一位学生提出了一个典型的例子:“但我昨天运行的时候它运行正常啊!”……

查看他们的代码后发现,他们不小心在 Idle Python 2.7 中打开了它。

不久之后,另一位沮丧的学生发出了一声叹息。他/她和邻座同学的代码一模一样,但一个运行正常,另一个却报错。没错,一个是用 Python 2.7 运行代码,另一个是用 3.6 运行的。

在这两个例子中,实际问题都是Python 2.7 中的输入函数没有按预期工作。

顺便提一下:新手程序员经常会问的一个问题是:我应该学习哪个版本?依我拙见,你应该先从 3.x 版本入手,然后再去了解一下 2.7 版本(说实话,即使现在也一样)。

无缩进

开门见山地说:官方规定使用空格,而不是制表符。实际操作中:随便用什么都行,让 IDE/linter 来处理转换

与其他使用花括号表示代码块的语言不同( { } ),Python 依赖于空格。

for(i=0; i<10; i++) {
    printf("%d", i);
}

对比

for i in range(0, 10):
    print(i)

缩进行通常跟在以冒号结尾的语句之后。

这就引出了我们接下来要讨论的……

缺少冒号

if/for/while/def/class 等语句末尾的冒号是必需的,但是;对于语法意义来说并非真正必要,这导致初学者倾向于省略语句末尾的冒号。

我的意思是,两者兼而有之:

if foo == bar
    print(foo)


if foo == bar:
    print(foo)

两者在语法上都说得通,但后者 a) 在 Python 中是正确的,b)更容易阅读

使用冒号还可以写成单行语句:

if foo == bar: print(foo)

后面跟着一个空行;当然,我并不提倡这样做。

句子写作

这很奇怪。相当一部分学生会把所有新行的首字母都大写,比如:

should_end = False

while not should_end:
    an_input = input(Type something)

    if an_input == exit:
        should_end = True

变成:

Should_end = False
While not should_end:
    An_input = input(Type something)

    If an_input == exit:
        Should_end = True

这导致他们犯了一大堆错误!

说实话,我真的解释不了。

Python 变量等的命名约定可以在PEP 8中找到,保留字以小写字母开头。

类型转换

这对于学生来说是一个值得思考的问题,尤其是如果他们之前接触过一些比较容易掌握的语言的话。

其中一项任务要求学生读出一个数字,然后将其与 1 进行比较,以切换到特定状态。示例大致如下:

state = 0
a_number = input(Gimme a number: )

if a_number == 1:
    state = 1
else:
    exit()

你能找出问题所在吗?

状态始终未改变,因为 if 语句是在比较字符串和整数,归根结底就是:

if 1 == 1:

解决方法是先将变量转换为整数:

a_number = int(input(Gimme a number: ))

注意:未包含验证功能。

文章来源:https://dev.to/thatonejakeb/5-common-beginner-python-mistakes-27ga