web-dev-qa-db-ja.com

Python:if-endif-statementはどこで終了しますか?

私は次のコードを持っています:

for i in range(0,numClass):
    if breaks[i] == 0:
        classStart = 0
    else:
        classStart = dataList.index(breaks[i])
        classStart += 1
classEnd = dataList.index(breaks[i+1])

classList = dataList[classStart:classEnd+1]

classMean = sum(classList)/len(classList)
print classMean
preSDCM = 0.0
for j in range(0,len(classList)):
    sqDev2 = (classList[j] - classMean)**2
    preSDCM += sqDev2

SDCM += preSDCM
return (SDAM - SDCM)/SDAM

このコードをVB.NETに変換したいと思います。

しかし、if-elseif-statementがどこで終了するかはわかりません。 「classStart + = 1」の後に終了しますか?

Pythonでfor-nextループがどこで終了するかを確認するのは少し難しいと思います。

コードは http://danieljlewis.org/files/2010/06/Jenks.pdf から取得されます

ありがとうございました。

11
tmighty

はい。 Pythonはインデントを使用してブロックをマークします。ifforの両方がそこで終わります。

13
Daniel Roseman

Pythonでは、インデントされたブロックが終了する場所が、ブロックが終了する場所です。したがって、たとえば、少し単純なコードを考えてみます。

myName = 'Jhon'
if myName == 'Jhon':
   print(myName * 5)
else:
   print('Hello')

これで、このコードを実行すると(対話型プロンプトからではなく、別のモジュールから実行するようにしてください)、「Jhon」が5回出力されます(Pythonはオブジェクトを処理することに注意してください)指定されたとおりに、変数myNameの値を乗算のために数値に変換しようとすることさえわずらわしくありません)これは、ifブロック内のコードブロックが実行されるだけだからです。 elseキーワードがifステートメントの直下以外の任意の場所に配置された場合、またはタブとスペースの使用を混在させた場合、Pythonはエラーを発生させます。

今、あなたのコードでは、

for i in range(0,numClass):
    if breaks[i] == 0:
       classStart = 0
    else:
       classStart = dataList.index(breaks[i])
       classStart += 1

ご覧ください、forのコードブロックのインデントはどこから始まりますか? 1つのタブなので、forステートメントの後に1つのタブでインデントされたものはすべてforブロック内にあります。明らかに、ifステートメントはforステートメント内にあるため、forステートメント内にあります。では、次の行に移りましょう、classStart = 0-これは、forステートメントの2つのタブとifステートメントの1つのタブをインデントしています。つまり、ifステートメントand forブロック内にあります。次の行では、elseキーワードはforステートメントから1つのタブだけインデントされていますが、2つのタブはインデントされていないため、forステートメント内にありますnotifステートメント内。

以前に別の言語でコーディングしたことがある場合は、次のように中括弧を付けることを検討してください。

for i in range(0,numClass)
{
    if breaks[i] == 0
        {
        classStart = 0
        }
    else
        {
        classStart = dataList.index(breaks[i])
        classStart += 1
        }
}

単純な違いは、演算子の優先順位ルールを強制したい場合や、中かっこが必要ない場合を除いて、式にかっこを付ける必要がないことです。代わりに、それらを均等にインデントします。

6
Akshat Tripathi