我试图模仿交通信号灯。但是,一旦变为红色,即使值为零,它也不会循环回绿色。我试过在接近结束时添加continue但是它没有循环回到原始状态,为什么?
while True:
if stop_light <10:
print ("Green")
stop_light += 1
elif stop_light <20:
print ("Yellow")
stop_light +=1
elif stop_light <30:
print ("Red")
stop_light += 1
elif stop_light == 31:
stop_light = 0
我试过在这里添加继续,但仍然没有循环回绿色,为什么?
答案 0 :(得分:3)
代码
elif stop_light < 30:
print ("Red")
stop_light += 1
只会在stop_light
等于29时运行,并且在29上添加1会将其变为30,因此它永远不会是31.要解决此问题,您需要将<
更改为<=
,表示小于或等于,或者更改为30到31。
答案 1 :(得分:1)
上面已经解释了原因,将数字的值与常量进行比较并不是一个好习惯,这可能会导致循环陷入意外结果 下面应该工作,试试这个:
while True:
if stop_light <10:
print ("Green")
stop_light += 1
elif stop_light <20:
print ("Yellow")
stop_light +=1
elif stop_light <30:
print ("Red")
stop_light += 1
elif stop_light >= 30:
stop_light = 0
答案 2 :(得分:0)
其他答案已正确突出显示您的问题:在if-checks中缺少30的值。为了完整起见,我将在此重复,作为您问题的直接答案:
关于整数,“小于”(<
)的反面不是“大于”(>
)。相反的是“大于或等于两”(>=
)。所以你的最后一个条件可能与之前的情况相反:
...
elif stop_light <30:
print ("Red")
stop_light += 1
elif stop_light >= 30:
stop_light = 0
然而,考虑到这个循环的简单性,你应该考虑学习技巧来辨别问题所在的 ,以及哪些变量(或其他)与你对程序的心理理解不符。这是从您的问题中学习的更大课程。
首先,在给出一个可能的答案之前,我会问,“你做了什么 - 你采取了什么步骤 - 调试程序,除了运行程序,看到结果不像你预期的那样?”我可能尝试过一件事:
在每次迭代时内省(参见)
stop_light
的值。也许是print("stop_light: ", stop_light)
学习编码同样是学习如何调试,因为它是问题的语义和逻辑。