Как ограничить вводимые данные в input?
Есть очень простой калькулятор написанный на Python
num1 = input("Enter a number: ")
num2 = input("Enter another number: ")
action = input("Please enter your operand: ")
reusultPlus = float(num1) + float(num2)
resultMinus = float(num1) - float(num2)
resultMultiply = float(num1) * float(num2)
resultDivide = float(num1) / float(num2)
def calculator(action, reusultPlus, resultMinus, resultMultiply, resultDivide):
if action == "+":
print(reusultPlus)
elif action == "-":
print(resultMinus)
elif action == "*":
print(resultMultiply)
elif action == "/":
print(resultDivide)
calculator(action, reusultPlus, resultMinus, resultMultiply, resultDivide)
Есть следующий вопрос:
- Как я могу ограничить набор символов которые я могу вводить в input? (допустим я хочу что бы юзеры могли вводить только цифры в инпут num1 / num2), а так же например ограничить ввод операндов в action инпут (разрешить ввод только + - / *)
Ответы (4 шт):
Автор решения: Nezerix
→ Ссылка
Для конкретно проверки цифр try-except для вашего кода:
def calc():
num1 = input("Enter a number: ")
num2 = input("Enter another number: ")
action = input("Please enter your operand: ")
try:
reusultPlus = float(num1) + float(num2)
resultMinus = float(num1) - float(num2)
resultMultiply = float(num1) * float(num2)
resultDivide = float(num1) / float(num2)
except ValueError:
print("Вводите только цифры!!!")
calc()
exit()
def calculator(action, reusultPlus, resultMinus,
resultMultiply, resultDivide):
if action == "+":
print(reusultPlus)
elif action == "-":
print(resultMinus)
elif action == "*":
print(resultMultiply)
elif action == "/":
print(resultDivide)
calculator(action, reusultPlus, resultMinus,
resultMultiply, resultDivide)
Для проверки операндов можно просто через цикл сравнивать его со списком операндов.
Автор решения: icYFTL
→ Ссылка
num1 = input("Enter a number: ")
num2 = input("Enter another number: ")
action = input("Please enter your operand: ")
try:
reusultPlus = float(num1) + float(num2)
resultMinus = float(num1) - float(num2)
resultMultiply = float(num1) * float(num2)
resultDivide = float(num1) / float(num2)
# action check
if action not in ["+", "-", "*", "/"]:
raise ValueError
except ValueError:
print('Bad data passed.')
exit()
def calculator(action, reusultPlus, resultMinus, resultMultiply, resultDivide):
if action == "+":
print(reusultPlus)
elif action == "-":
print(resultMinus)
elif action == "*":
print(resultMultiply)
elif action == "/":
print(resultDivide)
calculator(action, reusultPlus, resultMinus, resultMultiply, resultDivide)
Да, можно и даже нужно использовать операторы try-except. Только скорее вот так.
Автор решения: Namerek
→ Ссылка
a = ''
while not a.isnumeric():
if a != '':
print(f'{a} is not a number')
a = input("Enter a number: ")
Автор решения: Amunrah
→ Ссылка
С регулярками попроще:
import re
def func(exp, mes, arg=''):
while not re.match(exp, arg):
arg = input(mes)
return arg
num1 = func(r'^\d+$', 'Enter first number: ')
act = func(r'^[-+*/]$', 'Enter operator: ')
num2 = func(r'^\d+$', 'Enter second number: ')
result = eval(num1 + act + num2)
print(f'{num1} {act} {num2} = {result}')
Результат:
in: Enter first number: 10
in: Enter operator: /
in: Enter second number: 2
out: 10 / 2 = 5.0