pythonの1つ(pythonチュートリアルの新旧版の誤り)


前に书きます:1つの非科班出身の“プログラム媛”としてすでに何日もコードを书いたことがなくて、本科の时に学んだあれらのC/C++も本当に掌握したことがなくて、そのため毎日1时间のプログラミングの活动を始めます.毎日1時間はそんなに長くはありませんが、私は「千里に至るまで寄り添わない」と信じて、この活動を堅持するのは他ではなく、本当に一つのことに没頭したいだけです.
本科でC/C++を学んだ経験から見ると、この2つの言語で何かをするのは本当に難しいです.多くのコードは自分で書かなければなりません.ネット上の多くのベテランプログラマーの推薦によって、まず上手なpythonから学ぶことにしました.現在は第1段階で、pythonの文法を学び、「簡明pythonチュートリアル」を学習資料として使用しています.「簡明pythonチュートリアル」は簡潔で上手ですが、このチュートリアルはpython 2に基づいています.xのようにpython 3.x多くの関数はもう適用されません.「毎日1時間プログラミング」を始めてから今日までの5日間、エラー処理の部分を学びました.
次の学習計画: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='単一引用符には2つの文字列を接続する部分として異なる内容を加えることができます.例えば、
    <span style="font-family:KaiTi_GB2312;font-size:18px;">print('Hello',end=' ')
    print('world')</span>
    の印刷結果は'Hello world'注意の中間のスペースです.
  • 本書の第10章「問題を解決する--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'riting
    f = open('poem.txt', 'r') # open for 'r'ading</span>
  • 第12章メモリ部では、ドキュメントのシーケンス化方式、使用するmodule pickleが示されています.原文では、pure pythonとcで実現された2つのモジュールがあり、cの速度が速く、導入する必要があるmoduelはcPickleですが、新版では2つのモジュールが統一されています.
    <span style="font-family:KaiTi_GB2312;font-size:18px;">import pickle</span>
    は、次の方式を使用するとエラーが発生します.
    <span style="font-family:KaiTi_GB2312;font-size:18px;">import cPickle</span>
  • 第12章で紹介したシーケンス化方式は関数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 p
    shoplistfile = 'shoplist.data'
    # the name of the file where we will store the object
    shoplist = ['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 file
    f.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 p
    shoplistfile = 'shoplist.data'
    # the name of the file where we will store the object
    shoplist = ['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 file
    f.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の時にバイナリ形式で読み書きする.

  • 私が今直面しているいくつかの重要な問題は以上の点です.