设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 171005|回复: 355
打印 上一主题 下一主题

集中答疑专用贴

  [复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2013-9-10 20:44:07 |只看该作者 |倒序浏览
提问注意事项:

1. 准确描述问题。附上必要的 代码、输出、报错,并说明版本、平台等信息,文字代码方便别人复制,截图方便别人查看。用到外部文件的时候,附上文件夹的情况截图。
2. 首先自己尝试对报错进行搜索,包括全网搜索和本站内搜索,避免重复提问。
3. 作必要的调试,输出足够的信息,缩小错误范围。请勿直接放上大段代码让别人调试,否则请移步接单区解决。

学会提问题,是解决问题的第一步。




代码问题请单独发帖提问。
简短的疑问可直接在本贴中回复

【转自2013年9月9日微信推送】

很多大学今天开始新学期了,咱们教室也增加了不少新同学。刚来的同学,可以发送p查看python入门课程的目录,也可以直接发送1~53,进入对应的课程。不用被已经进行的50多课吓到,每一课其实都很短很简单,只要你开始学,永远都不晚。

现在,我们的python的入门课程已经说得差不多了,pygame也做了简单的介绍。再往下,就要深入到某些具体领域的细节了,涉及到的代码量也会更多,逻辑更复杂。我自己觉得,这样的内容比较难在每天的推送中用较短篇幅说清楚,你们应该也不愿拿着手机看大段的代码吧。而且,在掌握了编程的基础之后,进一步的提高需要更多的讨论和练习,而不仅仅是单向的接收信息。所以我也在努力寻找一种更适合的方式把我们的课程进行下去,如果你有好的建议,欢迎给我留言。

因此,在这几天,趁着课程阶段性的完结,我打算先将课程进度稍稍缓一下,集中回答在课程的进行中,经常被问到的一些问题。同时,欢迎各位把学习至今的问题和收获反馈给我,我会尽可能回答每个问题,并且选取其中的部分,在课程中分享给所有人。

今天来说两个被问了很多次的问题:

1.写python有哪些好的IDE?

在课程一开始,我推荐了大家使用python自带的IDE--IDLE。因为你不需要再做更多的安装和配置,就可以用它来写python程序。虽然方便,但显然它不是一个很好的解决方案。

Windows平台下,可以用PyScripter,它集成了编辑器和控制台,对于语法检查、补全、断点的支持都挺好,还可以切换python版本。有点小问题就是,默认情况下,对中文的支持不好,不能把文件保存在有中文的路径下。

另一个强大的python IDE叫PyCharm。它的用户体验相当顺手。除了一般编辑器支持的代码检查、补全、折叠、调试等等功能它都做得很到位之外,它对于django、GAE等python web框架的开发也有很好的支持。可自定义、可扩展。支持Window、Mac、Linux平台。对于初学者来说唯一美中不足的是,它是一个收费软件,有30天的试用期。如果你想用它来作为你工作的帮手,还是值得入手的。

不过有很多python程序员并不用IDE,只是选择一款顺手的文本编辑器就可以了。传说中“神的编辑器”Emacs和“编辑器之神”Vim就是这类的杰出代表。近来很火的SublimeText也大有分一杯羹的势头。它们共有的特点就是强大的可扩展性。理论上来说,你可以用它完成任何一款IDE可以实现的功能,并且按你的喜好调校成你最顺手的武器。只可惜,这种工具的上手难度较高,不适合初学者。

另外,eclipse和Mac下的Xcode也可以用来写python,但由于我自己没有用过,不敢妄加评论。如果对这两个IDE有过使用经验的同学,不妨尝试下。

我本人在Linux下用Emacs23,Windows下用SublimeText2,加了一些扩展。一个好的IDE可以帮你节省很多时间,比如拼错变量名这种新手必犯的问题,就可以大大避免了。但像自动补全这种懒人功能,在初学时候慎用,多打点字是好事。

2.我把基础都看完了,接下来干什么?/
你讲的例程都能看懂,但自己写还是不会,怎么办?/
我之前也在网上学过xx语言,可是后来很快又忘了,怎么破?

这几个问题本质都差不多,大意就是:学完了,然后呢?
举两个例子:你去学一门武功,把招式秘籍背下来,能照着打了,是不是就可以行走江湖了?你去学一门乐器,DoReMi每个音阶与和弦都能演奏出来了,是不是就可以上台表演了?即使是打个太极拳强身健体,或是弹个吉他装文艺,也是得时常拿出来练练的。所以编程也是这样的事情。我个人的经验:如果学的一门语言或技术是我要去使用的,那很快就能上手;否则的话,即使我收拾好心情、做好准备去认真学,要不了多久也会忘掉。原因就在于没有后续的练习。

当年我学吉他,和弦都按得很熟练,但弹熟了几首曲子后就不知道还能怎样。直到后来找到了志同道合的朋友,组了乐队,才体会到其中的乐趣。如今你学编程,一定也有同样的困惑,我基础都学完,怎么也没有什么感觉。但幸运的是,你现在有几千个共同学习的小伙伴。不管你有方向上的还是细节上的、理论上的还是应用上的问题,总归能找到讨论和解答的人,帮你在编程道路上更进一步。

所以我对这类问题的建议:多来论坛和群里交流,不断寻找学习的点,持续练习。这也是我们一起学习比自己一个人看教程看视频的优势。希望到有天你毕业或者工作中需要编程的时候,你能说,我会python,我能搞定,我还跟人合作开发过一个网站。而不仅仅是很多年之后,有人谈到编程的时候,你淡淡一笑说,哦,我当年好像还学过一个什么语言,后来忘了。



【转自2013年9月10日微信推送】

今天是教师节,祝老师们节日快乐。然后,今早,我居然也收到了祝福。。。暗自窃喜。

把之前有几篇不属于课程系列的文章整理了一下,回复 w 可以看到文章列表。包括罚点球游戏、搭建论坛、创建微信公众号等几篇。

最近几天有同学反映,咱们的论坛不太稳定。我自己也发现了,碰上好几次帖子打不开、发帖发不上的情况,一会儿就又恢复正常了。难道是因为教室的人越来越多,服务器快撑不住了?如果是这样的话,那我倒是挺开心的。暂时如果大家遇上页面打不开就麻烦多刷新几次,刷爆了我去换新服!

继续回答提问:

1.猜大小游戏里,answer=raw_input(),然后比较answer和答案num的大小,为什么总是显示“too big”?

这个问题很多同学在刚开始都犯过。这要怪python2.7的input()和raw_input()太容易混淆。
对于input(),如果你的输入是一个数字,那么程序得到的就是这个数字值;
如果你输入了一串字符,则程序会把这串字符当作变量名去寻找它的值;
如果你想用它输入字符串,则需要在前后加上引号。
另外,input还可以接受计算表达式,得到表达式的值作为输入。

而raw_input(),不管你输入的是数字、字符还是表达式,都会直接当作一串字符作为输入。如果你在输入中加上了引号,引号也会被作为输入内容算在字符串内。

所以,如果你想输入一个整数,你应该用
answer=input()
或者
answer=int(raw_input())

或许是为了避免这种混淆,在python3中,只剩下了一个input()函数,功能相当于2.x版本中的raw_input()

2.我应该学python还是Java/C++/C/ruby/JavaScript...,要不要同时学?

首先,我的观点是不要在一开始同时学两门语言。即使你一门学了一些了,也最好不要着急学其他的。精通一门编程语言比知晓好几门更有用。不同编程语言在本质上总是有相同之处。等你从一门入手,深入掌握之后,再学其他语言就会很轻松。

至于学哪一门语言。对于大多数零基础的编程爱好者来说,我还是建议python。如我在课程中提到的,它简单、实用、易学。让你可以不用纠结一些琐碎的编程细节,就能体会到编程的思想和乐趣。

而最近也有一些计算机相关专业的同学问到我类似的问题。我觉得,既然是专业的,那就最好是按照你们学校设置的编程课程去学习。没有差的语言,只有你不会使用它。如果非要我来选择语言,我会倾向于用C++。对于专业的学生,一开始深入细节、打好基础,对以后的学习有很大的帮助。而python因为不够严谨,又太好用的,不利于在一开始养成良好的编程习惯。

3. 我的代码遇到了@#¥%……问题,为什么不显示/跳出/结果不对?

这个问题是对于一些症状难以理解、检查了很久代码也摸不到线索的问题的一个猜测。根据我个人,以及不少同学曾经的问题得到的经验来看,如果你觉得你的代码没有问题,但结果就是不对,那很大的可能性是:你有变量名拼写错了!
这也是有人诟病python的问题之一,变量未经定义就可以直接使用。如果你赋值给了一个拼写错的变量,并不会引发error提示,但却会让结果不符合你的想象。
要避免这种问题,除了编码时的细心之外,找一个能代码检查的IDE或插件会轻松许多。



【转自2013年9月11日微信推送】

如何在python中判断字符编码类型
python里面的字符编码是让人头大的一个东西,甚至很多时候你都不知道现在拿到的文本到底是什么编码。
这时候,chardet可以帮你判断编码。chardet是python的第三方扩展,用来检测字符串或文件的编码。你需要去下载它,搜索“chardet”,或者直接去:
https://pypi.python.org/pypi/chardet

下载解压之后,可以把chardet目录(不是直接解压出来的那一层)拷贝到你的代码文件夹下直接调用,也可以把chardet目录拷贝到你的python系统路径Python27\Lib\site-packages下。
使用中,你有一个待检测的字符串s,只需:
  1. import chardet
  2. print chardet.detect(s)
复制代码
就可以看到输出结果:
{'confidence': 0.98999999999999999, 'encoding': 'GB2312'}
confidence是预测这种编码的可能性,encoding是编码名称。


【转自2013年11月14日微信推送】

1. 如何查看异常处理时except里的出错信息?

给except加上第二个参数,就能得到出错信息:
try:
    # some error
    a = 1 / 0
except Exception, e:
    print e

如果需要更详细的信息,可以用这个方法:

try:
    # some error
    a = 1 / 0
except:
    import traceback
    traceback.print_exc()


2. 怎样用正则表达式匹配网页中的中文内容?

对于Python 2.x版本,需要用unicode来匹配。正则表达式的字符串前要加上u,待匹配的文本要decode()。例如:

#-*- coding:utf-8 -*-
import re
text = "你好吗?我很好!"
m = re.findall(ur"你好", text.decode("utf8"))
if m:
    print m[0].encode('utf8')
else:
    print 'not match'


3. 哪儿可以找到比较全的python文档?

英文能看得懂的话,最好可以去python官网:
http://www.python.org/doc/
这是最全最详细最权威的。(有个词叫“RTFM”,去搜搜看是什么意思)

另外有一些书,专门讲python模块的,比如《python标准库》。在论坛和群共享里可以找到网上的电子版。不过它也不是把所有内容都写上去了。


4. 代码目录里出现的pyc文件是干什么的?

pyc文件是“编译”后的python文件。python引入模块是一个比较耗时的操作,所以通过对被引入模块文件进行编译,创建它的字节编译版本pyc文件,从而提高模块引入速度。
pyc同样也是平台无关的,所以可以在不同架构的机器上运行。同时,它比较难于被逆向工程,安全性较高一些。






相关帖子

#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

5

积分

新手上路

Rank: 1

沙发
发表于 2013-9-11 15:54:07 |只看该作者
刚刚加进来,服务器好像不是很稳定哦
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2013-9-13 01:30:57 |只看该作者
zhanzhp 发表于 2013-9-11 15:54
刚刚加进来,服务器好像不是很稳定哦

我也发现了,最近百度云有点抽风
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

29

积分

新手上路

Rank: 1

地板
发表于 2013-10-15 17:49:06 来自手机 |只看该作者
由于想编游戏,不过学校专业设置的是c++,也学过一学期的python,现在专业不是编程方向,偶然间看到crossin先生的课程兴趣又上来了,两三天看完了课程觉得意犹未尽,想问一下如果作为业余爱好,偏向游戏,选哪个比较好一点呢,
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2013-10-16 16:00:28 |只看该作者
HTDI 发表于 2013-10-15 17:49
由于想编游戏,不过学校专业设置的是c++,也学过一学期的python,现在专业不是编程方向,偶然间看到crossin ...

游戏也分,如果你偏向游戏中的开发,建议还是c++,以后也可以向职业发展。确实只是想业余的话,python也可以,但你也可以去找些更适合业余写代码的学,比如我以前喜欢用基于ActionScript的游戏开发包Flixel。或者像stencyl、gamemaker、unity3d这种不用太会编程也可以做游戏的
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

1

好友

23

积分

新手上路

Rank: 1

6#
发表于 2013-11-21 17:08:47 |只看该作者

回帖奖励 +5

请问crossin先生,我用的是python3.3,我下载了chardet2.1.1,解压后把chardet目录拷贝到python系统路径Python33\Lib\site-packages下。然后import chardet没有问题,但是尝试chardet.detect('a')时却报错:
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    chardet.detect('a')
  File "C:\Python33\lib\site-packages\chardet\__init__.py", line 21, in detect
    import universaldetector
ImportError: No module named 'universaldetector'
可是在chardet目录中的的确确是有universaldetector.py文件的啊,我不知道为什么会这样,还望先生指点。
回复

使用道具 举报

0

主题

1

好友

23

积分

新手上路

Rank: 1

7#
发表于 2013-11-21 17:35:44 |只看该作者
E.T. 发表于 2013-11-21 17:08
请问crossin先生,我用的是python3.3,我下载了chardet2.1.1,解压后把chardet目录拷贝到python系统路径Pyt ...

我google时找到了这个:http://woodpecker.org.cn/diveint ... et-to-python-3.html , 貌似是chardet只支持python2.x,以我目前的水平貌似还无法完全理解这一章所说的内容,算了,先从自己可以理解学习的地方开始吧。
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

8#
发表于 2013-12-4 22:42:02 |只看该作者
王懿寒 发表于 2013-12-4 21:11
我来打酱油


#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

21

主题

1

好友

373

积分

中级会员

Rank: 3Rank: 3

9#
发表于 2013-12-20 12:36:34 |只看该作者

回帖奖励 +5

写的好
回复

使用道具 举报

3

主题

0

好友

36

积分

新手上路

Rank: 1

10#
发表于 2013-12-23 15:58:40 |只看该作者

回帖奖励 +5

先生你好
我在用PIL库给图片添加中文的时候
头部是# coding=gbk
然后ttFont = ImageFont.truetype ("arial.ttf", 50)
draw.text ((10, 10), '测试', fill=(255,0,0), font=ttFont)
font可以使用,为什么字体是乱码呢 英文不会 中文就是乱码了
希望先生可以指点一下 太感谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-22 02:25 , Processed in 0.018789 second(s), 25 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部