Неправильный ответ в 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 шт):

Автор решения: vanyavanya

У Вас в одном из elif'ов указано неверное логическое выражение. Правильно будет написать так:

elif q == ':' or q == '/':`

А так получается, что Вы сравниваете сначала строки, а потом выполняете логическую операцию с булевым значением слева и строкой справа.

Почему у Вас в примере сработало условие: любая не пустая строка при вычислении логического выражения конвертируется в булевое значение True. Это нормально, в большинстве языков программирования это присутствует. Следовательно, слева от or оказалось значение False, т.к. Вы ввели строку 'd' и сравниваете её со строкой ':', а справа - True, т.к. строка автоматически сковертировалась в булевое значение. А дальше — алгебра логики, нетрудно догадаться.

→ Ссылка
Автор решения: Zhihar

Я бы на вашем месте логически бы чуть упростил код:

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 ('Введите второе число > '))
→ Ссылка