2017-07-10 24 views
2

次のコードを圧縮できるかどうかを調べたいと思います。私は配列とループ文を使う必要があることを知っていますが、私が試したことはうまくいきませんでした。私は通常、文字列や間隔があるはずのリストを使用できないというエラーが表示されます。これはおそらくループが実際に発生していないことを意味しますか?変数名とファイル名の名前をループする

writef1startsw1pt1 = open("C:/f1startsw1.txt", "w") 
writef1startsw2pt1 = open("C:/f1startsw2.txt", "w") 
writef1startsw3pt1 = open("C:/f1startsw3.txt", "w") 
writef1startsw4pt1 = open("C:/f1startsw4.txt", "w") 
writef1startsw5pt1 = open("C:/f1startsw5.txt", "w") 
writef1startsw6pt1 = open("C:/f1startsw6.txt", "w") 
writef1startsw7pt1 = open("C:/f1startsw7.txt", "w") 

変更する必要がある唯一のものは、1〜7

に至るまで、変数の数、およびファイル名に数ある私は解決策があまりにも複雑ではありません確信していますしかし、私はこれを理解しようとしばらく時間を費やしています、そして、私はまだ困惑しています。ありがとう!

+0

番の変数を使用しないでくださいを代わりにリストを使用し – user2357112

答えて

1

このような変数名の置換はPythonでは不可能ですが、同じ目標を達成するためにリストを使うことができます。

writef1startswpt1 = [] 
for i in range (1,8): 
    writef1startswpt1.append(open("C:/f1startsw" + str(i)+ ".txt", "w")) 

#Now you have a list of those 7 open files, and you can access them with the indices 0 - 6 
0

あなたのファイルが1から始まり(またはあなたは、単にインデックス0

Noneエントリを保つ使用することができながら、リストのインデックスは0から始まるので、私は、ファイルを追跡するためにリストの代わりに辞書を使用します
files = {} 
for i in range(1, 7+1): 
    files["writef1startsw{}pt1".format(i)] = open("C:/f1startsw{}.txt".format(i), "w") 

files["writef1startsw1pt1"] #first file 

あなたの代わりにリストを使用する場合は、あなたがこれを行うことができます。。

files = [None] 

for i in range(1, 7+1): 
    files.append(open("C:/f1startsw{}.txt".format(i), "w")) 

files[1] #first file 
+0

なぜ「7 + 1」、なぜわずか8 ?=) – dreamzboy

+0

リストの索引付け方法を明確にするだけです。それはあなたがoff-by-oneのエラーやインデックスをどのように扱い、パフォーマンスに大きな影響を与えないかをよく知っていれば必要ではありませんが、質問に答えるために私はそれを簡単にするようにしました:) – victor

関連する問題