Неправильный ответ в python
Я пытался написать калькулятор на python, всё без багов и вычисляется правильно. Сначала вы должны ввести знак (+, -, :, *) а потом 2 числа . Если ты пишешь не верный знак то по идее должна выводиться фраза :"Не верное действие" но мне выводятся какие - то случайные числа.
print ('Калькулятор ')
q = input ('Введите какую операцию надо сделать (+, -, *, :, / ) : ')
one = float (input ('Введите первое число > '))
two = float (input ('Введите второе число > '))
if q == '+':
answer = one + two
print ('Ответ : ' + str(answer))
print (' ')
input ('Операция завершена.')
elif q == '-':
answer = one - two
print ('Ответ : ' + str(answer))
print (' ')
input ('Операция завершена.')
elif q == '*':
answer = one * two
print ('Ответ : ' + str(answer))
print (' ')
input ('Операция завершена.')
elif q == ':' or '/':
answer = one / two
print ('Ответ : ' + str(answer))
print (' ')
input ('Операция завершена.')
else:
print('Неверное действие.')
Не понимаю почему так происходит.
Выводится
Ответы (3 шт):
У Вас в одном из elif'ов указано неверное логическое выражение. Правильно будет написать так:
elif q == ':' or q == '/':`
А так получается, что Вы сравниваете сначала строки, а потом выполняете логическую операцию с булевым значением слева и строкой справа.
Почему у Вас в примере сработало условие: любая не пустая строка при вычислении логического выражения конвертируется в булевое значение True. Это нормально, в большинстве языков программирования это присутствует. Следовательно, слева от or оказалось значение False, т.к. Вы ввели строку 'd' и сравниваете её со строкой ':', а справа - True, т.к. строка автоматически сковертировалась в булевое значение. А дальше — алгебра логики, нетрудно догадаться.
Я бы на вашем месте логически бы чуть упростил код:
print('Калькулятор ')
q = input('Введите какую операцию надо сделать (+, -, *, :, / ): ')
one = float(input('Введите первое число > '))
two = float(input('Введите второе число > '))
actions = {
'+': lambda a, b: a + b,
'-': lambda a, b: a - b,
'*': lambda a, b: a * b,
':': lambda a, b: a / b,
'/': lambda a, b: a / b,
}
if q not in actions:
print('Неверное действие.')
else:
print ('Ответ:', actions[q](one, two))
print (' ')
input ('Операция завершена.')
такой подход позволяет быстро наращивать функционал (если бы стояла такая цель) и довольно наглядный без кучи лишних операций
print ('Калькулятор ')
def give_me():
q = input ('Введите какую операцию надо сделать (+, -, *, :, / ) : ')
return q
q = give_me()
while q not in ['+', '-', '*', '/']:
print("Неа пиши (+, -, *, :, / )")
q = give_me()
one = float (input ('Введите первое число > '))
two = float (input ('Введите второе число > '))
