1
a = 1
inPut = input("Please enter a file name: ")
infile = open(inPut, "r")

line = infile.readline()
print("/*", a ,"*/", line)
while line !="" :
    a = a + 1
    line = infile.readline()
    print("/*",a,"/*", line)

infile.close()

だから私は別のファイルからテキスト行を印刷するためにこのコードに取り組んできました。4行のテキストを含むファイルを作成し、リストされた行の前に印刷ステートメントを作成して、それがどの行であるかを示しました。テキストがないときに 5 行目のインジケーターを出力しないようにコードを変更するにはどうすればよいですか?

これが印刷される方法です:

/* 1 */ Hello
/* 2 */ My name 
/* 3 */ is 
/* 4 */ John
/* 5 */

次のように印刷したいと思います。

/* 1 */ Hello
/* 2 */ My name 
/* 3 */ is 
/* 4 */ John
4

4 に答える 4

1
for a, line in enumerate(infile, 1):
    print("/*", a, "*/", line)
于 2013-10-25T00:01:48.653 に答える
1

私の意見では、あなたの問題は、while ループよりも for ループを使用する方が適しています。このようなもの:

input_filename = input("Please enter a file name: ")
with open(input_filename) as infile:
    for (line_number, line) in enumerate(infile, 1):
        if line:
            print("/*",a,"/*", line)

注意すべき改善点:

  • ファイルハンドル自体はイテレータなので、または同様の方法を使用する必要はなくreadlines、直接反復できます。
  • withファイルハンドルを正しく開閉するためのステートメントの使用
  • を使用enumerateして行番号を取得します (カウンター変数を置き換えます)
  • よりわかりやすい変数名
  • 条件if lineは、空の文字列が false であり、空でない文字列が true であるという事実に基づいて機能します。
于 2013-10-25T00:03:51.137 に答える
0

開いているファイルのようなオブジェクトの readlines() 関数と組み合わせて、for ループを使用できます。また、おそらく次のように、読んだ行を列挙するために enumerate を使用する必要があります。

inPut = input("Please enter a file name: ")
infile = open(inPut, "r")

for index, line in enumerate(infile.readlines()):
    print("/*", index, "/*", line)

infile.close()

この例では、変数「a」の名前を「index」という名前に変更しました。

もう 1 つのヒントは、with ステートメント(Python 2.5 の新機能) を使用して、使い終わったときにファイル ハンドルを自動的に閉じることです。

inPut = input("Please enter a file name: ")
with open(inPut, "r") as infile:
    for index, line in enumerate(infile.readlines()):
        print("/*", index, "/*", line)
于 2013-10-25T00:05:44.293 に答える
0

入力を読み取った後、ループから抜け出すことができます。

while True:
    a = a + 1
    line = infile.readline()
    if line == "":
        break
    print("/*",a,"/*", line)
于 2013-10-25T00:00:55.397 に答える