У меня есть текст, "остаток 5, когда 45 делится на 8"

Я просто хочу назначить оператору разделения '/' программно к тексту "Разделите" и оценивайте 45/8 и получите результат (остаток 5). Таким образом, я проверяю, что текст правильный.

Я пробовал это ...

word= "45 divided by 8"
rep=word.replace('divided by','/')
print(rep)

Но я получаю 45/8, а не 5 как остаток

0
Ravi S Ranjan 30 Сен 2019 в 18:21

1 ответ

Лучший ответ

Поскольку речь идет о переводе, словарь - хорошая идея:

translations = {
    'divided by': '//',
    'multiplied by' : '*',
    'times' : '*',
    'seven': '7',
}

def evaluate(sentence):
    for k, v in translations.items():
        sentence = sentence.replace(k, v)
    result = eval(sentence)
    return result

#examples
sentences = [
    "45 divided by 8",
    "45 multiplied by 8",
    "4 times 2 divided by seven",
    "4 times 2 times seven",
]

for s in sentences:
    print(s, 'evaluates to ', evaluate(s))

# displays:
# 45 divided by 8 evaluates to  5
# 45 multiplied by 8 evaluates to  360
# 4 times 2 divided by seven evaluates to  1
# 4 times 2 times seven evaluates to  56

Обратите внимание, что люди часто рекомендуют ast.literal_eval вместо eval, см. E.g. Использование Eval () python () vs. ast.literal_eval ()?

0
Demi-Lune 30 Сен 2019 в 19:45