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