#python #python-3.x
#питон #python-3.x
Вопрос:
в школе мне дали задание получить файл базовых математических упражнений ( ,-,*,/), и мне сказали, что мне нужно решить их с помощью python и записать ответы в новый файл, я закончил свой код и его работу, но я не думаю, что мой код так же эффективен, как учитель ожидает . я предполагаю, что между первым числом, операцией и вторым числом есть пробелы, но это не обязательно верно. Пример для вопроса. текстовый текст — 1234 12121 12 * 33 Пример для ответа. текстовый текст — 1234 12121 = 13,355 12 * 33 = 396
~with open(r"C:UsersשליוDesktopque.txt", 'r') as source:
index = 0
t = source.readlines()
while index < len(t):
frs = ""
sign = ""
sec = ""
for chr in t[index]:
if chr == " ":
break
frs = chr
now = False
for chr in t[index]:
if chr == " ":
now = True
elif now :
sign = chr
break
count = 0
for chr in t[index]:
if chr == " ":
count = 1
elif count == 2:
sec = chr
frs = int(frs)
sec = int(sec)
with open(r"C:UsersשליוDesktopanswer.txt", 'a') as des:
des.write(f"{frs} {sign} {sec} = {frs sec}n")
index =1
Комментарии:
1. Показать que.txt файл
2. можете ли вы дать больше контекста того, что вы хотите архивировать, т.Е. Входных и выходных данных
3. И покажите, каков ожидаемый результат для данного ввода.
4. Вероятно, это было бы более уместно при проверке кода
Ответ №1:
Если нет необходимости в безопасности, вы можете использовать exec, чтобы получить гораздо более короткое и простое решение.
with open(r"C:UsersשליוDesktopque.txt", 'r') as source:
with open(r"C:UsersשליוDesktopanswer.txt", 'a') as des:
for equation in source.readlines():
try:
exec("result = " equation)
des.write(f"{equation.replace("n","")} = {result}n")
print(f"calculated result {result}")
except Exception as e:
print(f"failed at {equation.replace("n",""} because of {e}")
Редактировать:
Версия, которую OP в конечном итоге использовал из комментария:
def my_exec(code):
exec('global i; i = %s' % code)
global i
return i
def calc():
with open(r"C:UsersשליוDesktopque.txt", 'r') as source:
with open(r"C:UsersשליוDesktopanswer.txt", 'a') as des:
for equation in source.readlines():
result = my_exec(equation)
a = equation.replace("n","")
des.write(f"{a} = {result}n")
Комментарии:
1. Извините, была опечатка в строке 6. Попробуйте еще раз 🙂 У меня это сработало.
2. ничего, код даже не пишется, я считаю, что возникает исключение, но я не уверен, какое
3. обнаружил, что код не изменяет переменную result
4. Я снова протестировал его на примерах, которые вы предоставили, и я получаю
- 1234 12121 = 10887
и12 * 33 = 396
. Я добавил для вас немного кода отладки, чтобы вы увидели, что может быть не так. Возможно, прокомментируйте ошибку, если вы получите другую.5. я получил — NameError: имя ‘rstrip’ не определено
Ответ №2:
Вот как я бы подошел
with open("input.txt", 'r') as source:
for equation in source.readlines():
frs = ""
sign = ""
sec = ""
for index, char in enumerate(equation):
if char == ' ' or char == '-' or char =='*' or char =='/':
sign = char
frs = int(equation[:index])
sec = int(equation[index 1:])
break
# when we reach here, we would have found our operands and the operator
ans = ""
if char == ' ':
ans = frs sec
elif char == '-':
ans = frs - sec
elif char == '*':
ans = frs * sec
elif char == '/':
ans = frs / sec
else:
print("Unsupported Character:", char)
exit()
with open("output.txt", 'a') as des:
des.write(f"{frs} {sign} {sec} = {ans}n")
Input.txt файл выглядит следующим образом:
1234 12121
12 * 33
Output.txt файл выглядит следующим образом:
1234 12121 = 13355
12 * 33 = 396
Комментарии:
1. я получаю — ValueError: недопустимый литерал для int() с основанием 10: ‘ 3666666666666664 n’
2. Исправлены, а также добавлены входные регистры и выходные данные, которые я получил