Как использовать некоторый оператор, который был очищен от строки - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь сложить, вычесть или умножить два целых числа на основе знака между целыми числами, как в 5 + 6. Когда я явно использую + в скрипте, это работает. Однако я sh хочу проанализировать этот оператор из заданной строки, чтобы использовать как int(numbers[0]) + operator + int(numbers[1]) или что-то подобное, что работает.

Я пробовал с:

import re

str_number = "5 + 6"

numbers = re.findall('[0-9]+', str_number)
operator = re.findall('([^\s\d]+?)',str_number)[0]
result = int(numbers[0]) + operator + int(numbers[1])
print(result)

Когда я запускаю вышеупомянутое, я получаю ошибку ниже:

result = int(numbers[0]) + operator + int(numbers[1])
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Ответы [ 3 ]

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

Вы можете использовать встроенный модуль operator и определить словарь mappings, который отображает данный оператор в его соответствующую операцию. Использование:

import operator

mappings = {'+': operator.add, '-': operator.sub, '*': operator.mul, '/': operator.floordiv}

equation = "5 + 6"
n1, op, n2 = equation.split()
result = mappings[op](int(n1), int(n2))

print(result)

Печать:

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

Если я прав, это невозможно, потому что переменная-оператор - это str, а числовая переменная - это int, и вы не можете ничего с этим сделать без преобразования типов. Но вы могли бы sh реализовать вашу идею, используя если еще заявление.

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

попробуйте, что работает, преобразуйте уравнение в строку и используйте функцию eval ()

result = numbers[0] + operator + numbers[1]
print(eval(result))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...