Python:if-endif语句在哪里结束?

问题描述 投票:11回答:3

我有以下代码:

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语句在哪里结束。它在“ classStart + = 1”之后结束吗?

我感到很难理解在Python中for-next循环在哪里结束。

代码取自http://danieljlewis.org/files/2010/06/Jenks.pdf

谢谢。

python vb.net vb6 migration
3个回答
13
投票

是。 Python使用缩进标记块。 iffor都在此结束。


6
投票

在Python中,缩进块的结束位置,也就是块的结束位置。因此,例如,考虑一个更简单的代码:

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

现在,当您运行此代码(确保从单独的模块而不是交互式提示运行)时,它将打印'Jhon'五次(请注意,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的代码块的缩进从哪里开始?一个制表符,因此for语句后缩进一个制表符的所有内容都将在for块内。现在,很明显,if语句在for语句内部,因此它在for语句内部。现在,让我们转到下一行classStart = 0 -在for语句中缩进了两个标签,在if语句中缩进了一个标签;因此它位于for块中的if语句and中。下一行,您有一个else关键字,它仅使for语句中的一个选项卡缩进,但没有两个选项卡,因此它位于for语句中,而not却位于if语句中。

如果以前使用其他语言编写,请考虑放置像这样的花括号:

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

简单的区别是,您不需要为表达式加上括号,除非您想强制运算符优先级规则并且不需要那些花括号,而是将它们均等地缩进。


0
投票

for i在range(0,numClass)中:如果breaks [i] == 0:classStart = 0其他:classStart = dataList.index(breaks [i])classStart + = 1

如果结束

© www.soinside.com 2019 - 2024. All rights reserved.