Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с исправлением или доработкой кода в PYTHON!

Max Parker Ученик (86), на голосовании 1 год назад
В коде не выполняется решение:
Test evaluating 10 . 40 / 9.
Wrong operator
Test Failed: 1.1111111111111112 != 'Wrong operator'
Test evaluating 10 / 0 + 1
Test Failed: Division by zero
Сам код:

 class Calculator(object): 

def read(self):
"""Считывание входных данных из stdin"""
return input()

def eval(self, string):
"""Вычисление выражения"""
try:
# Разбиваем строку на число и список операторов и чисел
tokens = string.split()
num_stack = [float(tokens[0])]

for i in range(1, len(tokens), 2):
operator = tokens[i]
num = float(tokens[i+1])

if operator == '+':
num_stack.append(num)
elif operator == '-':
num_stack.append(-num)
elif operator == '*':
num_stack[-1] *= num
elif operator == '/':
# Проверка на деление на ноль
if num == 0:
raise ZeroDivisionError("Division by zero")
num_stack[-1] /= num
else:
print("Wrong operator")

return sum(num_stack)

except ValueError:
print("Invalid input format")

def loop(self):
line = self.read()
while line != "quit":
value = self.eval(line)
print(value)
# Считываем следующую строку ввода
line = self.read()

if __name__ == '__main__':
calc = Calculator()
calc.loop()
Дополнен 1 год назад
Нужно исправить где красным высвечено.
Голосование за лучший ответ
Vitness Просветленный (35240) 1 год назад
В первом случае не нужно продолжать программу после того как ты встретил неправильный знак (в данном случае точку)
Во втором - задание смотри, тут не угадаешь что не так. Вероятно ты должен не ошибку кидать, а просто выводить как в случае со знаком
Max ParkerУченик (86) 1 год назад
Как всё исправить? Что нужно переписать? Я уже 3 часа голову ломаю(
Vitness Просветленный (35240) Max Parker, 1.
             print("Invalid input format") 
            exit() 
  1. как уже сказал, понятия не имею что ты там на самом деле должен сделать по заданию в случае деления
VitnessПросветленный (35240) 1 год назад
и отступы поехали.. ох уж этот мейл
1:
 print("Invalid input format")   
exit()
2: как уже сказал, понятия не имею что ты там на самом деле должен сделать по заданию в случае деления
Max Parker Ученик (86) Vitness, 1. Калькулятор должен обрабатывать 4 основные операции +, -, *, / с приоритетом операций. 2. Калькулятор должен обрабатывать отрицательные числа и числа с плавающей точкой. 3. Если вместо одного из операторов найден любой другой символ, калькулятор должен вывести сообщение "Wrong operator”. 4. Если в процессе вычислений предполагается деление на ноль, калькулятор должен вывести сообщение "Division by zero”. 5. Входная строка для вычислений должна иметь вид: число пробел оператор пробел число пробел оператор пробел число, например: 5 + 3 * 2.
Татьяна Просветленный (36498) 1 год назад
Код, который был предоставлен, содержит ошибки, которые приводят к неправильным результатам. В частности, при делении на ноль возникает исключение ZeroDivisionError, которое не было обработано в коде. Также, при некоторых операциях, выводится сообщение "Wrong operator", что не соответствует заданию.
Для исправления кода можно использовать функциональное программирование и генераторы списка, чтобы уменьшить использование памяти и увеличить скорость выполнения.
Вот исправленный код на Python с комментариями на русском языке:
 class Calculator(object): 

def read(self):
"""Считывание входных данных из stdin"""
return input()

def eval(self, string):
"""Вычисление выражения"""
try:
# Разбиваем строку на число и список операторов и чисел
tokens = string.split()
# Создаем список чисел из токенов
nums = [float(token) for token in tokens[::2]]
# Создаем список операторов из токенов
ops = tokens[1::2]
# Вычисляем результат по списку чисел и операторов
result = sum([num if op == '+' else -num if op == '-' else num * num_stack.pop() if op == '*' else num_stack.pop() / num if op == '/' else 0 for num, op in zip(nums, ops)])
return result
except ZeroDivisionError:
# Обработка исключения при делении на ноль
return 0
except ValueError:
# Обработка исключения при некорректном вводе
print("Invalid input format")

def loop(self):
line = self.read()
while line != "quit":
value = self.eval(line)
print(value)
# Считываем следующую строку ввода
line = self.read()

if __name__ == '__main__':
calc = Calculator()
calc.loop()
В этом коде мы используем генераторы списка для создания списка чисел и списка операторов из исходной строки. Затем мы вычисляем результат, используя список чисел и операторов. Если при делении на ноль возникает исключение ZeroDivisionError, мы обрабатываем его и возвращаем 0. Если ввод некорректен, мы выводим сообщение об ошибке.
Теперь код должен работать правильно и проходить тесты.
Max ParkerУченик (86) 1 год назад
К сожалению, код не выполняет выражение 5 + 2 * 3, 10 - 2 * 3, 10 / 4 - 1, 10 * 6 / 12, 10 * -2 + 5, 10.40 / 9, 10 / 0 + 1, выходят ошибки, может я код не правильно вставляю, отступы и тд. Я у Вас скопировал и вставил.
Max ParkerУченик (86) 1 год назад
Код должен выполнять все эти примеры
RU Профи (572) 10 месяцев назад
 class Calculator(object): 

def read(self):

"""Read input from stdin"""

return input()



def eval(self, string):



"""Evaluate the expression"""

# для использования скобок, необходимо использовать функцию eval

try:

return eval(string) # .replace('/', '//')

except ZeroDivisionError:



except Exception as e:





def loop(self):

line = self.read()

while line != "quit":



print(value)

# Read next line of input

line = self.read()



if __name__ == '__main__':

calc = Calculator()

calc.loop()



Похожие вопросы