Питон: Как легко сделать определенные строковые символы единственно возможным вводом

#python #string

Вопрос:

Я новичок в кодировании, и я все еще делаю свой «первый» калькулятор, и мне было интересно, как сделать всего 5 символов («-» » » «/» «x» «^») в единственно возможный ввод, на который пользователь может ответить, или это приведет к сообщению «Неверно», извините за мои ограниченные знания об этом, это также мой первый пост здесь, заранее спасибо! Это то, что я делал до сих пор —

 try:
    number_1 = float(input("Insert number 1 here: "))
    sign = str(input("  - / x ^: "))
    number_2 = float(input("Insert number 2 here: "))
except ValueError:
    print("Invalid")
    exit()
if sign != "-" " " "/" "x" "^":
    print("Invalid")
    exit()
elif sign == "-":
    print(number_1 - number_2)
elif sign == " ":
    print(number_2   number_1)
elif sign == "/":
    if number_2 == 0:
        print("Invalid")
        exit()
    print(number_1 / number_2)
elif sign == "x":
    print(number_1 * number_2)
elif sign == "^":
    print(number_1 ** number_2)
else:
    print("Invalid")
 

Ответ №1:

Вы можете использовать всю мощь функций! Создайте функцию, которая неоднократно запрашивает ввод данных пользователя, пока он не выдаст вам что-то действительное!

 def ask_float(title):
    while True:
        try: 
            return float(input(title))
        except ValueError:
            print("Invalid choice. Try again!")

def ask_sign():
    while True:
        sign = input("  - / x ^: ").strip()
        if sign in (" ", "-", "/", "x", "^"):
            return sign
        print("Invalid choice. Try again!")
 

Теперь в своем коде вы можете сделать:

 number_1 = ask_number("Insert number 1 here: ")
sign = ask_sign()
number_2 = ask_number("Insert number 2 here: ")
 

Комментарии:

1. Разве ты не должен сейчас спать? Хороший отдых важен 😉 1, чтобы заставить вас идти :p

2. @mozway LMAO. Справедливо. Я ухожу :П

3. Боже, ты просто свел меня с ума, я знал о функциях, но не знал, когда их использовать, но теперь я получил хорошее представление об этом, спасибо