2013-10-17 7 views
7

Ich habe den folgenden Code:Python: Wo endet die if-endif-Anweisung?

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 

Ich mag würde diesen Code zu VB.NET konvertieren.

Aber ich bin nicht sicher, wo die If-elseif-Anweisung endet. Beendet es nach "classStart + = 1"?

Ich fühle es ein bisschen schwierig zu sehen, wo die For-Next-Loops auch in Python enden.

Der Code wird genommen von http://danieljlewis.org/files/2010/06/Jenks.pdf

Danke.

Antwort

8

Ja. Python verwendet Einrückungen, um Blöcke zu markieren. Sowohl die if als auch die for enden dort.

+0

Cool, danke. Kannst du mir auch sagen, was der Doppelstern (**) in dieser Zeile bedeutet? sqDev2 = (classList [j] -classMean) ** 2 – tmighty

+0

bedeutet "Macht von", äquivalent zu^in vielen Sprachen. ** 2 (quadriert), ** 3 (kubisch) – Jblasco

+0

Es bedeutet "Macht", oder was in einigen Sprachen ist '^' (Python verwendet das für bitweises xor). –

4

In Python, wo Ihr eingerückter Block endet, ist genau dort, wo Ihr Block endet. So zum Beispiel ein wenig einfacher Code:

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

Nun, wenn Sie diesen Code ausführen (stellen Sie sicher, dass es von einem separaten Modul auszuführen, nicht von der interaktiven Eingabeaufforderung), wird es gedruckt ‚Jhon‘ fünf mal (beachte, dass Python die Objekte genau so behandelt, wie sie spezifiziert sind, es wird nicht einmal versuchen, die Variable myName in eine Zahl für die Multiplikation zu konvertieren) und das war's. Dies liegt daran, dass der Codeblock innerhalb des if-Blocks nur ausgeführt wird. Beachten Sie, dass, wenn das Schlüsselwort else irgendwo anders als nur unter die if-Anweisung gesetzt wurde oder wenn Sie die Verwendung von Tabulatoren und Leerzeichen gemischt hatten, Python einen Fehler auslösen würde.

nun in Ihrem Code,

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

See, wo der Einzug von for ‚s Codeblock beginnt? Eine Registerkarte, also alles, was nach der for-Anweisung eingerückt ist, wird innerhalb des For-Blocks liegen. Jetzt, offensichtlich, ist die if Aussage innerhalb der for Aussage, also ist es innerhalb der for Aussage. Nun gehen wir zur nächsten Zeile, classStart = 0 - dies ist eingerückt zwei Registerkarten aus der for-Anweisung und eine Registerkarte aus der if Anweisung; so ist es innerhalb der if Anweisung und innerhalb der für Block. In der nächsten Zeile haben Sie ein else Schlüsselwort eingerückt nur eine Registerkarte aus der for-Anweisung, aber nicht zwei Registerkarten, so dass es innerhalb der for Anweisung und nicht innerhalb der if Anweisung ist.

Betrachten geschweiften Klammern wie diese setzen, wenn Sie in einer anderen Sprache (n) vor codiert haben:

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

Die einfachen Unterschiede sind, dass Sie nicht Klammern setzen für Ihre Ausdrücke sind erforderlich, es sei denn, Sie wollen Um Vorrangregeln für Operatoren zu erzwingen, benötigen Sie diese geschweiften Klammern nicht, sondern gleichen Sie sie gleichmäßig ein.