web-dev-qa-db-fra.com

Python: où se termine l'instruction if-endif?

J'ai le code suivant:

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

Je voudrais convertir ce code en VB.NET.

Mais je ne sais pas où se termine l'instruction if-elseif. Se termine-t-il après "classStart + = 1"?

Je pense qu'il est un peu difficile de voir où se terminent également les boucles for-next en Python.

Le code est tiré de http://danieljlewis.org/files/2010/06/Jenks.pdf

Je vous remercie.

11
tmighty

Oui. Python utilise l'indentation pour marquer les blocs. Le if et le for s'arrêtent là.

13
Daniel Roseman

En Python, où se termine votre bloc en retrait, c'est exactement là où se terminera votre bloc. Par exemple, considérons un code un peu plus simple:

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

Maintenant, lorsque vous exécutez ce code (assurez-vous de l'exécuter à partir d'un module distinct, pas à partir de l'invite interactive), il affichera 'Jhon' cinq fois (notez que Python traitera les objets exactement comme ils sont spécifiés, cela ne prendra même pas la peine d'essayer de convertir la valeur de la variable myName en un nombre à multiplier) et c'est tout. C'est parce que le bloc de code à l'intérieur du bloc if n'est exécuté que. Notez que si le mot clé else a été placé n'importe où mais juste en dessous de l'instruction if ou si vous avez mélangé l'utilisation des tabulations et des espaces, Python déclencherait une erreur.

Maintenant, dans votre code,

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

Vous voyez, où commence le retrait du bloc de code de for? Un onglet, donc, tout en retrait d'un onglet après l'instruction for, sera à l'intérieur du bloc for. Maintenant, évidemment, l'instruction if est à l'intérieur de l'instruction for, donc elle est à l'intérieur de l'instruction for. Passons maintenant à la ligne suivante, classStart = 0 - il s'agit de deux onglets en retrait de l'instruction for et d'un onglet de l'instruction if; il est donc à l'intérieur de l'instruction ifet à l'intérieur du bloc for. À la ligne suivante, vous avez un mot clé else en retrait d'un seul onglet de l'instruction for mais pas de deux onglets, il se trouve donc à l'intérieur de l'instruction for et pas à l'intérieur de l'instruction if.

Pensez à mettre des accolades comme celles-ci si vous avez déjà codé dans une autre langue:

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

Les différences simples sont que vous n'êtes pas obligé de mettre des parenthèses pour vos expressions, sauf si vous voulez forcer la règle de priorité des opérateurs et que vous n'avez pas besoin de ces accolades, au lieu de cela, indiquez-les simplement de la même manière.

6
Akshat Tripathi