Неверное выполнение операции деление

akabeerka

Новичок
Пользователь
Сен 17, 2020
2
0
1
Доброго дня!
Прохожу обучение на stepik.org, а если быть точнее, то по заданию пишу простой калькулятор
Напишите простой калькулятор, который считывает с пользовательского ввода три строки: первое число, второе число и операцию, после чего применяет операцию к введённым числам ("первое число" "операция" "второе число") и выводит результат на экран.

Поддерживаемые операции: +, -, /, *, mod, pow, div, где
mod — это взятие остатка от деления,
pow — возведение в степень,
div — целочисленное деление.

Если выполняется деление и второе число равно 0, необходимо выводить строку "Деление на 0!".

Обратите внимание, что на вход программе приходят вещественные числа.
Screenshot at Sep 17 10-41-52.png
Проблема в том, что при операции деления выдает неверный результат.
Очевидно, что 5 / 10 = 0.5
Но у меня почему то выходит 5.0
Python:
a = float(input())
b = float(input())
c = input()
if c == '+':
    print(a + b)
elif c == '-':
    print(a - b)
elif c == '*':
    print(a * b)
elif c == 'mod' or '%':
    if b != 0:
        print(a % b)
    else:
        print('Деление на 0!')
elif c == 'pow' or '**':
    print(a ** b)
elif c == 'div' or '/':
    if b != 0:
        print(a / b)
    else:
        print('Деление на 0!')
Если же я убираю середину кода с операциями * % **, то операция '/' деления выполняется корректно
Python:
elif c == '-':
    print(a - b)
elif c == '*':
    print(a * b)
elif c == 'mod' or '%':
    if b != 0:
        print(a % b)
    else:
        print('Деление на 0!')
elif c == 'pow' or '**':
    print(a ** b)
Screenshot at Sep 17 10-43-38.png
 

Вложения

  • Screenshot at Sep 17 10-38-14.png
    Screenshot at Sep 17 10-38-14.png
    58,7 КБ · Просмотры: 0

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
elif c == 'mod' or '%':
(с == 'mod') or ('%')
Непустая строка это True. Это условие всегда выполняется, и стоит раньше, чем деление.
 
  • Мне нравится
Реакции: akabeerka

akabeerka

Новичок
Пользователь
Сен 17, 2020
2
0
1
elif c == 'mod' or '%':
(с == 'mod') or ('%')
Непустая строка это True. Это условие всегда выполняется, и стоит раньше, чем деление.
Правильно ли я понимаю, что корректно код должен выглядеть следующим образом:
Python:
elif c == 'mod' or c == '%':
    if b != 0:
        print(a % b)
    else:
        print('Деление на 0!')
то есть, необходимо было каждый раз переменной с присваивать новую операцию через ==
Теперь код работает корректно. Спасибо за подсказку.

Python:
# put your python code here
a = float(input())
b = float(input())
c = input()
if c == '+':
    print(a + b)
elif c == '-':
    print(a - b)
elif c == '*':
    print(a * b)
elif c == '/':
    if b != 0:
        print(a / b)
    else:
        print('Деление на 0!')
elif c == 'pow' or c == '**':
    print(a ** b)
elif c == 'mod' or c == '%':
    if b != 0:
        print(a % b)
    else:
        print('Деление на 0!')
elif c == 'div' or c == '//':
    if b != 0:
        print(a // b)
    else:
        print('Деление на 0!')
 

Форум IT Специалистов