6

プログラミング経験は1年未満です。ファイルの読み書きについて学んでいるときに、このチュートリアルに出くわしました: http://www.penzilla.net/tutorials/python/fileio/

このチュートリアルでは、ファイルを作成して書き込むための簡単なスクリプトとして次の例を示します。

# 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()  

このコードをコピーして、Python 2.7.3 シェルで実行しました。ファイルに書き込まれるリストに追加される文字列を入力するよう繰り返し求められます (これは理にかなっています)。私が理解していないのは、While ループを終了するための条件です (「While not done:」)。これは、プロンプトで done と入力してループを終了し、その後ファイルを書き込むことを意味すると思いましたが、done は効果がありません。次に、プロンプトで文字列以外を入力すると、ループを中断してファイルを書き込む必要があると考えました。ループをまったく中断できませんでした。プロンプトで入力したものについては、「名前を入力してください:」というプロンプトが再度表示されました。

While ループを削除し、if/else ステートメントを保持することで、単一のプロンプトに対してコードが機能するようになりました。ここで私が理解していないことを誰かに教えてもらえますか? 自明であると想定されていたため、チュートリアルでは説明されていないかなり単純な概念だと思います。「完了」は非常に一般的な単語であるため、Python 固有の意味を見つけることができませんでした。

4

4 に答える 4

4

私は今、そのチュートリアルに従うのをやめます。コードは Pythonic ではなく、複雑すぎて、かなり古くなっているようです。

そうは言っても、チュートリアルのコードを書く方法は次のとおりです(はい、同じことを行いますが、正しい方法のみです):

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

    if not name:
      break

    handle.write(name + '\n')
于 2012-08-05T23:23:36.417 に答える
2

doneは 3 行目で 1 回割り当てられます。

done = 0

したがって、この while ループは、done がまだ「0 でない」限りループし続けます。

while not done:

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

「done」と入力したときに停止する場合は、if ステートメントを次のように変更します。

if name == "done":

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

于 2012-08-05T23:21:55.127 に答える
2

これはあなたの責任ではないです。そのコードは、ループから抜け出す方法を提供しません。

if name == 'end':
  break
于 2012-08-05T23:19:31.473 に答える
1

まず、コードが悪いです。

この場合、doneは変数の名前です。書かれているように、終了する方法がないため、永遠にループします。

そのチュートリアルに従うのをやめて、より良いものを選ぶべきです: http://wiki.python.org/moin/BeginnersGuide/NonProgrammers

于 2012-08-05T23:21:10.137 に答える