为什么我的Python代码会一直返回“无效模式”。适当的输入?

时间:2017-05-13 19:52:39

标签: python

所以我正在制作一个简单的计时器程序,以便在Python上做得更好,因为我之前从未真正尝试过。由于我对语言的了解有限,我觉得自己没有资格自己诊断这个问题。我尝试将双引号更改为我的“if mode ==”语句周围的单引号,但这并没有改变任何内容。我一直收到“无效模式。”,这是我的错误消息,当它没有启动或关闭时。

这是我的代码:

import time

seconds = 0
mode = "down"

def main():
    print("Timer v1.0 by Alexis Knox")
    time.sleep(1)
    seconds = int(input("Seconds to count: "))
    mode = str(input("Timer mode [up/down]: "))

    if mode != 'up':
        print("Invalid mode.")
        exit(0)
    if mode != 'down':
        print("Invalid mode.")
        exit(0)

    if seconds < 1:
        print("Invalid time.")
        exit(0)

    if mode == 'up':
        for x in range(seconds):
            x += 1
            print(str(x))
            time.sleep(1)

    if mode == 'down':
        y = seconds
        for y in range(seconds):
            y -= 1
            print(str(y))
            time.sleep(1)



# Ensure that we execute main
if __name__ == "__main__":
    main()

2 个答案:

答案 0 :(得分:1)

如果你看看我在你的代码中做了什么,这应该解决问题

if seconds < 1:
    print("Invalid time.")
    exit(0)

elif mode == 'up':
    for x in range(seconds):
        x += 1
        print(str(x))
        time.sleep(1)

elif mode == 'down':
    y = seconds
    for y in range(seconds):
        y -= 1
        print(str(y))
        time.sleep(1)
else:
    print("Invalid mode.")
    exit(0)

如果您像以前一样运行连续的if语句,如果它们彼此相关,则最好使用elif语句,如我的代码所示。 else也更高效,因为这将完成前一代码的第一部分所做的事情,除非它首先运行if和elif测试。否则将基本上捕获elif中未说明的任何内容以及测试。你的输出怎么可能不是你想要的,但那不是问题

答案 1 :(得分:0)

如果输入“up”,则第二个if将为true,因为模式不是“down”。如果输入“down”,则第一个if将为真,因为模式不是“up”。其他任何东西,第一个if将会消失,因为其他任何东西都不会“向上”。即在任何情况下,前两个中的一个将在你到达实际处理事物的代码之前就会消失。