这些年,你们一起踩过的坑(1)

编程教室创建5年多了,回答的问题不说上万也有好几千了。尽管大多数的问题在过去的文章以及论坛上都有讲过不止一遍,但因为不断有新人到来,难免还是被这些小坑磕磕绊绊一番。

今天就把平常被提问频率较高的一些问题整理出来,再次统一回答。基本都是非常早期阶段的问题,其中一定有你遇到过或将会遇到的。已经有一定基础的同学也可以对照下,这些问题涉及的概念,自己是否都已清楚。

因为篇幅问题,会分几篇来讲,如果你们有希望我讲解的,请在留言中提出。如果是普遍问题,我会放在后续中。

1. 我该下载哪个 Python 版本?

去官网 python.org 下载最新版本即可,无需严格按照教程里的小版本。如果连不上官网,也可以从文末“阅读原文”进入“学习资源”-“相关下载”,找到网盘里替你们下载好的安装包(不是实时最新版,但可以用)。

如果官网上的最新版本按钮没有替你自动下载,可从列表中选择 executable installer。如果你确信自己的系统是 64 位的,可以选 x86-64,否则选 x86 也没有问题。

我刚发现现在官网已经不再默认放置 2.7 版本的下载按钮了。所以关于 2 还是 3 的老问题也别纠结了,顺应潮流装 3 吧。我们的教程文章也逐步更新中(历史文章无法更新,请从“阅读原文”或回复 python 进入)。已经用了 2 的同学也不用担心,从语法上来说,真的没有什么差别,学会任何一个版本后都可以秒转。

2. 我在 Python 里为什么不能换行?

这个界面叫做 python shell,不是开发写代码的地方,每输入一行它都会自动执行并输出结果。所以要写代码,请参考课程《第3课 - IDE》里的说明,通过窗口上方菜单栏的 File - New File(或 New Window)创建一个新窗口,在里面写代码。

类似的问题还有,为什么教程里有输出,我代码里就没有?上面说了,python shell 会自动输出,而在代码中,你需要 print

3. 程序为什么到输入的地方就不动了?

可能有人会说,这也算问题?但确实有相当多的人在这一步会产生误解:以为 input 后面括号里的内容就是“用户输入”。

这里要明确:input 获取的是“用户输入,是程序运行时才得到的数据,所以不是开发者在代码里预先写好的。input 括号里的文字,只是用来作为输入前的“提示语”。真正的输入,是要程序执行后,在控制台里输入,按回车结束

如果对上述文字描述还没能理解的,可以公众号对话里回复关键字 输入,有一个视频演示。

4. 猜数字输入后报错

报错提示 TypeError: unorderable types: str() < int()

py3 的 input,不管你输入什么内容,都会被当做字符串来处理。而字符串是不能跟数字之间比大小的。所以需要手动转换一下:

answer = int(input())

py2 也会有类似的问题(发生在 raw_input),而且更坑的是用 str 和 int 比大小并不会报错,而是返回一个并不是你预想的结果,这个需要额外注意。

5. print 时报错

报错提示 SyntaxError: Missing parentheses in call to 'print'

这是 Python 版本 3 和 2 的“重大”差异之一:print 要把后面输出的内容加上括号。后面学到函数,你就理解为什么要这样了:print 也是一个函数,参数就是输出的内容。

类似的一个问题是:

会有人觉得我这里不是加了括号了吗,为什么还不行?这个式子在程序中的执行是:1. 输出 'num is %s',2. 把 print 的返回值做 % 11 操作。但 print 函数没有返回值,也就是 None,所以就报错了。应该用括号把要输出的所有内容外层括起来。

6. 用 randint 产生随机数时报错

报错提示 AttributeError: module 'random' has no attribute 'randint'

这个情况如果发生了,你可能很难找到问题所在,通过网上搜索也不行。原因是你的代码用了系统模块一样的名字:random。类似的,如果你给自己的代码取名 math.py、list.py、str.py 等,或者变量名用 sum、time、str、list 等,都有可能因命名冲突带来意想不到的 bug。所以,远离系统保留字。好的编辑器会给你高亮提示出来。如果你自己拿不准,取名时尽量用合成词,比如 my_random 之类。

可能有同学看出来了,这几个问题是到我们教程前半部分到“猜数字”小游戏这里可能踩到的坑。再往后有两个大坑,一个是函数,另一个是编码,我后面再来讲。

原文发布于微信公众号 - Crossin的编程教室(crossincode)

原文发表时间:2018-10-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿人谷

PHP程序员应该掌握的10个技能

php程序员应该掌握的10个技能,看看你都掌握了哪些:   1、语法:必须熟练掌握 ,写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语...

24270
来自专栏云飞学编程

Python爬虫学习,记一次抓包获取js,从js函数中取数据的过程

昨天有小伙伴找我,新浪新闻的国内新闻页,其他部分都是静态网页可以抓到,但是在左下方的最新新闻部分,不是静态网页,也没有json数据,让我帮忙抓一下。大概看了下,...

13920
来自专栏鸿的学习笔记

协程--以Python和Go为例

一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

31110
来自专栏林欣哲

ISA指令集

今天的内容来源于《计算机系统概论》的第4章,介绍的指令是作者根据x86指令简化设计的一个自称为LC-3(Little Computer-3 edition)的指...

44270
来自专栏码匠的流水账

聊聊rest api设计

15910
来自专栏施炯的IoT开发专栏

EVC3/4项目升级到Visual Studio项目的一些建议

    大家都在忙着研究WP7了,每天在园子里有好多精彩的文章出现。这几天受朋友的委托,帮忙把他手头的一个项目进行升级。情况大概是这样的:项目是用EVC 3来开...

201100
来自专栏尚国

深入剖析最新IE0day漏洞

在2018年4月下旬,我们使用沙箱发现了IE0day漏洞;自从在野外发现上一个样本(CVE-2016-0189)已经有两年多了。从许多方面来看,这个特别的漏洞及...

15620
来自专栏FreeBuf

某租车系统JAVA代码审计

前言 由于开源的JAVA WEB项目不是很多,这里找到一个没有用struct2或是spring框架的cms,希望借此cms来帮助新手敲开JAVA代码审计的大门,...

46580
来自专栏腾讯移动品质中心TMQ的专栏

接口测试用例设计

随着测试分析和分层测试的深化,“接口测试”出现在我们视野的频次越来越高。那么接口测的用例设计常用哪些方法呢?本文将详细描述。

1.1K110
来自专栏更流畅、简洁的软件开发方式

【开源】QuickPager 分页控件的内部结构,和OO原则与设计模式

关键字:提出需求、需求分析、原则、设计模式、索引      先说一下讨论的范围:使用数据库保存信息的项目,b/s结构,asp.net编写。请不要讨论这个范围之外...

21860

扫码关注云+社区

领取腾讯云代金券