【问题标题】:For Loop vs While Loop differences PYTHONFor 循环与 While 循环的区别 PYTHON
【发布时间】:2014-07-03 21:08:00
【问题描述】:

我是 Python 的初学者,我的教授在解释循环之间的差异方面做得很差。我想问这个社区 For 循环和 While 循环之间的区别。我查看了各种资源,但令我感到困惑的是 for 循环如何没有计数器将它们带回到开头,就像 while 循环一样: 我在 for() 循环中编写了以下代码,但我的目标是将其更改为 while 循环。代码不是重要的是如何将此代码更改为 While() 循环。

for r_ow in range(Height_box):
    for c_col in range(Width_box):
        gridpoint = box * row + column
        if gridpoint in gridList:
            box[r_ow][c_col] = "Inside Box"
        else:
            outsideBox = (CurrentBox(boxWidth,Boxedge))
            ctr = 0
            for Box_edges in Box:
                if eval(Box(boxWidth,boxHeight,box_edges,box_point)):
                    if box_edge in gridList:
                        ctr += 1
            Bow[r_ow][c_col] = str(int(box[r_ow][c_col]) + ctr)

到目前为止,我已经到了这样的地步,我认为这就是它应该看起来的样子,但现在我陷入了 CMD 无限循环。

row = 0
while r_ow < boxHeight:
    column = 0
    while c_col < boxWidth:
        gridpoint = box * row + column
        if gridpoint in gridList:
            box[r_ow][c_ol] = "Inside Box"
        else:
            outsideBox = (CurrentBox(boxWidth,Boxedge))
            ctr = 0
            while ctr < Boxes: 
                if eval(Box(boxWidth,boxHeight,box_edges,box_point)):
                    if box_edge in gridList:
                    ctr += 1
        Bow[r_ow][c_col] = str(int(box[r_ow][c_col]) + ctr)
    column += 1
row += 1
return box  

任何人都可以就如何将第一个代码格式化为 while loops() 提供一些建议吗?

非常感谢!!

【问题讨论】:

  • 您的缩进错误:column += 1 必须在内部 while 循环内,row += 1 必须在外部 while 循环内。由于不正确的缩进,column 永远不会递增并且内部的while 循环。
  • 这不是对您的代码的修复,而是对标题/第一段中几乎与语言无关的问题的回答。 Python 中的for 循环实际上是for...each 循环。它读取“对于 Y 中的每个 X”,并允许您访问 X 以读取或更改它。 while 循环读取“while X is True”并且本质上是无限的:它仅在状态以预定方式发生变化时停止执行。

标签: python python-2.7 if-statement for-loop while-loop


【解决方案1】:

您的列增量语句(列 += 1)在相应的 while 循环之外。

对于行增量语句也是如此。

现在,列将在循环完成后递增。但是,您需要在循环的每次迭代后递增它。

为这两个语句添加一个意图级别,您就可以开始了。

        Box[r_ow][c_colu] = str(int(box[r_ow][c_col]) + ctr)
        column += 1
    row += 1
return board    

你最里面的while循环也有问题。 邻居是一个列表(或类似的东西),而 ctr 是一个 int。你无法将两者进行比较。此外, ctr 不是通过邻居的变量迭代。是一个柜台。做这样的事情。

i = 0
ctr = 0
while i < len(box): 
    if eval(Box(boxWidth,boxHeight,box_edges,box_point)):
       if box_edge in gridList:
            ctr += 1
    i+=1

【讨论】:

  • 你们太棒了!我终于走出了无限循环!!
【解决方案2】:

您希望您的 while 循环增量位于循环内。它需要被标记到循环的主体中。问题是您的 rowcolumn 增量发生在循环之外,因此它们在正文中不会改变。这会造成无限循环。

【讨论】:

    【解决方案3】:

    如果我理解正确,那么您的问题本质上是关于内置函数range

    您可以阅读有关此函数here 的所有信息,但简而言之,它会生成一个数值数组。

    那么,for i in range(...) 这行基本上意味着:

    对于range生成的数组中的每个元素i,做...

    【讨论】:

      猜你喜欢
      • 2011-02-11
      • 1970-01-01
      • 2021-05-12
      • 2012-09-19
      • 2014-03-23
      • 2011-04-01
      • 2011-05-11
      • 2015-09-18
      • 2022-12-17
      相关资源
      最近更新 更多