python之一(简明python教程新旧版勘误)

来源:互联网 发布:安卓魔音通话变声软件 编辑:程序博客网 时间:2024/06/05 07:33

    写在前面:作为一个非科班出身的“程序媛”已经好多天都没写过代码了,本科时候学过的那些C/C++也从来没有没有真正掌握过,因此开始进行每天编程一小时活动。虽然每天一小时时间不是很长,但我相信“不积跬步无以至千里”,坚持这项活动不为别的,只是想真正去投入一件事情。

    从本科学习C/C++的经历来看,用这两门语言去做点事情,真是太困难了,好多代码都要自己写,根据网上很多老程序员的推荐,决定先从很好上手的python开始学起。目前是第一阶段,学习python的语法,使用《简明python教程》作为学习资料。《简明python教程》写的很简洁,很好上手,但是该教程是基于python 2.x的好像,对于python 3.x很多函数都已经不适用了。从开始“每天编程一小时”到今天共五天,已经学习到了错误处理部分了。

    下一步学习计划:基本掌握python语法之后,开始学习《统计思维:程序员数学之概率统计》,这本书是基于python介绍了统计基本知识的程序员数学教程,刚好可以弥补一下之前概率论没好好学的遗憾。在完成阅读并根据本书要求编写代码之后通读一遍python 3.4.0的documentation,主要是想看看之前学习的部分有没有什么遗漏的地方。再之后可能就去学一些python网络编程,或者是gui方面的知识了吧,不过这都是后话了。

   《简明python教程》旧版本部分在新版本上的编程语法问题:

  • 旧版:print 'Hello World'
    新版:print('Hello world')
  • 在windows下运行python脚本时,原文给出的代码为:
    <span style="font-family:KaiTi_GB2312;font-size:18px;">python yourcode.py</span>
    实际用的时候是不需要加上上面代码的python的,直接给出脚本文件地址就好了
  • 旧版:
    <span style="font-family:KaiTi_GB2312;font-size:18px;">print 'Hello',print 'world'</span>
    以上代码输出结果是打印出来的'Helloworld'在同一行显示,但是在新版里面这样已经行不通了。
    <span style="font-family:KaiTi_GB2312;font-size:18px;">print('Hello',end='')print('world')</span>
    以上为新版代码,end=''单引号中可以加入不同内容,作为连接两个字符串的部分,例如:
    <span style="font-family:KaiTi_GB2312;font-size:18px;">print('Hello',end=' ')print('world')</span>
    打印结果为'Hello world'注意中间的空格。
  • 本书第十章“解决问题——编写一个Python脚本”给出了一个备份打包文件夹的例子,其中作者直接使用'zip'的命令行进行打包的,但是在我的机器(window 8 pro)上这样做会提示没有这个命令。我查了一些windows下不使用第三方程序命令行打包的资料,国外网站上给出了解决方案:
    <span style="font-family:KaiTi_GB2312;font-size:18px;">set FILETOZIP=c:\ue_english.txt    set TEMPDIR=C:\temp738    rmdir %TEMPDIR%    mkdir %TEMPDIR%    copy %FILETOZIP% %TEMPDIR%    echo Set objArgs = WScript.Arguments > _zipIt.vbs    echo InputFolder = objArgs(0) >> _zipIt.vbs    echo ZipFile = objArgs(1) >> _zipIt.vbs    echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipIt.vbs    echo Set objShell = CreateObject("Shell.Application") >> _zipIt.vbs    echo Set source = objShell.NameSpace(InputFolder).Items >> _zipIt.vbs    echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs    echo wScript.Sleep 2000 >> _zipIt.vbs    CScript  _zipIt.vbs  %TEMPDIR%  C:\someArchive.zip    pause</span>
    我试了一下,会提示没有_zipIt.vbs命令。详细信息请见:这里
  • 《简明Python教程》中给出了读取文件的方式:
    <span style="font-family:KaiTi_GB2312;font-size:18px;">f = file('poem.txt', 'w') # open for 'w'riting</span>
    但新版中应该是没有file这个函数了,所以用一下方式读取或写入文件:
    <span style="font-family:KaiTi_GB2312;font-size:18px;">f = open('poem.txt', 'w') # open for 'w'ritingf = open('poem.txt', 'r') # open for 'r'ading</span>
  • 第十二章存储器部分给出了文档序列化方式,使用的module pickle,原文说明了有两种模块,一种是pure python,另一种为c实现的,c的速度更快,需要引入的moduel为cPickle,但新版中统一了两个模块的使用方式为:
    <span style="font-family:KaiTi_GB2312;font-size:18px;">import pickle</span>
    使用下面方式会报错:
    <span style="font-family:KaiTi_GB2312;font-size:18px;">import cPickle</span>
  • 第十二章介绍的序列化方式使用了函数dump,但是在运行的时候会报错:
    <span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="background-color: rgb(255, 255, 0);">import cPickle as p</span>#import pickle as pshoplistfile = 'shoplist.data'# the name of the file where we will store the objectshoplist = ['apple', 'mango', 'carrot']# Write to the file<span style="background-color: rgb(255, 255, 0);">f = file(shoplistfile, 'w')</span>p.dump(shoplist, f) # dump the object to a filef.close()del shoplist # remove the shoplist# Read back from the storage<span style="background-color: rgb(255, 255, 0);">f = file(shoplistfile)</span>storedlist = p.load(f)print storedlist</span>
    有问题的代码已经高亮标出,正确的写法如下:
    <span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="background-color: rgb(255, 255, 0);">import pickle as p</span>#import pickle as pshoplistfile = 'shoplist.data'# the name of the file where we will store the objectshoplist = ['apple', 'mango', 'carrot']# Write to the file<span style="background-color: rgb(255, 255, 0);">f = file(shoplistfile, 'wb')</span>p.dump(shoplist, f) # dump the object to a filef.close()del shoplist # remove the shoplist# Read back from the storage<span style="background-color: rgb(255, 255, 0);">f = file(shoplistfile, 'rb')</span>storedlist = p.load(f)print storedlist</span>
    也就是说在dump和load的时候要以二进制的形式读写。
    我目前遇到的一些比较重要的问题也就是以上几点了。
0 0
原创粉丝点击