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

Помогите с задачкой на питоне

Кристина Майшева Знаток (371), на голосовании 1 месяц назад
Задача такая
Есть файл, например, test.txt. В нем записан пример 2+4 (или какой-то другой несложный). Нужно написать программу, которая будет брать из файла эти числа и ответ записывать в этот же файл. Типо калькулятор
Голосование за лучший ответ
epifan Мыслитель (6825) 2 месяца назад
 def calculate(expression): 
try:
# Используем eval() для вычисления выражения
result = eval(expression)
return result
except:
return "Ошибка в выражении"

# Имя файла
filename = "test.txt"

try:
# Открываем файл для чтения
with open(filename, 'r') as file:
# Читаем выражение из файла
expression = file.read().strip()

# Вычисляем результат
result = calculate(expression)

# Открываем файл для записи
with open(filename, 'w') as file:
# Записываем исходное выражение и результат
file.write(f"{expression} = {result}")

print(f"Результат записан в файл {filename}")

except FileNotFoundError:
print(f"Файл {filename} не найден")
except Exception as e:
print(f"Произошла ошибка: {e}")
Рустам Абдрашитов Мыслитель (9542) 2 месяца назад
 import ast 
import operator

def safe_eval(expr):
allowed_operators = {
ast.Add: operator.add,
ast.Sub: operator.sub,
ast.Mult: operator.mul,
ast.Div: operator.truediv,
ast.Pow: operator.pow,
ast.BitXor: operator.xor,
}

def eval_node(node):
if isinstance(node, ast.Expression):
return eval_node(node.body)
elif isinstance(node, ast.Num): # Для Python 3.7 и ниже
return node.n
elif isinstance(node, ast.Constant): # Для Python 3.8 и выше
return node.value
elif isinstance(node, ast.BinOp):
left = eval_node(node.left)
right = eval_node(node.right)
return allowed_operators[type(node.op)](left, right)
else:
raise ValueError("Недопустимый узел в выражении")

tree = ast.parse(expr, mode='eval')
return eval_node(tree.body)

def calculate_expressions(file_path):
try:
with open(file_path, 'r') as file:
expressions = file.readlines()

results = []

for expression in expressions:
expression = expression.strip()
if expression:
result = safe_eval(expression)
results.append(f"{expression} = {result}")

with open(file_path, 'w') as file:
file.write("\n".join(results) + "\n")

print("Результаты записаны в файл:")
for result in results:
print(result)

except Exception as e:
print(f"Произошла ошибка: {e}")

file_path = 'test.txt'
calculate_expressions(file_path)
Похожие вопросы