2012-08-05 12 views
6

を混乱:http://www.penzilla.net/tutorials/python/fileio/のPythonでファイルへの書き込み - 「」で行われていないが、」私はこのチュートリアルに出くわしたファイルを読み書きについて学びながら、私はプログラミングの経験の年未満を持っている私

チュートリアルを。私はこのコードをコピーし、Python 2.7.3シェルを通してそれを実行しました

# Let's create a file and write it to disk. 
filename = "test.dat" 
# Let's create some data: 
done = 0 
namelist = [] 
while not done: 
    name = raw_input("Enter a name:") 
    if type(name) == type(""): 
     namelist.append(name) 
    else: 
     break 

# Create a file object: 
# in "write" mode 
FILE = open(filename,"w") 

# Write all the lines at once: 
FILE.writelines(namelist) 

# Alternatively write them one by one: 
for name in namelist: 
    FILE.write(name) 

FILE.close() 

私はに追加された文字列を入力するために繰り返しよう求めています:作成し、ファイルに書き込むための簡単なスクリプトとして、以下の例を提供しています。私が理解していないのは、Whileループを終了するための条件(「実行していない:」)です。 。これは、プロンプトで入力してループを終了し、続いてファイルを書き込むことを意味すると考えましたが、doneは効果がありません。それで、私は、プロンプトに入力された文字列以外の文字列がループを壊してファイルを書き込むべきだと考えました。私はループをまったく壊すことができませんでした。私がプロンプトで入力したものについては、「名前を入力してください:」というメッセージが再度表示されました。 Whileループを削除している場合/ else文を保持することにより

は、私は、単一のプロンプトのために働くのコードを得ました。誰かがここで私が理解していないことを教えてもらえますか?私はそれが明白であると仮定されたので、それはチュートリアルで説明されていないかなり単純な概念であると推測しています。 "done"は一般的な単語なので、Python固有の意味を見つけることができませんでした。

+10

このコードは恐ろしいです。別のチュートリアルがあります。 – Daenyth

+2

そのコードは恐ろしいです。それは命名規則に反し、誤解を招く無意味なループ条件を使用し、型のチェック(継承も無視する)、間違っている(例外がスローされない限りループを終了することはできないが、キャッチされない)、欠如した、 ( '' open(...) '、 '' finally:f.close() ')を使うべきです。また、このページは6年以上経過しているようです。 – delnan

+5

ホーリー・モーゼス、そのチュートリアルの作者とリンチできますか? – favoretti

答えて

2

doneは3行目に一度割り当てられます。

done = 0 

したがって、このwhileループは限り行われるようにループし続けますまだ「0ではない」:

while not done: 

eそれはbreakステートメント(行11)をヒットしない限り、それは永遠にループし続けます。残念なことに、このコードには欠陥があり、それは決して起こりません。

あなたが「完了」と入力すると、その後にif文を変更停止する場合:

if name == "done": 

しかし、上記の文字列リテラルdoneは、変数doneを行うには何もを持っていないことに注意してください以前割り当てられた。

2

あなたの責任ではありません。そのコードはを提供しません。はループから脱出しません。

if name == 'end': 
    break 
1

コードは最初は悪いです。この場合

doneは、変数の名前です。書かれているように、終了する方法がないので、それは永遠に繰り返されます。

あなたはそのチュートリアル次停止し、より良いを選ぶ必要があります:http://wiki.python.org/moin/BeginnersGuide/NonProgrammers

3

私は今、そのチュートリアルを次停止します。コードはPythonicではありません。それはあまりにも複雑で、かなり古くなっているようです。言われていること

は、ここでは(はい、それは同じことを行いますが、唯一の道)私はそのチュートリアルのコードを記述します。方法は次のとおりです。

with open('test.dat', 'w') as handle: 
    while True: 
    name = raw_input('Enter a name: ') 

    if not name: 
     break 

    handle.write(name + '\n') 
関連する問題