私は次のコードを持っています:
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 から取得されます
ありがとうございました。
はい。 Pythonはインデントを使用してブロックをマークします。if
とfor
の両方がそこで終わります。
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
}
}
単純な違いは、演算子の優先順位ルールを強制したい場合や、中かっこが必要ない場合を除いて、式にかっこを付ける必要がないことです。代わりに、それらを均等にインデントします。