Есть ли простой способ сделать математику с двумя операторами и тремя числами? - PullRequest
1 голос
/ 29 апреля 2020

Я делаю математическую игру и хочу задать вопрос с тремя числами и двумя операторами, например a + b + c. Сейчас я использую метод:

import operator
ops = { "+": operator.add, "-": operator.sub} # etc.
print(ops["+"](10,5))

Кто-нибудь знает простой способ иметь два оператора?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Вы можете определить словарь ops, который используется для сопоставления каждого оператора соответствующей математической операции, далее вы можете определить словарь ops_pr (приоритеты операций), который представляет приоритет каждой операции в контексте математические операции. И затем на основе информации из этих двух словарей мы можем определить результат данного выражения.

Использование:

import operator

def calc_exp(a, b, c, op1, op2):
    ops = {"/": lambda x, y: x / y, "*": operator.mul, "+": operator.add, "-": operator.sub}
    ops_pr = {"/": 4, "*": 3, "+": 2, "-": 1}

    if ops_pr[op1] >= ops_pr[op2]:
        return ops[op2](ops[op1](a, b), c)
    return ops[op1](a, ops[op2](b, c))

Вызов функции:

print(calc_exp(10, 20, 30, '+', '+')) # 10 + 20 + 30
print(calc_exp(10, 20, 30, '-', '-')) # 10 - 20 - 30
print(calc_exp(10, 20, 30, '+', '*')) # 10 + 20 * 30
print(calc_exp(10, 20, 30, '*', '/')) # 10 * 20 / 30

Это печатает:

60
-40
610
6.666666666666666
0 голосов
/ 29 апреля 2020
import operator
ops = { "+": operator.add, "-": operator.sub} # etc.
a = 10
b = 5
x = lambda a, b:print(ops["+"](a,b),ops["-"](a,b))
x(a,b)
# 15 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...