Форум сайта python.su
Задача не тривиальная, но сломал всю голову. При получении данных из команды input мы получаем тип str. Как сделать так чтобы введеной переменной а или b присвоился тип введенного числа int или float или если буквы то тип str. Далее проходила проверка этих переменных на число. и далее работает цикл. При данном написании он циклится на первом проходе потому что input дает тип данных str.
s = int(input('stop cherez ')) #число проходов chet = 1 while chet <= s: a = input('a = ') b = input('b = ') z = input('deystvie: ') if type(a) != int or type(a) != float or type(b) != int or type(b) != float : #проверка на число print ('nado chislo') chet += 1 elif b == 0 and z == '/' : #Проверка деления на ноль print('delenie na 0') chet += 1 elif z not in ('+', '-', '/', '*') : #Проверка на знак print('neverniy znak') chet += 1 elif z == '+' : c = a + b print(c) chet += 1 elif z == '-' : c = a - b print(c) chet += 1 elif z == '/' : c = a / b print(c) chet += 1 elif z == '*' : c = a * b print (c) chet += 1 else: print('vse hvatit')
Отредактировано Umka (Фев. 15, 2022 17:27:34)
Офлайн
UmkaУ вводимых данных нет типа. Это всегда строка.
Как сделать так чтобы введеной переменной а или b присвоился тип введенного числа int или float
>>> 2 -- это целое или плавающее? >>> 2 2 -- А это что? это не буквы но и не числа. >>> 2м -- А это что? Может это 2 метра?
a=input() try: a=int(a) except: try: a=float(a) except: pass
try: val = float(a) except: val = saved_var[a] # если переменная не запомнена то это ошибка и о ней надо сообщить уловив исключение # а тут на выходе val всегда плавающее число. И проверять тут дальше нечего
Отредактировано doza_and (Фев. 15, 2022 19:15:03)
Офлайн
from decimal import Decimal # actions = { '+': lambda x, y: x + y, '-': lambda x, y: x - y } # def num_input(text_before=''): while True: print(text_before, end='') try: num = Decimal(input()) return num except: print('неверный ввод') continue # def sign_input(text_before=''): print(text_before, end='') while (action := input()) and action not in ('+', '-'): print('неверный ввод') return action # if __name__ == '__main__': while True: a = num_input('a = ') b = num_input('b = ') sign = sign_input('знак: ') result = actions[sign](a, b) print(a, sign, b, '=', result)
Офлайн
Umka
При получении данных из команды input мы получаем тип str. Как сделать так чтобы введеной переменной а или b присвоился тип введенного числа int или float или если буквы то тип str.
>>> import re >>> >>> def input_value(): ... inumpat = r'^\d+$' ... fnumpat = r'^\d+\.\d+$' ... varpat = r'^[a-z]+$' ... out = None ... s = input('Enter value: ') ... if re.search(inumpat, s) is not None: ... out = ('int', int(s)) ... elif re.search(fnumpat, s) is not None: ... out = ('float', float(s)) ... elif re.search(varpat, s) is not None: ... out = ('name', s) ... else: ... raise ValueError('Wrong value: ' + s) ... return out ... >>> def f(): ... typ, val = input_value() ... print(typ, val) ... typ, val = input_value() ... print(typ, val) ... typ, val = input_value() ... print(typ, val) ... typ, val = input_value() ... print(typ, val) ... >>> f() Enter value: 1 int 1 Enter value: 123 int 123 Enter value: 123.456 float 123.456 Enter value: abc name abc >>> >>> f() Enter value: + Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in f File "<stdin>", line 14, in input_value ValueError: Wrong value: + >>>
Отредактировано py.user.next (Фев. 16, 2022 01:19:59)
Офлайн