функция с операторами в качестве параметра - PullRequest
0 голосов
/ 26 февраля 2019

Я только начал писать код для удовольствия, и я пытаюсь создать калькулятор, который использует пользовательский ввод.2 номера и один оператор.Я действительно плохо знаком с кодированием и в настоящее время ограничен очень простым использованием операторов if и циклов while / for, и я только начал изучать функции.Я пытался поместить этот код в функцию некоторое время, но я не могу найти решение использовать строку «оператор» в качестве фактического оператора в функции.

должен быть способ сделатьвсе это короче.

if used_op == "+":
    print(">  " + str(number_1) + " + " + str(number_2) + " = " + str(number_1 + number_2) + "  <")
elif used_op == "-":
    print(">  " + str(number_1) + " - " + str(number_2) + " = " + str(number_1 - number_2) + "  <")
elif used_op == "*":
    print(">  " + str(number_1) + " * " + str(number_2) + " = " + str(number_1 * number_2) + "  <")
elif used_op == "/":
    print(">  " + str(number_1) + " / " + str(number_2) + " = " + str(number_1 / number_2) + "  <")
elif used_op == "%":
    print(">  " + str(number_1) + " % " + str(number_2) + " = " + str(number_1 % number_2) + "  <")
elif used_op == "**":
    print(">  " + str(number_1) + " ** " + str(number_2) + " = " + str(number_1 ** number_2) + "  <")
elif used_op == "//":
    print(">  " + str(number_1) + " // " + str(number_2) + " = " + str(number_1 // number_2) + "  <")

То, что я пробовал, выглядит примерно так:

def solve(op):
    print(">  " + str(number_1) + op + str(number_2) + " = " + str(
        number_1 + **op** + number_2) + "  <")

solve(used_op)

Я некоторое время пытался найти решение для этого в Интернете, но мне не повезлопока что.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Просто оцените ваше математическое выражение и Python сделает всю остальную работу за вас.

Это, конечно, можно сделать с помощью встроенного eval() function.

Вот несколько примеров, как вы можете использовать это:

>>> eval("1+1")
2

>>> A = 2
>>> eval("A * 3")
6

Функция, которую вы пытаетесь написать, может выглядеть примерно так

def solve(a, b, op):
    expression = str(a) + op + str(b)
    print("> " + expression + "=" + str(eval(expression)))

solve(1, 2, "+")   # > 1+2=3
solve(10, 10, "*") # > 10*10=100
solve(4, 2, "/")   # > 4/2=2.0
solve(5, 10, "-")  # > 5-10=-5
0 голосов
/ 26 февраля 2019

Вы можете использовать словарь и модуль operator, чтобы делать то, что вы хотите:

import operator

# this will act like a sort of case statement or switch
operations = {
    '>': operator.gt,
    '<': operator.lt,
    '=': operator.eq,
    '+': operator.add,
    '-': operator.sub,
    '/': operator.div,
    '*': operator.mul,
    '**': operator.pow,
    '//': operator.floordiv,
    ... # so on and so forth
}

def calculate(num1, num2, op):
    # operation is a function that is grabbed from the dictionary
    operation = operations.get(op)
    if not operation:
         raise KeyError("Operation %s not supported"%op)

    # Call the operation with your inputs
    num3 = operation(num1, num2)
    print('%3.2f %s %3.2f = %3.2f' % (num1, op, num2, num3))


calculate(1,2, '+')
# 1.00 + 2.00 = 3.00

...