2013-10-17 9 views
7

Ho il codice seguente:Python: dove finisce l'istruzione if-endif?

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 

vorrei convertire questo codice VB.NET.

Ma non sono sicuro di dove finisce la frase if-elseif. Si conclude dopo "classStart + = 1"?

Mi sembra un po 'difficile vedere dove finiscono anche i loop for-next-loop in Python.

Il codice è tratto dal http://danieljlewis.org/files/2010/06/Jenks.pdf

Grazie.

risposta

8

Sì. Python usa il rientro per contrassegnare i blocchi. Sia lo if sia lo for finiscono qui.

+0

Cool, grazie. Puoi anche dirmi cosa significa il doppio asterisco (**) in questa linea? sqDev2 = (classList [j] -classMean) ** 2 – tmighty

+0

significa "power of", equivalente a^in molte lingue. ** 2 (quadrato), ** 3 (cubico) – Jblasco

+0

Significa "potere" o ciò che in alcune lingue è '^' (Python lo utilizza per bit xor bit). –

4

In Python, dove finisce il blocco rientrato, è esattamente dove finirà il blocco. Così, per esempio, si consideri un po 'di codice più semplice:

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

Ora, quando si esegue questo codice (assicuratevi di eseguirlo da un modulo separato, non dal prompt interattivo), verrà stampata 'Jhon' cinque volte (si noti che Python tratterà gli oggetti esattamente come sono specificati, non si preoccuperà nemmeno di provare a convertire il valore della variabile myName in un numero per la moltiplicazione) e il gioco è fatto. Questo perché il blocco di codice all'interno del blocco if viene eseguito solo. Notare che se la parola chiave else è stata messa ovunque ma appena sotto l'istruzione if o se si è mescolato l'uso di tabulazioni e spazi, Python avrebbe generato un errore.

Ora, nel codice,

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

Sede, dove il trattino blocco di codice for s' inizia? Una scheda, quindi, ogni voce rientrata di una scheda dopo l'istruzione for si troverà all'interno del blocco per. Ora, ovviamente, l'istruzione if si trova all'interno dell'istruzione for, quindi è all'interno dell'istruzione for. Passiamo alla riga successiva, classStart = 0 - questo è rientrato di due schede dall'istruzione for e una scheda dall'istruzione if; quindi è all'interno della dichiarazione ife all'interno del blocco per. Riga successiva, una parola chiave else rientrata è una sola scheda dall'istruzione for ma non due, quindi è all'interno dell'istruzione for e non all'interno dell'istruzione if.

Valutare l'ipotesi di parentesi graffe come questi se si è codificato in un'altra lingua (s) prima:

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

Le semplici differenze sono che non sono tenuti a mettere tra parentesi per le espressioni, a meno che, vuoi per forzare la regola di precedenza dell'operatore e non hai bisogno di quelle parentesi graffe, invece, basta indentarle ugualmente.