Если оператор не работает при сравнении двух целых - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь создать калькулятор типа Python, который позволяет вводить любое количество цифр, и проверяет, является ли каждое второе «слово» оператором, но сравнивая длину суммы и индекса «Слово», которое он в настоящее время проверяет, чтобы увидеть, должен ли он печатать выходные данные, но это не так, даже если 2 целых числа совпадают.

operators = ["+", "-", "/", "*"]

def doSum(sum):
    split = sum.split()
    target = len(split)
    if split[1] in operators and "=" not in "".join(split):
        for WORD in split:
            if split.index(WORD) % 2 != 0:
                if WORD in operators:
                    if int(split.index(WORD)) == int(target):
                        print(eval("".join(split)))
                    else:
                        print(target)
                        print(len(split))
                        print("-=-=-=-=-=-=-=-=-=-=-=-")

doSum("1 + 2")
doSum("3 + 3")
doSum("8 - 4")
doSum("1 + 3 + 3 - 1")

Проблемные строки - строки 10 - 15. Я ожидал, что результат будет: 3 6 4 6 Но я получил:

3
3
-=-=-=-=-=-=-=-=-=-=-=-
3
3
-=-=-=-=-=-=-=-=-=-=-=-
3
3
-=-=-=-=-=-=-=-=-=-=-=-
7
7
-=-=-=-=-=-=-=-=-=-=-=-
7
7 
-=-=-=-=-=-=-=-=-=-=-=-
7
7
-=-=-=-=-=-=-=-=-=-=-=-

из "блока else", который я использую для отладки

Edit:

Спасибо @chepner за предоставленный ответ в комментарии:

"Ваше условие if никогда не выполняется, потому что индексы split находятся в диапазоне от 0 до len (split) - 1, а target == len (split)."

1 Ответ

0 голосов
/ 29 мая 2019

Попробуйте,

import ast

>>> def doSum(sum1):
    print(ast.literal_eval(sum1))
    print('-=-=-=-=-=-=-=-=-=-=-=-')


>>> doSum("1 + 2")
3
-=-=-=-=-=-=-=-=-=-=-=-
>>> doSum("3 + 3")
6
-=-=-=-=-=-=-=-=-=-=-=-
>>> doSum("8 - 4")
4
-=-=-=-=-=-=-=-=-=-=-=-
>>> doSum("1 + 3 + 3 - 1")
6
-=-=-=-=-=-=-=-=-=-=-=-
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...