如何拥有多个"子字符串"使用带有字符串的in运算符时

时间:2014-07-09 00:26:52

标签: python-3.x operators

我有一个希望简单的问题,我似乎无法找到答案。

在下面的代码中,我创建了一个输入验证功能,以确保用户输入四个有效“操作”中的任何一个(AKA单个字母'a','s','m'或'd'和别的,所以,我正在检查用户输入的“操作”是否不等于任何字符串'a','s','m'或'd'。如果满足条件,将打印一条错误消息,程序将重新启动,因为代码(主要是)显示。

print("Select an operation:")
print("Add  (a)"), print("Sub  (s)")
print("Mul  (m)"), print("Div  (d)")

operation = input()
if "a" not in operation: 
    print("Invalid operation.")
    continue

请告诉我一种方法,我可以检查操作是否符合四个字母中的任何一个。而且,为了清理,我并不是说我需要OR(逻辑函数)'a','s','m'和'd'。

非常感谢所有的通信和帮助,谢谢! :)

3 个答案:

答案 0 :(得分:2)

您可以使用带有值元组的not in运算符来测试:

if operation not in ('a', 's', 'm', 'd'):

如果True不等于元组operation中的任何值,则上述if语句的条件将评估为('a', 's', 'm', 'd')


另请注意,您错误地使用了continue:它只能在循环中使用。

如果您想循环直到用户输入正确的值,您可以使用以下内容:

while True:                                # Loop continuously
    operation = input("Enter a value: ")   # Get the input
    if operation in ('a', 's', 'm', 'd'):  # See if it can be found in the tuple
        break                              # If so, break the loop

答案 1 :(得分:0)

或许,或许

operation = input()
assert operation in  ('a', 's', 'm', 'd'), "Error you must use one of  'a', 's', 'm', or 'd'"

我想

基本上你想在 选项列表中检查你的操作

粗略如果您的选项列表很大,那么使用集合更合适......或者提供从操作到方法的映射的字典,即

operations = { 
    "a":add,
    "s":sub,
    "m":mul,
    "d":div
} #these are methods defined elsewhere
operation = input()
if operation in operations:
   operations[operation]() #call the method

答案 2 :(得分:0)

您可能需要以下内容:

allowed_operations = set(('a', 's', 'm', 'd'))
while True:
    operation = input() # raw_input() for Python earlier than 3
    if operation not in allowed_operations:
        print ('Error: Must choose one of a, s, m, d\nPlease try again')
    else:
        break