Python:if-endif-statement在哪里结束?

时间:2013-10-17 14:57:05

标签: python vb.net vb6 migration

我有以下代码:

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-loops的位置有点困难。

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

谢谢。

3 个答案:

答案 0 :(得分:10)

是。 Python使用缩进来标记块。 iffor都在那里结束。

答案 1 :(得分:5)

在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语句内。在下一行,您有一个else关键字只缩进for语句中的一个标签但不包含两个标签,因此它位于for语句中,而不是 if声明。

如果您之前使用其他语言编码,请考虑使用这些花括号:

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

简单的区别在于,您不需要为表达式添加括号,除非您想强制运算符优先级规则而不需要那些花括号,而只需将它们平均缩进。

答案 2 :(得分:0)

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