14

我有以下代码:

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

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

谢谢你。

4

4 回答 4

15

是的。Python 使用缩进来标记块。两者都在if那里for

于 2013-10-17T14:58:47.440 回答
9

在 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;所以它在if语句内部for 块内部。下一行,你有一个else关键字从语句中缩进一个标签for而不是两个标签,所以它在for语句内部,而不是if语句内部。

如果您以前用另一种语言编写过代码,请考虑使用这样的花括号:

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

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

于 2013-10-17T15:32:21.470 回答
0

没错。在 Python 中,缩进分隔您的条件块,这与 Matlab 不同,在 Matlab 中,您必须插入一个“结束”来标记块的结束。不过两种方式我都喜欢!

于 2021-09-26T09:10:28.060 回答
-1
for i in range(0,numClass):
    if breaks[i] == 0:
       classStart = 0
    else:
       classStart = dataList.index(breaks[i])
       classStart += 1
#   end if
于 2020-04-11T18:59:52.950 回答