我在使用输入时遇到问题,当我启动程序时,它会询问我输入,但是无论输入是什么,它只会再次询问输入,而忽略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")
答案 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