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

2024-05-15 01:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

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

谢谢你。


Tags: 代码inforindexlenifrangebreaks
2条回答

是的。Python使用缩进来标记块。这里的iffor都结束了。

在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
        }
}

简单的区别在于,不需要为表达式插入括号,除非您希望强制使用运算符优先级规则,并且不需要这些大括号,而是将它们平均缩进。

相关问题 更多 >

    热门问题