Python: waar eindigt de if-endif-statement?

Ik heb de volgende code:

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

Ik wil deze code graag converteren naar VB.NET.

Maar ik weet niet zeker waar de if-elseif-statement eindigt.
Eindigt het na “classStart +=1”?

Ik vind het ook een beetje moeilijk om te zien waar de for-next-loops eindigen in Python.

De code is afkomstig van http://danieljlewis.org/files/2010/06/Jenks.pdf

Bedankt.


Antwoord 1, autoriteit 100%

Ja. Python gebruikt inspringing om blokken te markeren. Zowel de ifals de foreindigen daar.


Antwoord 2, autoriteit 50%

In Python, waar je ingesprongen blok eindigt, is dat precies waar je blok zal eindigen. Overweeg bijvoorbeeld een wat eenvoudigere code:

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

Als u deze code nu uitvoert (zorg ervoor dat u deze uitvoert vanuit een aparte module, niet vanuit de interactieve prompt), wordt ‘Jhon’ vijf keer afgedrukt (merk op dat Python de objecten precies zal behandelen zoals ze zijn gespecificeerd, het zal niet eens de moeite nemen om te proberen de waarde van de variabele myNameom te zetten in een getal voor vermenigvuldiging) en dat is alles. Dit komt omdat het codeblok in het if-blok alleen wordt uitgevoerd. Merk op dat als het sleutelwoord elseergens anders was geplaatst dan net onder de if-instructie of als je het gebruik van tabs en spaties had gemengd, Python een foutmelding zou geven.

Nu, in uw code,

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

Zie je waar de inspringing van het codeblok van forbegint? Eén tabblad, dus alles dat één tabblad is ingesprongen na de for-instructie, bevindt zich in het for-blok. Het is duidelijk dat de if-instructie zich in de for-instructie bevindt, dus binnen de for-instructie. Laten we nu naar de volgende regel gaan, classStart = 0— dit springt twee tabs in van de for-instructie en één tab van de if-instructie ; dus het staat in de if-instructie enin het for-blok. Op de volgende regel heeft u een else-zoekwoord dat slechts één tabblad van de for-instructie heeft ingesprongen, maar niet twee tabbladen, dus binnen de for-instructie, en nietin de if-instructie.

Overweeg om accolades zoals deze te plaatsen als je eerder in een andere taal/talen hebt gecodeerd:

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

De simpele verschillen zijn dat je geen haakjes hoeft te plaatsen voor je uitdrukkingen, tenzij je de voorrangsregel van de operator wilt forceren en je die accolades niet nodig hebt, maar ze gewoon gelijkmatig laten inspringen.


Antwoord 3

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

Other episodes