python初学者看什么书的作业 为什么运行不出来

针对小白的Python入门教程——Python使用说明书
发表于 16:01|
作者廖雪峰
摘要:Python就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写,直接使用现成的即可。
现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了。
在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你自己的电脑上。写程序也讲究一个感觉,你需要一个字母一个字母地把代码自己敲进去,在敲代码的过程中,初学者经常会敲错代码,所以,你需要仔细地检查、对照,才能以最快的速度掌握如何写程序。
在交互式环境的提示符&&&下,直接输入代码,按回车,就可以立刻得到代码执行结果。现在,试试输入100+200,看看计算结果是不是300:
&&& 100+200300很简单吧,任何有效的数学计算都可以算出来。
如果要让Python打印出指定的文字,可以用print语句,然后把希望打印的文字用单引号或者双引号括起来,但不能混用单引号和双引号:
&&& print 'hello, world'hello, world
这种用单引号或者双引号括起来的文本在程序中叫字符串,今后我们还会经常遇到。
最后,用exit()退出Python,我们的第一个Python程序完成!唯一的缺憾是没有保存下来,下次运行时还要再输入一遍代码。
小结:在Python交互式命令行下,可以直接输入代码,然后执行,并立刻得到结果。
使用文本编辑器
在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍。
所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样,程序就可以反复运行了。
现在,我们就把上次的'hello, world'程序用文本编辑器写出来,保存下来。
所以问题又变成了:用什么文本编辑器?
推荐两款文本编辑器:一个是
,免费使用,但是不付费会弹出提示框:
,免费使用,有中文界面:
请注意,用哪个都行,但是绝对不能用Word和Windows自带的记事本。Word保存的不是纯文本文件,而记事本会自作聪明地在文件开始的地方加上几个特殊字符(UTF-8
BOM),结果会导致程序运行出现莫名其妙的错误。
安装好文本编辑器后,输入以下代码:print 'hello, world'
注意print前面不要有任何空格。然后,选择一个目录,例如C:\Workspace,把文件保存为hello.py,就可以打开命令行窗口,把当前目录切换到hello.py所在目录,就可以运行这个程序了:C:\Workspace&python hello.pyhello, world也可以保存为别的名字,比如abc.py,但是必须要以.py结尾,其他的都不行。此外,文件名只能是英文字母、数字和下划线的组合。
如果当前目录下没有hello.py这个文件,运行python hello.py就会报错:
python hello.pypython: can't open file 'hello.py': [Errno 2] No such file or directory
报错的意思就是,无法打开hello.py这个文件,因为文件不存在。这个时候,就要检查一下当前目录下是否有这个文件了。
还有同学问,能不能像.exe文件那样直接运行.py文件呢?在Windows上是不行的,但是,在Mac和Linux上是可以的,方法是在.py文件的第一行加上:#!/usr/bin/env python
然后,通过命令:&code&$ chmod a+x hello.py&/code&
就可以直接运行hello.py了,比如在Mac下运行:
小结:用文本编辑器写Python程序,然后保存为后缀为.py的文件,就可以用Python直接运行这个程序了。用Python开发程序,完全可以一边在文本编辑器里写代码,一边开一个交互式命令窗口,在写代码的过程中,把部分代码粘到命令行去验证,事半功倍!前提是得有个27'的超大显示器!
输入和输出
用print加上字符串,就可以向屏幕上输出指定的文字。比如输出'hello, world',用代码实现如下:&&& print 'hello, world'
print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出:&&& print 'The quick brown fox', 'jumps over', 'the lazy dog'The quick brown fox jumps over the lazy dog
print会依次打印每个字符串,遇到逗号“,”会输出一个空格,因此,输出的字符串是这样拼起来的:
print也可以打印整数,或者计算结果:&&& print 300300&&& print 100 + 200300
因此,我们可以把计算100 + 200的结果打印得更漂亮一点:&&& print '100 + 200 =', 100 + 200100 + 200 = 300
注意,对于100 + 200,Python解释器自动计算出结果300,但是,'100 +
200 ='是字符串而非数学公式,Python把它视为字符串,请自行解释上述打印结果。
现在,你已经可以用print输出你想要的结果了。但是,如果要让用户从电脑输入一些字符怎么办?Python提供了一个raw_input,可以让用户输入字符串,并存放到一个变量里。比如输入用户的名字:&&& name = raw_input()Michael
当你输入name = raw_input()并按下回车后,Python交互式命令行就在等待你的输入了。这时,你可以输入任意字符,然后按回车后完成输入。
输入完成后,不会有任何提示,Python交互式命令行又回到&&&状态了。那我们刚才输入的内容到哪去了?答案是存放到name变量里了。可以直接输入name查看变量内容:&&& name'Michael'
什么是变量?请回忆初中数学所学的代数基础知识:
设正方形的边长为a,则正方形的面积为a x a。把边长a看做一个变量,我们就可以根据a的值计算正方形的面积,比如:
若a=2,则面积为a x a = 2 x 2 = 4;
若a=3.5,则面积为a x a = 3.5 x 3.5 = 12.25。
在计算机程序中,变量不仅可以为整数或浮点数,还可以是字符串,因此,name作为一个变量就是一个字符串。
要打印出name变量的内容,除了直接写name然后按回车外,还可以用print语句:&&& print nameMichael
有了输入和输出,我们就可以把上次打印'hello, world'的程序改成有点意义的程序了:name = raw_input()print 'hello,', name
运行上面的程序,第一行代码会让用户输入任意字符作为自己的名字,然后存入name变量中;第二行代码会根据用户的名字向用户说hello,比如输入Michael:C:\Workspace& python hello.pyMichaelhello, Michael
但是程序运行的时候,没有任何提示信息告诉用户:“嘿,赶紧输入你的名字”,这样显得很不友好。幸好,raw_input可以让你显示一个字符串来提示用户,于是我们把代码改成:name = raw_input('please enter your name: ')print 'hello,', name
再次运行这个程序,你会发现,程序一运行,会首先打印出please enter your name:,这样,用户就可以根据提示,输入名字后,得到hello, xxx的输出:C:\Workspace& python hello.pyplease enter your name: Michaelhello, Michael
每次运行该程序,根据用户输入的不同,输出结果也会不同。
在命令行下,输入和输出就是这么简单。
小结:任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,有了输出,程序运行后才能告诉用户任务的结果。输入是Input,输出是Output,因此,我们把输入输出统称为Input/Output,或者简写为IO。
raw_input和print是在命令行下面最基本的输入和输出,但是,用户也可以通过其他更高级的图形界面完成输入和输出,比如,在网页上的一个文本框输入自己的名字,点击“确定”后在网页上看到输出信息。原文链接:
& & & & 责编(arron刘)
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章Python 爬虫入门《中》Python 爬虫承上启下上篇已经讲到了简单的爬虫的一些相关的东西,模块学习,这篇就从最基本的"爬虫"开始,一句一句的阅读一个炒鸡简单的“爬虫”。
蠕动的小家伙import urllib.requestimport osimport re# 未写def proxy_open():
# 安装代理 步骤
# 1. 选择代理
# 2. 建立代理
# 3. 安装代理
passdef save_pic(url,filename):
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0. Safari/537.36')
proxy_open()
response = urllib.request.urlopen(req)
except urllib.error.HTTPError:
pic = response.read()
if len(pic) == 0:
print('图片不存在')
f = open(filename,'wb')
f.write(pic)
f.close()def find_pic(html):
pic_list = []
a = html.find('&div class=\"postContent\"&')
end = html.find('&/p&',a)
while True:
b = html.find('src="',a)
if b & end:
a = html.find('"',b)
pic_list.append(html[b:a])
return pic_listdef get_pic(url,count):
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0. Safari/537.36')
response = urllib.request.urlopen(req)
html = response.read()
html = html.decode('gbk')
if re.search(r'很抱歉!没有找到符合条件的页面哦',html) != None:
print('页面无法访问')
# print(str(html))
# 找到图片链
pic_list = find_pic(html)
if len(pic_list) == 0:
# 保存图片
for each in pic_list:
print(each)
filename = './OOXX/' + str(count) + '_' + str(index) + '.jpg'
save_pic(each,filename)
index += 1def download_mm(folder = 'OOXX',pages = 100):
os.mkdir(folder)
# os.chdir(folder)
except FileExistsError:
url_module = 'http://www.meizitu.com/a/%d.html'
count = 34
while True:
if count &= pages:
url = url_module.replace('%d',str(count))
print(url)
get_pic(url,count)
count += 1if __name__ == '__main__':
download_mm()解释这段代码我曾经发出来过,是一个很简单的,甚至算不上“爬虫”的“爬虫”。
刚刚开始读Python代码的时候,其实我是非常不适应的,我是属于典型的windows程序员,很不习惯这种小写加上下划线的命名规范,当然,到现在为止,我依旧不适应这种写法,也间接的说明了我的英语很烂的缘故吧。废话不多了,首先开始读。和 c 的 main() 一样
,python 也有一个入口点,就是 if __name__ == '__main__':
download_mm()一般是采用这种形式来说明程序的入口。可以看到这里调用了一个函数
download_mm , 这个是属于个人的封装习惯了,不同的人对于函数的封装习惯略有区别。
def download_mm(folder = 'OOXX',pages = 100):函数声明部分说明了,这个函数是有两个可选的默认参数的,由于我也就忘记了这个默认参数的习惯,所以 我遵循 c++ 的标准,从最右边开始,往左,但是 python 这么灵活的语言中应该是没有这个限制的。
os.mkdir(folder)
# os.chdir(folder)
except FileExistsError:
pass使用了一个叫做 os 的模块,可以通过帮助文档,这个 模块的主要作用是和计算机的文件系统打交道的。其实我觉得这种说法是片面的,感觉就是和文件及文件夹相关的操作。这里是创建了一个目录,之后改变了工作目录,其实在帮助文档说的非常详细了,
我大概也知道有很多和我一样苦逼的自学朋友们英语没有那么溜,我这里也顺便给大家推荐一个小软件 QTranslate ,小巧便捷,支持几个在线词库,还不错。接着是一个异常处理,如果文件夹存在那么创建的话就会报出一个异常,我们接收异常之后略过就好了,因为本来的目的就创建文件夹。仔细看了之后 觉得这个 os.chdir(folder) 在这里有一些多余,毕竟是默认的相对路径且不支持指定路径,这里不要也是成立的。(未验证)
url_module = 'http://www.meizitu.com/a/%d.html'
count = 34
while True:
if count &= pages:
url = url_module.replace('%d',str(count))
print(url)
# 获取图片
get_pic(url,count)
count += 1后面是一个简单的循环,为了匹配这个网页的规则,也就是说明了爬虫是具有一定规则性的,当然你如果能支持非常多的规则的话,应该能爬到不少东西,我这里充其量算是一个精确搜索的爬虫。接下来,我自己吐槽一下我自己的这个地方的字符串算法,应该是有更好的办法写的,各位看官可以下去自己测试,就是 replace 的地方,之后把生成的链接和和count传入了 get_pic 函数,传入 count 的目的是给生成的图片命名。爬虫第二个比较关键的函数就是这个获取图片了。def get_pic(url,count):
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0. Safari/537.36')
response = urllib.request.urlopen(req)
html = response.read()
html = html.decode('gbk')
if re.search(r'很抱歉!没有找到符合条件的页面哦',html) != None:
print('页面无法访问')
# print(str(html))
# 找到图片链
pic_list = find_pic(html)
if len(pic_list) == 0:
# 保存图片
for each in pic_list:
print(each)
filename = './OOXX/' + str(count) + '_' + str(index) + '.jpg'
save_pic(each,filename)
index += 1先说一下它的写法。这里使用了我们上篇说到的 urllib.request 模块,用来获取网页的源代码。获取到源码之后 传入了 find_pic 函数,这个函数的目的是 找到源码中的,我们需要的东西,即图片的链接。def find_pic(html):
pic_list = []
a = html.find('&div class=\"postContent\"&')
end = html.find('&/p&',a)
while True:
b = html.find('src="',a)
if b & end:
a = html.find('"',b)
pic_list.append(html[b:a])
return pic_list使用的是最基本的字符串查找算法,如果这里使用正则可以几句代码就搞定,各位看官下去可以自己尝试写成正则的。
正则模块是
re ,可以自己学习这个模块的使用方法。之后将这个存放图片链接列表遍历一下,保存到本地,调用了 save_pic这个函数的写法如下:def save_pic(url,filename):
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0. Safari/537.36')
proxy_open()
response = urllib.request.urlopen(req)
except urllib.error.HTTPError:
pic = response.read()
if len(pic) == 0:
print('图片不存在')
f = open(filename,'wb')
f.write(pic)
f.close()这里使用了以前的方法,使用 open 和 write 、close 来保存文件。这里需要注意的一点是, 写入文件之后一定要立马调用 close 方法,否则可能出现一些很奇怪的事情,例如文件写入乱码和失败,至于为什么会出现这种问题,各位读者请自己思考,为什么留下这些问题是为了给读者一些思考的空间。不得不提的是,这里还有这么个东西可以用来保存文件:urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None) 到这里基本流程就全部解释完毕了,关于代理和多线程处理,会在下一篇中继续跟进。
添加新批注
在作者公开此批注前,只有你和作者可见。
查看更早的 5 条回复浅淡Python--初学者不得不说的秘密浅淡Python--初学者不得不说的秘密等我的人百家号不知道大家是否知道,Python的出现其实很偶然,是著名的“龟叔”Guido vanRossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。既然圣诞节快到了,闲来无事,也来跟大家唠唠Python。龟叔给Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容 易,而且将来深入下去,可以编写那些非常非常复杂的程序。Python的哲学就是尽量写容易看明白的代码,尽量写少的代码。如果一个资深程序员向你炫耀 他写的晦涩难懂、动不动就几万行的代码,你可以尽情地嘲笑他。但是,人无完人,Python的缺点是什么呢?第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成 CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以 非常快。但是大量的应用程序不需要这么快的运行速度,因为用户根本感觉不出来。例如开发一个下载MP3的网络应用程 序,C程序的运行时间需要0.001秒,而Python程序的运行时间需要0.1秒,慢了100倍,但由于网络更慢,需要等待1 秒,你想,用户能感觉到1.001秒和1.1秒的区别吗?这就好比F1赛车和普通的出租车在北京三环路上行驶的道理一 样,虽然F1赛车理论时速高达400公里,但由于三环路堵车的时速只有20公里,因此,作为乘客,你感觉的时速永远 是20公里。第二个缺点就是代码不能加密。如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不 用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C 代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。这个缺点仅限于你要编写的软件需要卖给别人挣钱的时候。好消息是目前的互联网时代,靠卖软件授权的商业模式越 来越少了,靠网站和移动应用卖服务的模式越来越多了,后一种模式不需要把源码给别人。再说了,现在如火如荼的开源运动和互联网自由开放的精神是一致的,互联网上有无数非常优秀的像Linux一样的开源 代码,我们千万不要高估自己写的代码真的有非常大的“商业价值”。那些大公司的代码不愿意开放的更重要的原因是 代码写得太烂了,一旦开源,就没人敢用他们的产品了。当然,Python还有其他若干小缺点,请自行忽略,就不一一列举了。综上所述,Python的缺点那都不是事。如果你是小白用户,满足以下条件:会使用电脑,但从来没写过程序;还记得初中数学学的方程式和一点点代数知识;想从编程小白变成专业的软件架构师;每天能抽出半个小时学习。想要入编程这行,Python是个不二选择。本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。等我的人百家号最近更新:简介:为了等你,我错过了等我的人。作者最新文章相关文章毫无基础的人如何入门 Python ? - 知乎<strong class="NumberBoard-itemValue" title="被浏览<strong class="NumberBoard-itemValue" title="1,417分享邀请回答79356 条评论分享收藏感谢收起72924 条评论分享收藏感谢收起没有更多推荐了,
不良信息举报
举报内容:
17个新手常见Python运行时错误
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 python编程初学者指南 的文章

 

随机推荐