Python中for循环与while循环的区别

0 投票
3 回答
2504 浏览
提问于 2025-04-18 12:03

我刚开始学习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循环?

非常感谢大家!!

3 个回答

0

如果我理解得没错,你的问题主要是关于一个内置函数 range

你可以在 这里详细了解这个函数,但简单来说,它会生成一组数字。

然后,代码 for i in range(...) 的意思就是:

range 生成的每一个数字 i,都执行下面的操作...

1

你希望在循环里增加计数器的值,也就是说,计数器的增加要放在循环的内部。现在的问题是,你的 rowcolumn 的增加是在循环外面的,这样它们在循环内部是不会变化的。这就导致了一个无限循环。

2

你的列增加语句(column += 1)放在了对应的while循环外面。

行增加语句也是一样。

现在,列的值会在循环结束后才增加。但其实你需要它在每次循环的时候就增加。

把这两个语句的缩进加深一点,你就可以了。

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

另外,你的最内层while循环也有问题。

neighbors是一个列表(或者类似的东西),而ctr是一个整数。你不能把这两者进行比较。而且,ctr并不是在遍历neighbors的变量,它只是一个计数器。你可以这样做。

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

撰写回答