Crossin的编程教室

标题: 集中答疑专用贴 [打印本页]

作者: crossin先生    时间: 2013-9-10 20:44
标题: 集中答疑专用贴
提问注意事项:

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同样也是平台无关的,所以可以在不同架构的机器上运行。同时,它比较难于被逆向工程,安全性较高一些。







作者: zhanzhp    时间: 2013-9-11 15:54
刚刚加进来,服务器好像不是很稳定哦
作者: crossin先生    时间: 2013-9-13 01:30
zhanzhp 发表于 2013-9-11 15:54
刚刚加进来,服务器好像不是很稳定哦

我也发现了,最近百度云有点抽风
作者: HTDI    时间: 2013-10-15 17:49
由于想编游戏,不过学校专业设置的是c++,也学过一学期的python,现在专业不是编程方向,偶然间看到crossin先生的课程兴趣又上来了,两三天看完了课程觉得意犹未尽,想问一下如果作为业余爱好,偏向游戏,选哪个比较好一点呢,
作者: crossin先生    时间: 2013-10-16 16:00
HTDI 发表于 2013-10-15 17:49
由于想编游戏,不过学校专业设置的是c++,也学过一学期的python,现在专业不是编程方向,偶然间看到crossin ...

游戏也分,如果你偏向游戏中的开发,建议还是c++,以后也可以向职业发展。确实只是想业余的话,python也可以,但你也可以去找些更适合业余写代码的学,比如我以前喜欢用基于ActionScript的游戏开发包Flixel。或者像stencyl、gamemaker、unity3d这种不用太会编程也可以做游戏的
作者: E.T.    时间: 2013-11-21 17:08
请问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文件的啊,我不知道为什么会这样,还望先生指点。
作者: E.T.    时间: 2013-11-21 17:35
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,以我目前的水平貌似还无法完全理解这一章所说的内容,算了,先从自己可以理解学习的地方开始吧。
作者: crossin先生    时间: 2013-12-4 22:42
王懿寒 发表于 2013-12-4 21:11
我来打酱油



作者: 今天手气不错啊    时间: 2013-12-20 12:36
写的好
作者: tcwyjno1    时间: 2013-12-23 15:58
先生你好
我在用PIL库给图片添加中文的时候
头部是# coding=gbk
然后ttFont = ImageFont.truetype ("arial.ttf", 50)
draw.text ((10, 10), '测试', fill=(255,0,0), font=ttFont)
font可以使用,为什么字体是乱码呢 英文不会 中文就是乱码了
希望先生可以指点一下 太感谢了
作者: crossin先生    时间: 2013-12-24 10:39
tcwyjno1 发表于 2013-12-23 15:58
先生你好
我在用PIL库给图片添加中文的时候
头部是# coding=gbk

没用过这方面,但我觉得是因为这是个英文字体,里面是不带中文的,可能这个原因吧。你换个中文字体试试
作者: nemo    时间: 2013-12-29 21:26
本帖最后由 nemo 于 2013-12-29 21:32 编辑

先生你好,我零基础,学到查天气那一课弄不下去了。
city.py的代码就加了个:
# -*- coding: UTF-8 -*-
后面没变。

weather.py的代码:
# -*- coding: utf-8 -*-
import urllib2
import json
from city import city

cityname = raw_input('你想查哪个城市的天气?\n')
citycode = city.get(cityname)
# -*- coding: utf-8 -*-
import urllib2
import json
from city import city
cityname = raw_input('你想查哪个城市的天气?\n')
citycode = city.get(cityname)
if citycode:
    url = ('http://www.weather.com.cn/data/cityinfo/%s.html' % citycode)
    content = urllib2.urlopen(url).read()
    print content

问题是输入北京或者海口之后就没反应了,程序直接结束。去掉if citycode:那一行就能输出找不到页面的一大堆代码。请原谅我这么幼稚的问题,但是确实被卡住了。py2.7,XP.

作者: crossin先生    时间: 2013-12-29 22:13
nemo 发表于 2013-12-29 21:26
先生你好,我零基础,学到查天气那一课弄不下去了。
city.py的代码就加了个:
# -*- coding: UTF-8 -*-

我猜应该是编码的问题,你如果是windows的话,应该用cp936而不是utf8
作者: nemo    时间: 2013-12-30 20:56
crossin先生 发表于 2013-12-29 22:13
我猜应该是编码的问题,你如果是windows的话,应该用cp936而不是utf8

bingo!
作者: ·可乐瓜儿·    时间: 2014-1-15 03:46
本帖最后由 ·可乐瓜儿· 于 2014-1-15 04:00 编辑

crossin先生你好,有一个关于逻辑判断方面的问题:
数字0和1分别可以作为逻辑判断的bool值的False和True,而不需要用到>,<,==,!=等逻辑判定符号,对吗?
比如下面这个程序:
print 0==False
print 1==True
a=3
while a<20:
  print a==True
  print a==False
  a=a+1
结果是前两个为True后面全为False.

那么,为什么 print not 3的结果是False?此时不是应该不能进行逻辑判断而显示程序有误吗?即使能进行判断,如果not 3是False, 那么3==True应该为True啊,为什么结果还是False? 谢谢。
作者: crossin先生    时间: 2014-1-15 10:23
·可乐瓜儿· 发表于 2014-1-15 03:46
crossin先生你好,有一个关于逻辑判断方面的问题:
数字0和1分别可以作为逻辑判断的bool值的False和True, ...

不要完全把整数和True/False等同
bool转成整型,True是1,False是0,所以3==True这个是错的,1==True才是对的
整型转bool,0是False,其他都是True
not 3其实是not bool(3)也就死not True,自然就是False
3==True是错的,但bool(3)==True是对的
作者: ·可乐瓜儿·    时间: 2014-1-17 00:26
crossin先生 发表于 2014-1-15 10:23
不要完全把整数和True/False等同
bool转成整型,True是1,False是0,所以3==True这个是错的,1==True才是 ...

(⊙o⊙)哦,谢啦!
作者: innershine    时间: 2014-2-19 00:20
crossin老师好:)
昨天按照一个公众平台教程写了一些代码,用的是新浪的SAE,没想到最基本的token验证就过不去,自己查了半天也没明白问题在哪里,大蛇语言新手,烦请老师帮忙看看可好?

config.yaml 如下
---
name: shameonyou
version: 1

libraries:
- name: webpy
  version: "0.36"
  
- name: lxml
  version: "2.3.4"
  
...


index.wsgi如下
# coding: UTF-8
import os

import sae
import web

from weixinInterface import WeixinInterface

urls = (
'/weixin','WeixinInterface'
)

app_root = os.path.dirname(__file__)
templates_root = os.path.join(app_root, 'templates')
render = web.template.render(templates_root)

app = web.application(urls, globals()).wsgifunc()
application = sae.create_wsgi_app(app)

weixinInterface.py如下

# -*- coding: utf-8 -*-
import hashlib
import web
import lxml
import time
import os
import urllib2,json
from lxml import etree

class WeixinInterface

    def __init__(self):
        self.app_root = os.path.dirname(__file__)
        self.templates_root = os.path.join(self.app_root, 'templates')
        self.render = web.template.render(self.templates_root)

    def GET(self):
        #获取输入参数
        data = web.input()
        signature=data.signature
        timestamp=data.timestamp
        nonce=data.nonce
        echostr=data.echostr
        #自己的token
        token="shameonyou" #这就是微信后台输入的token
        #字典序排序
        list=[token,timestamp,nonce]
        list.sort()
        sha1=hashlib.sha1()
        map(sha1.update,list)
        hashcode=sha1.hexdigest
        #sha1加密算法
        
        #如果是来自微信的请求,则回复echostr
        if hashcode == signature:
            return echostr
               

不能直接传图,就贴代码了,缩进应该不受影响的。
微信后台显示“服务器没有正确响应后台认证”
怎么回事啊……泪目

作者: crossin先生    时间: 2014-2-19 10:46
innershine 发表于 2014-2-19 00:20
crossin老师好:)
昨天按照一个公众平台教程写了一些代码,用的是新浪的SAE,没想到最基本的token验证就过 ...

已回复在 http://crossin.me/forum.php?mod= ... =2279&fromuid=3
作者: JulyIsPythonFan    时间: 2014-3-10 10:47

{  与list不同的是,字符串能通过索引访问去更改其中的字符。
    word[1] = 'a'
    这样的赋值是错误的。}
请问怎样才是正确的字符赋值方法呢?
作者: crossin先生    时间: 2014-3-10 18:05
JulyIsPythonFan 发表于 2014-3-10 10:47
{  与list不同的是,字符串能通过索引访问去更改其中的字符。
    word[1] = 'a'
    这样的赋值是错误的 ...

这句话可能我开始写错了,应该是“不能”通过索引访问更改
似乎没有直接改得方法,如果你要改第1个位置,就得
  1. word = word[:1] + 'a' + word[1+1:]
复制代码

作者: xiaot    时间: 2014-3-22 21:28
。。第22章,return和print的区别不是很理解,不过百度了一下有点懂了,自己尝试的时候有个问题
def add(x,y):
    print x+y
    return x-y
result=add(1,2)
add(1,2)
为什么执行的时候会输出两个3?   result=add(1,2)只是单纯的赋值怎么也会有输出。而且赋值结果也应该是-3啊。。

作者: crossin先生    时间: 2014-3-24 10:25
xiaot 发表于 2014-3-22 21:28
。。第22章,return和print的区别不是很理解,不过百度了一下有点懂了,自己尝试的时候有个问题
def add(x, ...

add这个函数的执行过程中会输出3,它返回的结果是-3,所以每调用一次,都会显示3
而-3被存储在了result里,并没有被输出
作者: JulyIsPythonFan    时间: 2014-3-25 10:26
crossin先生 发表于 2014-3-10 18:05
这句话可能我开始写错了,应该是“不能”通过索引访问更改
似乎没有直接改得方法,如果你要改第1个位置, ...

明白了  谢谢先生~
作者: xiaot    时间: 2014-3-25 12:30
crossin先生 发表于 2014-3-24 10:25
add这个函数的执行过程中会输出3,它返回的结果是-3,所以每调用一次,都会显示3
而-3被存储在了result里 ...

但是我应该只在最后一行调用了一次add函数。
前3行是定义的
result=add(1,2)这个也会调用函数吗
作者: crossin先生    时间: 2014-3-25 14:34
xiaot 发表于 2014-3-25 12:30
但是我应该只在最后一行调用了一次add函数。
前3行是定义的
result=add(1,2)这个也会调用函数吗 ...

嗯,这就是调用函数,并且获得返回值
作者: 苍翠的路    时间: 2014-4-15 11:16
想问一下先生,教室里的C++帖子貌似不太多,最近学C++有点学不下去的感觉,就是没有像Python这样可以偶尔写个小游戏的成就感,请问会有更多的关于C++的资源吗?或者您有什么好的建议?
作者: crossin先生    时间: 2014-4-15 16:00
苍翠的路 发表于 2014-4-15 11:16
想问一下先生,教室里的C++帖子貌似不太多,最近学C++有点学不下去的感觉,就是没有像Python这样可以偶尔写 ...

暂时恐怕没时间来做c++的内容
不过你也可以把这些小游戏用c++来实现,只不过要靠你自己去找解决方法
作者: 苍翠的路    时间: 2014-4-15 22:22
crossin先生 发表于 2014-4-15 16:00
暂时恐怕没时间来做c++的内容
不过你也可以把这些小游戏用c++来实现,只不过要靠你自己去找解决方法 ...

感谢先生的答复,我自己摸索摸索
作者: 唐成宇    时间: 2014-4-18 00:33
我想写一个自动登陆校园网的程序,请问怎样用Python在网页输入框中输入内容呢?是不是还需要了解一些HTML的东西(表示目前只会div布局……)?
作者: crossin先生    时间: 2014-4-18 11:25
唐成宇 发表于 2014-4-18 00:33
我想写一个自动登陆校园网的程序,请问怎样用Python在网页输入框中输入内容呢?是不是还需要了解一些HTML的 ...

自动网网页输入框里加东西不好做,除非你开发浏览器插件,不然这种事涉及到浏览器的安全策略,一般是没有权限的。

通常的做法是,直接用python程序发送网络请求,不通过浏览器。直接进行数据层面的交互。可参考python里的urllib2,requests之类的
作者: 唐成宇    时间: 2014-5-29 23:06
Crossin先生,我写了一个阅读知乎日报的小程序,输出中文时各种乱码,百度了网上一些人的做法后,我的文件开头是这样的:
  1. # -*- coding: gb2312 -*-
  2. import urllib2
  3. import sys
  4. type = sys.getfilesystemencoding()
复制代码
输出的时候就用print().decode('UTF-8').encode(type)
这样之后,文字基本没问题了,可一些中文的符号(比如说省略号、破折号还有双引号)还是无法正常显示。请问有没有解决的办法?我对编码不怎么了解,能不能麻烦Crossin先生讲一讲。谢谢了
作者: crossin先生    时间: 2014-5-30 10:57
唐成宇 发表于 2014-5-29 23:06
Crossin先生,我写了一个阅读知乎日报的小程序,输出中文时各种乱码,百度了网上一些人的做法后,我的文件 ...

这是python 3?
decode是unicode->str
encode是str->unicode
因为str不能表示复杂文字,所以必须通过编码,来用好几个字符来表示一个字。输出的时候,就需要按照编码时的格式来解码。
我觉得好像不要后面的encode吧,你只是要输出,为啥还要编码后输出。你只要把抓取到的文字按照知乎日报用的编码方式(也许是utf8,也许是gb2312)解码
作者: BlackBear黑熊    时间: 2014-6-20 21:11
本帖最后由 BlackBear黑熊 于 2014-6-20 23:13 编辑

zhanzhp 发表于 2013-9-11 15:54
刚刚加进来,服务器好像不是很稳定哦

我也发现了,最近百度云有点抽风

---------------------------------------------------------------------------------------------------------------------
Dear teacher:
        请教:百度云和服务器有什么关系呢? 难道百度云可以当服务器存放网站/论坛?

作者: BlackBear黑熊    时间: 2014-6-20 23:00
Dear teacher:
        再次叨扰:拿课程里那个猜数字的小程序来说,在Python IDLE里可以运行也没错,但用Sublime text 2打开以后,按Ctrl+B,直接什么输出和反应都没有...(编译系统已经勾选设置为Python),这又是怎么回事呢?
      
作者: crossin先生    时间: 2014-6-20 23:39
BlackBear黑熊 发表于 2014-6-20 21:11
--------------------------------------------------------------------------------------------------- ...

百度云提供了一些类似服务器的功能接口,可以勉强当做网站服务器用。

之前最早这个论坛是放百度云上的。现在早已搬离。
作者: crossin先生    时间: 2014-6-20 23:40
BlackBear黑熊 发表于 2014-6-20 23:00
Dear teacher:
        再次叨扰:拿课程里那个猜数字的小程序来说,在Python IDLE里可以运行也没错,但用 ...

sublime默认对于输入的模拟是有问题的。好像可以通过插件来解决。不过我一般都不在sublime里运行带输入的程序
作者: BlackBear黑熊    时间: 2014-6-21 00:23
crossin先生 发表于 2014-6-20 23:39
百度云提供了一些类似服务器的功能接口,可以勉强当做网站服务器用。

之前最早这个论坛是放百度云上的。 ...

SO GA...好强大
作者: BlackBear黑熊    时间: 2014-6-21 00:24
crossin先生 发表于 2014-6-20 23:40
sublime默认对于输入的模拟是有问题的。好像可以通过插件来解决。不过我一般都不在sublime里运行带输入的 ...

百度上看到了是说什么插件解决。。。
还是先不鼓捣这个了,
多谢多谢,大公无私
作者: BlackBear黑熊    时间: 2014-6-21 00:25
crossin先生 发表于 2014-6-20 23:40
sublime默认对于输入的模拟是有问题的。好像可以通过插件来解决。不过我一般都不在sublime里运行带输入的 ...

百度上看到了是说什么插件解决。。。
还是先不鼓捣这个了,
多谢多谢,大公无私
作者: paul    时间: 2014-7-3 12:15
老师,有教一个问题:如果我想打印出数字01,但是我的变量是a=1,有什么格式化的方法吗?
作者: crossin先生    时间: 2014-7-3 15:03
paul 发表于 2014-7-3 12:15
老师,有教一个问题:如果我想打印出数字01,但是我的变量是a=1,有什么格式化的方法吗? ...

print "%02d" % 1
作者: clam    时间: 2014-7-13 21:20
我想问的是,如何在IDLE的主窗口里执行***。py文件呢?就像matlab那样。。。。
作者: crossin先生    时间: 2014-7-14 10:48
clam 发表于 2014-7-13 21:20
我想问的是,如何在IDLE的主窗口里执行***。py文件呢?就像matlab那样。。。。 ...

不太方便。一般是idle打开py文件后,运行
作者: onlyforstop    时间: 2014-7-19 20:27
我来提一个问题吧。
最近在ubuntu上编程,有时候要查一些英文单词,我的想法是这样的,直接在命令行中运行python脚本,将要查的词作为命令行参数输入,之后返回结果print出来。
论坛里有一个童鞋自己定制了一个单词听写,使用了youdoa的api,我去看了一下,似乎都是要有一个网站才能申请api的,可是我木有网站啊……
跟先生求点思路
作者: crossin先生    时间: 2014-7-20 17:16
onlyforstop 发表于 2014-7-19 20:27
我来提一个问题吧。
最近在ubuntu上编程,有时候要查一些英文单词,我的想法是这样的,直接在命令行中运行p ...

你说的差不多,基本思路就是找一个api
除了有道,应该还有很多提供类似api的,你可以再去找找看,应该是有公开的吧,什么ciba、hujiang之类的
作者: QQ_757812    时间: 2014-7-31 21:46
没有任何基础学前面的都感觉特别费劲,尤其又不太懂英文,得一个个去查才知道是什么意思。照搬照做还行,一旦有练习题时又不知道该如何下手了,crossin先生有什么好的建议或意见没有?
作者: crossin先生    时间: 2014-8-1 12:58
QQ_757812 发表于 2014-7-31 21:46
没有任何基础学前面的都感觉特别费劲,尤其又不太懂英文,得一个个去查才知道是什么意思。照搬照做还行,一 ...

多看,多写
然后学一学英文

没有捷径
作者: lwy7810    时间: 2014-11-7 19:40
请问 第33课的第一个作业1.从一个文件中读出内容,保存至另一个文件。
data=input()
out=open('output.txt','w')
out.write(data)
out.close()
错误在哪里 谢谢啦
作者: crossin先生    时间: 2014-11-8 14:45
lwy7810 发表于 2014-11-7 19:40
请问 第33课的第一个作业1.从一个文件中读出内容,保存至另一个文件。
data=input()
out=open('output.txt' ...

input得到的值可能不是字符
所以要么改成
data=raw_input()
要么改成
out.write(str(data))
作者: wangzheng6489    时间: 2014-11-22 22:05
老师问下,关于那个pygame里有一点点东西一直不懂,
x,y=pygame.mouse.get_pos() #获取鼠标位置
    #使飞机中心和鼠标位置一致
    x = x-plane.get_width()/2
    y = y-plane.get_height()/2
就这个,坐标原点不是左上角吗,然后图像坐标轴的建立不是应该从左到右,从上到下吗,鼠标在飞机中心左上角,那按理说要使鼠标与飞机中心对应,不是应该x,y加上图片一半的长度吗,为何是减,可实现起来确实是减,我一直想不通,求指教

作者: crossin先生    时间: 2014-11-23 12:04
wangzheng6489 发表于 2014-11-22 22:05
老师问下,关于那个pygame里有一点点东西一直不懂,
x,y=pygame.mouse.get_pos() #获取鼠标位置
    #使飞 ...

qq群里回答过,这里再附一下:
因为是要让飞机的贴图中心与鼠标对应,所以是把飞机的坐标设成鼠标坐标减去一半的长度
作者: ddzxzxzz    时间: 2014-11-30 18:17
here is the code:

>>>x = [0,1,2,3,0,3,2,1,8]
>>> for i in range(0,len(x)):
            for j in range(i+1,len(x)):
                if x[i] == x[j]:
                        del x[j]



Traceback (most recent call last):
  File "<pyshell#181>", line 3, in <module>
    if x[i] == x[j]:
IndexError: list index out of range

实际上是每运行一次 都能去掉一个重复的数.. 为什么第二次会超出列表范围呢? 难道是del后,list没有能及时更新?
作者: crossin先生    时间: 2014-12-1 15:11
ddzxzxzz 发表于 2014-11-30 18:17
here is the code:

>>>x = [0,1,2,3,0,3,2,1,8]

for 后面的range在一开始就算好了
作者: JerryZ    时间: 2014-12-8 07:59
我是用Mac编写的这个猜数字的游戏 但是运行不了 问题貌似出在from上 但是该怎么改呢?

屏幕快照 2014-12-07 下午3.52.48.png (28.4 KB, 下载次数: 394)

屏幕快照 2014-12-07 下午3.52.48.png


作者: crossin先生    时间: 2014-12-8 19:14
JerryZ 发表于 2014-12-8 07:59
我是用Mac编写的这个猜数字的游戏 但是运行不了 问题貌似出在from上 但是该怎么改呢? ...

你的代码要新建一个窗口再写,点菜单栏的file-》new window
而且from 最好写在文件开头

在控制台下这样写大段代码,格式会有问题的
作者: JerryZ    时间: 2014-12-9 04:55
crossin先生 发表于 2014-12-8 19:14
你的代码要新建一个窗口再写,点菜单栏的file-》new window
而且from 最好写在文件开头

感谢CS大神 我成功了!!!!!!!
作者: JerryZ    时间: 2014-12-9 10:17
这次又遇到问题了 这次把之前讲的那个罚球小游戏改了一下  问题貌似出在定义的变量kick()上 该怎么改呢?

屏幕快照 2014-12-08 下午6.09.55.png (63.41 KB, 下载次数: 390)

屏幕快照 2014-12-08 下午6.09.55.png


作者: crossin先生    时间: 2014-12-9 13:16
JerryZ 发表于 2014-12-9 10:17
这次又遇到问题了 这次把之前讲的那个罚球小游戏改了一下  问题貌似出在定义的变量kick()上 该怎么改呢? ...

raw_input后面少了个括号,这变成把这个函数本身赋值给you这个变量了
作者: JerryZ    时间: 2014-12-9 13:17
今天学到了处理数据 又碰上了一点小问题 感觉这样下去会被我刷屏了 万恶的Mac系统。。。。。。 屏幕快照 2014-12-08 下午9.09.22.png
作者: JerryZ    时间: 2014-12-9 13:19
额。。。。 我没注意。。。居然犯这种错误。。。
作者: JerryZ    时间: 2014-12-9 13:20
crossin先生 发表于 2014-12-9 13:16
raw_input后面少了个括号,这变成把这个函数本身赋值给you这个变量了

额 。。。。没注意。。居然犯这种错。。。
作者: JerryZ    时间: 2014-12-10 04:12
JerryZ 发表于 2014-12-9 13:17
今天学到了处理数据 又碰上了一点小问题 感觉这样下去会被我刷屏了 万恶的Mac系统。。。。。。  ...

自己解决了
作者: JerryZ    时间: 2014-12-10 11:47
今天我又来了。。。。今天学到了用文件保存游戏  如果我的文本里什么都没有 运行之后显示索引超出范围 可是根据代码 没找到这个名字不是会将score初始化吗  于是自己给文本加上了 0 0 0。。。。 可是为什么我经过一轮之后再次输入Jerry这个名字 又就变成了这个样子。。。。为什么没有把之前的覆盖掉。。。。 屏幕快照 2014-12-09 下午7.30.47.png 屏幕快照 2014-12-09 下午7.43.33.png 屏幕快照 2014-12-09 下午7.31.18.png
作者: crossin先生    时间: 2014-12-10 13:10
你第一次就没成功吧,000直接没有空格,作为一个数读进来了
作者: JerryZ    时间: 2014-12-11 03:43
crossin先生 发表于 2014-12-10 13:10
你第一次就没成功吧,000直接没有空格,作为一个数读进来了

 解决了 谢谢
作者: JerryZ    时间: 2014-12-13 12:35
今天学到了查天气 问题出在第四行代码 可是文件都在同一路径下没错啊 没有代码被声明是什么意思。。。是版本问题吗? 屏幕快照 2014-12-12 下午8.27.51.png
作者: crossin先生    时间: 2014-12-13 16:28
city.py文件开头也要指明coding,不然有中文会报错
作者: JerryZ    时间: 2014-12-14 07:01
crossin先生 发表于 2014-12-13 16:28
city.py文件开头也要指明coding,不然有中文会报错

成功了 Thanks
作者: JerryZ    时间: 2014-12-14 07:21
慢着。。。。。刚刚运行没有报错 以为成功了。。。结果输入城市名字 什么都没显示是为什么。。。。试了 北京 ,‘北京’,city[‘北京’]都没有用啊。。 屏幕快照 2014-12-13 下午3.17.07.png
作者: crossin先生    时间: 2014-12-14 18:06
JerryZ 发表于 2014-12-14 07:21
慢着。。。。。刚刚运行没有报错 以为成功了。。。结果输入城市名字 什么都没显示是为什么。。。。试了 北 ...

可能是因为你这个idle的字符编码不是utf-8,你去option->configureIDLE->general里面把编码设成UTF8试试看。
不行的话就在终端里用python 查天气.py运行
作者: JerryZ    时间: 2014-12-15 07:54
刚刚学完and-or技巧 如图。。。为什么不管我输什么数字 它显示的都是big呢?

屏幕快照 2014-12-14 下午3.51.19.png (22.5 KB, 下载次数: 269)

屏幕快照 2014-12-14 下午3.51.19.png


作者: crossin先生    时间: 2014-12-15 22:25
raw_input是字符串,字符串跟数字0比较肯定是大于。比数字的话,要用input
作者: crossin先生    时间: 2014-12-15 22:27
raw_input是字符串,字符串跟数字0比较肯定是大于。比数字的话,要用input
作者: JerryZ    时间: 2014-12-16 06:44
crossin先生 发表于 2014-12-15 22:25
raw_input是字符串,字符串跟数字0比较肯定是大于。比数字的话,要用input

原来如此。。。thanks
作者: JerryZ    时间: 2014-12-18 08:07
今天试着装了一下pygame 我的版本是2.7.7 运行不了 是不是一定要2.7 多一个后缀都不行? 屏幕快照 2014-12-17 下午4.07.34.png
作者: crossin先生    时间: 2014-12-18 10:52
JerryZ 发表于 2014-12-18 08:07
今天试着装了一下pygame 我的版本是2.7.7 运行不了 是不是一定要2.7 多一个后缀都不行? ...

不应该
看上去像是没安装成功。或者32位和64位版本没对上?
作者: JerryZ    时间: 2014-12-18 11:26
crossin先生 发表于 2014-12-18 10:52
不应该
看上去像是没安装成功。或者32位和64位版本没对上?

看了下 我的Mac原来是64位的 那应该下哪个。。。。

屏幕快照 2014-12-17 下午7.24.47.png (113.48 KB, 下载次数: 268)

屏幕快照 2014-12-17 下午7.24.47.png


作者: crossin先生    时间: 2014-12-19 11:14
JerryZ 发表于 2014-12-18 11:26
看了下 我的Mac原来是64位的 那应该下哪个。。。。

这个略复杂,要看你的python是32还是64。pygame要和python的版本对应
64位的pygame似乎官网上没有,要去网上搜索一下
作者: JerryZ    时间: 2014-12-20 08:18
先生, 今天试了下Git  ,我想问下为什么我输入Git的第四课里讲的那两条命令,貌似不成功的样子。。。。 屏幕快照 2014-12-19 下午4.13.57.png
作者: crossin先生    时间: 2014-12-21 15:38
你这个文件夹里没有readme.txt这个文件,所以没有添加成功啊

而且你最好新建个文件夹来做这个,而不是在你的主目录下。不然你会看到一堆的文件列表。。。
作者: tsb02    时间: 2015-1-25 22:13
py2创建元组可以是这样的
  1. a=(1,)
复制代码
然而,当我不小心多打了一个逗号
  1. a,=(1,)
复制代码
a就会赋值成1,用type(a)出来也是int 类型.

图像 4.png

请问",="这种赋值方式是什么原理?还有其他用处吗?

作者: crossin先生    时间: 2015-1-26 13:22
tsb02 发表于 2015-1-25 22:13
py2创建元组可以是这样的然而,当我不小心多打了一个逗号a就会赋值成1,用type(a)出来也是int 类型.

多个返回值的时候,可以赋值给一个元组,或者是多个对应的元素
用处就是,你可以直接拿到对应的值,不用再从元组里去找
比如这两个的区别:
a = (1,2,3)
a,b,c = (1,2,3)
作者: lsxx043    时间: 2015-2-14 21:22
先生,我在codecademy上学习python,也结合您的教程来看。但是学到class那一章,完全混乱掉。
它给了个例子,如下



class ShoppingCart(object):
    """Creates shopping cart objects
    for users of our fine website."""
    items_in_cart = {}
    def __init__(self, customer_name):
        self.customer_name = customer_name

    def add_item(self, product, price):
        """Add product to the cart."""
        if not product in self.items_in_cart:
            self.items_in_cart[product] = price
            print product + " added."
        else:
            print product + " is already in the cart."

    def remove_item(self, product):
        """Remove product from the cart."""
        if product in self.items_in_cart:
            del self.items_in_cart[product]
            print product + " removed."
        else:
            print product + " is not in the cart."
my_cart=ShoppingCart('cap')
my_cart.add_item('cap','10')

关于这个例子,我很疑惑:
1,在第二函数,也就是def add_item(self, product, price)这个函数,为什么加入了product和price两个变量,不加上self.product=product,self.price=price.或者不直接在第一个init中定义好。
我很疑惑,居然这一部分的代码没有报错。
2,所以,彻底糊涂在这个self.**。什么时候一定要用这个句式,什么时候一定要在init中写好self.price,什么时候在code一个新的函数的时候不能直接写price而是要写self.price

不知道我的意思有没有表达清楚。
谢谢。







作者: crossin先生    时间: 2015-2-15 11:17
lsxx043 发表于 2015-2-14 21:22
先生,我在codecademy上学习python,也结合您的教程来看。但是学到class那一章,完全混乱掉。
它给了个例子 ...

类(class)相当于一个模具,对象(object)相当于用这个模具制造出来的一个零件
当你def一个函数,而这个函数的作用是针对当前这个零件的时候,就需要是self.xxx,self指向的就是当前这个对象
成员变量可以在init里定义,也可以直接写在类里,比如这个 items_in_cart = {}
后来的product price虽然没有定义,但他们的值都被加在了items_in_cart里
作者: jane    时间: 2015-4-10 10:26
你好,我想问下使用web.py,为什么ulipad不会自动补全??我试过math又是可以的,如图

作者: crossin先生    时间: 2015-4-10 14:02
jane 发表于 2015-4-10 10:26
你好,我想问下使用web.py,为什么ulipad不会自动补全??我试过math又是可以的,如图
...

有可能第三方库的代码,ulipad没有读到

作者: 行骗江湖    时间: 2015-5-22 19:15
本帖最后由 行骗江湖 于 2015-5-23 11:50 编辑

老师,求教个问题,在windows下为何coding=utf-8输出中文全是中文乱码,coding=gbk就可以输出中文?查了一下午也没个头绪,麻烦老师帮忙解答一下

还有就是如下查天气的程序,也是在windows下,如何能够正确打印字典中的中文,并被调用后可以正确查询出结果?
#-*-coding:utf-8-*-
#__author__ = 'gjj'


city={
    '北京':'101010100',
    'chaoyang':'101010300'
}

print "天气预报",city运行结果:
C:\Python27\python.exe F:/Python/city_s.py
天气预报 {'\xb1\xb1\xbe\xa9': '101010100', 'chaoyang': '101010300'}

Process finished with exit code 0

作者: crossin先生    时间: 2015-5-23 18:25
行骗江湖 发表于 2015-5-22 19:15
老师,求教个问题,在windows下为何coding=utf-8输出中文全是中文乱码,coding=gbk就可以输出中文?查了一 ...

windows的控制台默认编码是cp936,gbk似乎跟它是通用的,但utf8不行,除非自行做转换。

dict中的中文不能在dict中直接输出显示,是不会解码的,你只有把它拿出来再print才行
作者: 行骗江湖    时间: 2015-5-23 20:07
crossin先生 发表于 2015-5-23 18:25
windows的控制台默认编码是cp936,gbk似乎跟它是通用的,但utf8不行,除非自行做转换。

dict中的中文不 ...

好的,多谢老师,这个windows下字符编码真是有点头疼嘿嘿
作者: lemon12341    时间: 2015-9-15 22:15
天气问题当中。
为什么老是‘没有找到该城市呢?’

未命名图片.png (55.54 KB, 下载次数: 263)

未命名图片.png


作者: crossin先生    时间: 2015-9-16 14:26
lemon12341 发表于 2015-9-15 22:15
天气问题当中。
为什么老是‘没有找到该城市呢?’

这个应该是编码问题,你命令行里的默认编码,和city.py文件里的编码不一致,所以匹配不上
作者: lemon12341    时间: 2015-9-16 20:42
crossin先生 发表于 2015-9-16 14:26
这个应该是编码问题,你命令行里的默认编码,和city.py文件里的编码不一致,所以匹配不上 ...

如何解决啊,老师!
作者: crossin先生    时间: 2015-9-17 18:31
lemon12341 发表于 2015-9-16 20:42
如何解决啊,老师!

windows的话,两个文件最上面的 utf-8 改成 cp936
当然你最好确认下你这个ide的默认编码是什么,改成一致的
作者: 373978282    时间: 2015-12-15 19:31
老师,打飞机游戏的完整、连续的代码有吗? 我跟着做到后面,一段一段的有点看不懂了。
作者: crossin先生    时间: 2015-12-15 23:33
373978282 发表于 2015-12-15 19:31
老师,打飞机游戏的完整、连续的代码有吗? 我跟着做到后面,一段一段的有点看不懂了。 ...

你去第12课里下载

http://crossin.me/forum.php?mod=viewthread&tid=572

作者: 373978282    时间: 2015-12-20 15:05
crossin先生 发表于 2015-12-15 23:33
你去第12课里下载

http://crossin.me/forum.php?mod=viewthread&tid=572

谢谢老师,我用的是python3.5,打飞机程序运行之后,程序没有报错,但是游戏窗口打开后就是一直是黑的,没反应,这是怎么回事啊?
C:\Users\我的文档\Desktop
另,gameobjects要怎么安装,我用pip install 报告说找不到资源,手动下载放到lib下sit-packages里面也不行,提示IndexError, "There are 2 values in this object, index should be 0 or 1",要怎么解决啊?
作者: crossin先生    时间: 2015-12-20 16:39
373978282 发表于 2015-12-20 15:05
谢谢老师,我用的是python3.5,打飞机程序运行之后,程序没有报错,但是游戏窗口打开后就是一直是黑的, ...

黑屏应该是图片路径有问题,没有找到。
后面一个问题我不清楚,是不是版本不对
作者: Haye    时间: 2016-2-4 16:41
老师好!请问一下,for循环是不是没有办法实现无限的循环呢?毕竟range()里是有上下限的呢~
作者: crossin先生    时间: 2016-2-4 21:17
Haye 发表于 2016-2-4 16:41
老师好!请问一下,for循环是不是没有办法实现无限的循环呢?毕竟range()里是有上下限的呢~ ...

无限循环用 while True 吧




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5