コードが同じインデント レベルにあるように見えるため、if
/else
ブロックのそれぞれが次々に実行されるため、「Failed Attempt!」と出力されます。存在しない各ファイルパスに対して。3 月 12 日のコメントを考えると、for
ループの後にif
/else
ブロックを使用して、「試行の失敗」を確実にすることができます。すべてのファイルの存在がチェックされた場合にのみ出力されます。以下のコードを参照してください (注: Windows 7 を手元に持っていないため、これをテストしていませんが、動作するはずです):
import os
FILES = ('D:/autorun.exe', 'D:/Install.exe', 'D:/AutoRun.exe', 'D:/install.exe')
FILE_FOUND = False
for file in FILES:
if os.path.exists(file):
FILE_FOUND = file
break
if FILE_FOUND:
os.startfile(FILE_FOUND)
else:
print("Failed Attempt!")
したがって、段階的に分解するには:
モジュールをインポートしos
ます。これは、明らかに他の場所で既に行っています。
チェックする各ファイルのファイルパスは、タプルとして に保存されFILES
ます。タプルは「不変」であるため使用されます。したがって、上記のように正確に保存されることがわかっています。これは、for ループが各ファイルを左から右の順にチェックすることを意味するため、便利です。
FILE_FOUND
として最初に割り当てられFalse
ます。これは後で次の 2 つの目的で使用されます。
- からのファイルのファイルパス文字列を保存します
FILES
(存在する場合)。
- を実行する必要があるかどうかを判断するために使用し
os.startfile()
ます。
次はfor
ループです。タプル内の各ファイルパス文字列は、FILES
次のインデントされたコードによってチェックできるようになりますfor file in FILES:
。変数は からのfile
現在のファイルパスを表す文字列で、ループFILES
に関連付けられたコードに対してローカルです。for
次に、ループは、指定されたファイルパス文字列にファイルが存在するかどうかを確認しますfile
。ファイルが存在する場合、 にFILE_FOUND
格納されている文字列が割り当てられますfile
。その後、このbreak
ステートメントは、チェックされていないfor
アイテムを考慮せずにループを終了します。FILES
それ以外の場合、for
チェックインする項目がなくなるまでループが実行され続けますFILES
。
最後に、if
/else
コード ブロックは、for
ループが存在するファイルを検出するか、FILES
. ( 、、、またはpython docsではないため) と評価FILE_FOUND
された場合は、既存のファイルのファイルパス文字列が以前にループによって格納されていることがわかっている場合に実行されます。ファイルパス文字列がループ内に存在しないことが判明した場合でも、変数は のままであるため、「Failed Attempt!」と出力されます。True
None
0
False
os.startfile(FILE_FOUND)
FILE_FOUND
for
for
FILE_FOUND
False