如何使for循环在python中更易于理解?

Eli*_*ias 17 python loops

我目前正在向一些相当年轻的学生教授一些python编程。我希望他们学习的一件事是如何编写for循环。

到目前为止,我向学生展示的方式是这样的:

for i in range(1,11):
    print(i)
Run Code Online (Sandbox Code Playgroud)

这给出了一个i从1到10 的循环。

我的问题是,对于学生来说,range(1,11)当他们希望循环上升到10时,他们需要写11作为第二个参数,这对学生来说似乎很奇怪。学生们发现这令人困惑。

在C / C ++和相关语言中,这样的循环可以这样写:

for(int i = 1; i <= 10; i++)
    { /* do something */ }
Run Code Online (Sandbox Code Playgroud)

在我看来,表达循环的C ++方法更直观,因为在那种情况下,我可以显式编写1和10,这是我希望循环变量采用的第一个和最后一个值。

当在python中使用for循环时,我最终告诉学生,诸如“我们只想接受要在循环数达到10时编写11的代码,这有点烦人,但您只需要学习范围功能以这种方式起作用”。我对此不满意;我希望他们了解编程很有趣,而且恐怕这种事情会使它变得不那么有趣。

由于python通常被描述为强调可读性的语言,因此我怀疑有一种更好的方式来表达for循环,这种方式不会给我的学生造成混乱。

有没有更好和/或更少混淆的方法来用python语言表达这种for循环?

sou*_*ipe 17

提醒他们范围函数如此工作是有原因的。它的一个有用特性是循环将运行的次数等于范围的第二个参数减去第一个参数。

我认为人们确实对此感到迷恋,但事实是forPython中的循环与C截然不同。在C中,for循环基本上是while循环的包装。

这两个示例应该有助于说明循环在C和python中的工作方式之间的区别。

# for(int x=1; x <= 10; x++)
x = 1
while x <= 10:
    print(x)
    x += 1


i = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  # range(1, 11)
for x in i:
    print(i)
Run Code Online (Sandbox Code Playgroud)

但老实说,这里的真正问题是,所有循环和数组如果从零而不是零开始,则更易于理解和使用。请考虑将示例从零开始。

这样,如果要循环10次,请使用数字10。

   # for(int x=0; x < 10; x++)
x = 0
while x < 10:
    print(x)
    x += 1


i = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  # range(10)
for x in i:
    print(i)
Run Code Online (Sandbox Code Playgroud)

  • 我认为将循环与另一种编程语言进行比较可能不是教年轻学生的理想方法(如问题中所写)。 (2认同)

Gáb*_*ete 15

您可以向他们展示此代码,以便更好地理解:

start = 1
length = 10
for i in range(start,start+length):
    print(i)
Run Code Online (Sandbox Code Playgroud)

还有另一个类似的功能,称为slice


Sau*_*Rai 8

我相信有两种简单的方法可以回答这个问题。1)一种解释此答案的方法是使用数学符号半封闭间隔[a,b]。在此间隔中,包括一个端点(在此示例中为'a'),但不包括另一个端点('b')。因此,对于您的示例,

for i in range(1,11):
     print(i)
Run Code Online (Sandbox Code Playgroud)

(1,11)是半封闭间隔,其中a和b分别为1和11。

2)您也可以使用以下示例进行说明

    for i in range(1,11)  //in python 
        {do something}

    for(int i=1;i<11;i++)  //in C++
        {do something}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都从1迭代到10。这对我来说似乎更直观。


T B*_*gis 5

向他们展示两个C ++变体:

# using <= operator
for(int i = 1; i <= 10; i++)
    { /* do something */ }

# using < operator
for(int i = 1; i < 11; i++)
    { /* do something */ }
Run Code Online (Sandbox Code Playgroud)

并告诉他们python的range功能像第二个一样运行。