交通灯,而循环

时间:2017-10-26 02:47:48

标签: python-3.x

我试图模仿交通信号灯。但是,一旦变为红色,即使值为零,它也不会循环回绿色。我试过在接近结束时添加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

我试过在这里添加继续,但仍然没有循环回绿色,为什么?

3 个答案:

答案 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)

学习编码同样是学习如何调试,因为它是问题的语义和逻辑。