输入未触发if语句

时间:2020-07-03 16:43:19

标签: python input

我在使用输入时遇到问题,当我启动程序时,它会询问我输入,但是无论输入是什么,它只会再次询问输入,而忽略if语句。我希望我的输入触发功能或要求下一个输入然后触发功能。

while True:
    f = input("Choose function (BasePosition; HalfUp; Forward; TurnLeft; TurnRight):")
    if f == "baseposition" or "BasePosition":
        BasePosition()
    elif f == "halfup" or "HalfUp":
        t = int(input("Choose time:"))
        HalfUp(t)
    elif f == "forward" or "Forward":
        t = int(input("Choose time:"))
        Forward(t)
    elif f == "turnleft" or "TurnLeft":
        t = int(input("Choose time:"))
        TurnLeft(t)
    elif f == "turnright" or "TurnRight":
        t = int(input("Choose time:"))
        TurnRight(t)
    else:
        print("I don't think so")

2 个答案:

答案 0 :(得分:1)

Python分别评估if条件的两端,并且非空字符串为Truthy,即。他们评估为True。因此,您的第一个条件始终评估为True。例如

if "randomstring":
    # This will always be True

if 5==6 or 'randomstring':
    # Also True

因此,请更改您的if条件。

while True:
    f = input("Choose function (BasePosition; HalfUp; Forward; TurnLeft; TurnRight):")
    if f == "baseposition" or f=="BasePosition":
        BasePosition()
    elif f == "halfup" or f=="HalfUp":
        t = int(input("Choose time:"))
        HalfUp(t)
    elif f == "forward" or f=="Forward":
        t = int(input("Choose time:"))
        Forward(t)
    elif f == "turnleft" or f=="TurnLeft":
        t = int(input("Choose time:"))
        TurnLeft(t)
    elif f == "turnright" or f=="TurnRight":
        t = int(input("Choose time:"))
        TurnRight(t)
    else:
        print("I don't think so")

也只是为了好玩,我想看看我是否可以清理您的代码,使其更加优雅。这样,您就不需要一百万条if语句,并且它更易于扩展。

function_map = {
    'baseposition': BasePosition,
    'halfup': HalfUp,
    'forward': Forward,
    'turnleft': TurnLeft,
    'turnright': TurnRight
}


while True:
    f = input("Choose function (BasePosition; HalfUp; Forward; TurnLeft; TurnRight):").lower()

    if hasattr(function_map, f):
        if f == baseposition:
            function_map[f]()
        else:
            try:
                t = int(input("Choose time:"))
                function_map[f](t)
            except ValueError:
                print("Value must be numeric")
    else:
        print("I don't think so")

答案 1 :(得分:-1)

使用break语句退出循环

f = input("Choose function (BasePosition; HalfUp; Forward; TurnLeft; 
     TurnRight):")
if f.lower() == "baseposition":  ### this was the problem
    BasePosition()
elif f == "halfup" or "HalfUp":
    t = int(input("Choose time:"))
    HalfUp(t)
    break

elif f == "forward" or "Forward":
    t = int(input("Choose time:"))
    Forward(t)
    break
elif f == "turnleft" or "TurnLeft":
    t = int(input("Choose time:"))
    TurnLeft(t)
    break
elif f == "turnright" or "TurnRight":
    t = int(input("Choose time:"))
    TurnRight(t)
    break
else:
    print("I don't think so")
    break