если в вашем коде заменить строкуКрч сделал калькулятор,
код писал вроде правильно (если не считать типичных синтаксических ошибок), но на 81 строкеList.insert(List[ScanIndex],ListPart)
выдает ошибкуTypeError: 'str' object cannot be interpreted as an integer
Программа:
почему так много правил...Python:List = ["null"] Example = ( 10 + ( 7 * ( 2 * 2 ) - ( 6 / 3 ) ) ) / ( 18 / 6 ) =#input("Пример:") ListPart = " " ScanIndex = 0 while (Example[ScanIndex] != "=") : ListPart = " " while (Example[ScanIndex] != " ") : ListPart += Example[ScanIndex] print(ListPart) ScanIndex += 1 print(ScanIndex) List.append(ListPart) if (Example[ScanIndex] == " ") : ScanIndex += 1 print (List) List.remove("null") List.append("=") print (List) ScanIndex = 0 Brackets = ["100"] while (List[ScanIndex] != "=") : if (List[ScanIndex] == " (") : Brackets.append(ScanIndex) print (Brackets) ScanIndex += 1 Brackets.remove("100") Brackets.reverse() BarcketsRemove = len(Brackets) print (BarcketsRemove) Sum = False while (len(Brackets) < 0) : ScanIndex = Brackets[0] print (len(Barckets)) while True : print (Sum) while (List[ScanIndex] != " )") : if (List[ScanIndex] == " *" or " /" or " +" or " -") : if Sum == False : if (List[ScanIndex] == " *") : ListPart = str(float(List[ScanIndex-1]) * float(List[ScanIndex+1])) if (List[ScanIndex] == " /") : ListPart = str(float(List[ScanIndex-1]) / float(List[ScanIndex+1])) else : if (List[ScanIndex] == " +") : ListPart = str(float(List[ScanIndex-1]) + float(List[ScanIndex+1])) else : ListPart = str(float(List[ScanIndex-1]) - float(List[ScanIndex+1])) print (ListPart) print (List) List.insert([ScanIndex],ListPart) List.remove([ScanIndex+1]) List.remove([ScanIndex-1]) print (List) ScanIndex += 1 if Sum == True : break if Sum == False : Sum = True Brackets.remove([0]) while (BarcketsRemove > 0) : print (List) List.remove(" (") List.remove(" )") print (List) BarcketsRemove -= 1 Sum = False ScanIndex = 0 while True : while (List[ScanIndex] != "=") : if (List[ScanIndex] == " *" or " /" or " +" or " -") : if Sum == False : if (List[ScanIndex] == " *") : ListPart = str(float(List[ScanIndex-1]) * float(List[ScanIndex+1])) if (List[ScanIndex] == " /") : ListPart = str(float(List[ScanIndex-1]) / float(List[ScanIndex+1])) else : if (List[ScanIndex] == " +") : ListPart = str(float(List[ScanIndex-1]) + float(List[ScanIndex+1])) else : ListPart = str(float(List[ScanIndex-1]) - float(List[ScanIndex+1])) List.insert(List[ScanIndex],ListPart) List.remove([ScanIndex+1]) List.remove([ScanIndex-1]) ScanIndex += 1 if Sum == True : break if Sum == False : Sum = True print (List)
Example = ( 10 + ( 7 * ( 2 * 2 ) - ( 6 / 3 ) ) ) / ( 18 / 6 ) =#input("Пример:")
Example = '(10 + (7 * (2 * 2) - (6 / 3))) / (18 / 6)'
, то он работает, ругается только на цикл while, что выходим за пределы строки...Example = input("Пример:")
# замените на
Example = ( 10 + ( 7 * ( 2 * 2 ) - ( 6 / 3 ) ) ) / ( 18 / 6 )
# eval=оценка
print(eval(( 10 + ( 7 * ( 2 * 2 ) - ( 6 / 3 ) ) ) / ( 18 / 6 )))
прежде чем писать сообщение или создавать тему, нужно почитать правила, и там написано как вставлять код, и это на любом форуме...1 вставьте код по правилам форума
а вообще админу нужно задуматься почему многие не вставляют код как нужно - я знаю
потому, что не так как на других форумах...............
2
Код:Example = input("Пример:") # замените на Example = ( 10 + ( 7 * ( 2 * 2 ) - ( 6 / 3 ) ) ) / ( 18 / 6 )
А так?выдало ошибку TypeError: eval() arg 1 must be a string, bytes or code objectКод:# eval=оценка print(eval(( 10 + ( 7 * ( 2 * 2 ) - ( 6 / 3 ) ) ) / ( 18 / 6 )))
print(eval("( 10 + ( 7 * ( 2 * 2 ) - ( 6 / 3 ) ) ) / ( 18 / 6 )"))
print(eval('( 10 + ( 7 * ( 2 * 2 ) - ( 6 / 3 ) ) ) / ( 18 / 6 )'))
print((10 + ( 7 * ( 2 * 2 ) - ( 6 / 3 ) ) ) / ( 18 / 6 ))
смысл в том, чтобы можно было ввести уравнение в консоль а не в код программысмысл в eval не понятен, если в обоих случаях ответКод:print(eval('( 10 + ( 7 * ( 2 * 2 ) - ( 6 / 3 ) ) ) / ( 18 / 6 )')) print((10 + ( 7 * ( 2 * 2 ) - ( 6 / 3 ) ) ) / ( 18 / 6 ))
12.0
12.0
???
А может вы о другом поговорите?смысл в том, чтобы можно было ввести уравнение в консоль а не в код программы
без evel вам придется вручную определять порядок действий и сами действия
Потому, что я случайно указал числовой пример вместо текстового и вы правильно взяли кавычки, но почему-то забыли" =", который служит для остановки "сканирования"если в вашем коде заменить строкуExample = ( 10 + ( 7 * ( 2 * 2 ) - ( 6 / 3 ) ) ) / ( 18 / 6 ) =#input("Пример:")
на строкуExample = '(10 + (7 * (2 * 2) - (6 / 3))) / (18 / 6)'
, то он работает, ругается только на цикл while, что выходим за пределы строки...
ошибку, которую вы описали, я не смог добиться...
ну и что он делает, я тоже не понял...
а это какая то задача?Потому, что я случайно указал числовой пример вместо текстового и вы правильно взяли кавычки, но почему-то забыли" =", который служит для остановки "сканирования"
По поводу функции:
1-18) Разбивает пример на сегменты и загружает их в список List, знак окончания сегмента - пробел, а примера - равно
19-29) Проверяет сегменты на наличие открытых скобок и при нахождении таковых загружает их порядковый номер в список
27) Тут стоит пояснить: дальнейшие вычисления идут от открытой до первой попавшейся закрытой скобки и если попадутся скобки в скобках логических ошибок, связанных с порядком вычисления не избежать, но вместо лишних строк кода я решил просто перевернуть список с координатами скобок.
30-59) Здесь основные вычисления: берем первую координату скобки и начинаем вычисления от нее, сперва ищем умножение и деление, когда находим берем число слева и справа и выполняем
действие, полученное число ставим на место знака заменяя его, а соседние числа удаляем, дошли до конца - ищем сложение и вычитание, опять дошли до конца - переходим к другой скобке.
60-65) удаляем скобки
66-89)Теперь решаем оставшийся пример, но на моменте с заменой(81 строка) теперь выдает ошибку.