我是否可以在输入问题中仅接受某些字符,例如“ / *-+”

时间:2019-08-17 16:06:11

标签: python

就像num1仅会保留整数一样,我希望op仅保留符号“ / *-+”,如果该人输入了其他内容,我可以抛出“无效”在输入了这4个符号以外的内容后立即输入“运算符”消息。

try:
    num1 = float(input("enter a number"))
    op = input(("enter a operator"))
    num2 = float(input("enter another number"))
    if op == "+":
         print(num1 + num2)
    elif op == "-":
         print(num1 - num2)
    elif op == "*":
         print(num1 * num2)
    elif op == "/":
        print(num1 / num2)
except ValueError:
        print("invalid operator")
except:
        print("invalid")

3 个答案:

答案 0 :(得分:1)

您可以进行while循环,并在每次用户输入值时检查字符串。

while True:
    user_input = input('Operation: ')
    if len(user_input) == 1 and user_input in '+-*/':  break
    else: print('Invalid operation!')

答案 1 :(得分:0)

我采用了另一种方法,只允许用户在输入有效信息后继续操作。

import operator

def get_int_only(s: str):
    while True:
        in_str = input(s)

        try:
            out = int(in_str)
        except ValueError:
            continue
        else:
            return out


def get_str_in_list_only(s: str, ls: list):
    while True:
        in_str = input(s)

        if in_str in ls:
            return in_str

table = {"+": operator.add,
         "-": operator.sub,
         "*": operator.mul,
         "/": operator.truediv,
         "//": operator.floordiv,
         "^": operator.pow
         }

num1 = get_int_only("Number 1: ")
num2 = get_int_only("Number 2: ")
op = get_str_in_list_only("Operator: ", table.keys())

print(table.get(op)(num1, num2))

Operator module

Dictionary datatype

答案 2 :(得分:0)

您可以尝试使用所有运算符创建一个数组,例如:operators = ['+', '-', '*', '/'],然后遍历每个项目并进行比较。

operators = ['+', '-', '*', '/']

for operator in operators:
    if op == operator:
        # Do something...
    else:
        print("Invalid operator")
        break