Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 5, 2021 22:41:48

vexamd
Зарегистрирован: 2020-12-22
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка файлов


всем привет
Можете помочь с обработки файлов
Программа должна быть загружена с файлом expression.txt. Структура файла такова, что каждая строка представляет выражение в следующем формате:
4-1
12-3
формат такой: <Число> <число>
Должна быть написана программа, которая будет считывать файл построчно, применять данную операцию и записывать результат вместе с соответствующим выражением в файл output.txt.
Внешний вид файла output.txt:
4-1 = 3
12-3 = 9

Прикреплённый файлы:
attachment expression.txt (9 байт)

Офлайн

#2 Янв. 6, 2021 10:07:59

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Обработка файлов

vexamd
Можете помочь с обработки файлов
Конечно можем. Действуете так.
1 Надо прочитать книжку Лутца о языке питон.
2. Придумываете алгоритм как решить вашу задачу
3. Если потребуется изучаете разделы документации
https://docs.python.org/3/tutorial/inputoutput.html
4. Пишете программу.
5. Если она всеже не заработает, выкладываете ее сюда с четкими формулировками что именно не получается.



Офлайн

#3 Янв. 6, 2021 21:15:35

vexamd
Зарегистрирован: 2020-12-22
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка файлов

doza_and
Я сделал так
def sub(a, b):
return a-b
with open ('./expression.txt', ‘r’) as f:
lines = f.readlines()
for l in lines:
if l == ‘-’:
lines = sub
with open ('./output.txt', ‘w’) as g:
g.write(lines(int(l), int(l)))
g.close()
и не получается пишет ошибка TypeError: write() argument must be str, not int

Прикреплённый файлы:
attachment example.rar (366 байт)

Офлайн

#4 Янв. 7, 2021 01:52:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Обработка файлов

vexamd
Программа должна быть загружена с файлом expression.txt. Структура файла такова, что каждая строка представляет выражение в следующем формате:
4-1
12-3
формат такой: <число><минус><число>
Должна быть написана программа, которая будет считывать файл построчно, применять данную операцию и записывать результат вместе с соответствующим выражением в файл output.txt.
Внешний вид файла output.txt:
4-1 = 3
12-3 = 9

vexamd
Я сделал так
  
def sub(a, b):
    return a-b
with open ('./expression.txt', 'r') as f:
    lines = f.readlines()
    for l in lines:
        if l[1] == '-':
            lines = sub
            with open ('./output.txt', 'w') as g:
                g.write(lines(int(l[0]), int(l[2])))
                g.close()

Надо сразу открыть файл ввода и файл вывода. В одном with это можно сделать. А потом, читая одну строку ввода из файла ввода, преобразовывать её в строку вывода и записывать строку вывода в файл вывода.

Для преобразования строки ввода в строку вывода надо применить блок операторов. Этот блок операторов для преобразования строки включает в себя: разделение строки на части; получение из строковых типов частей числовых типов частей; выбор математической операции; применение выбранной математической операции к числовым частям; соединение числовых частей, математической операции и результата математической операции в новую строку.

Сам будешь делать или подождёшь инженера?



Отредактировано py.user.next (Янв. 7, 2021 01:54:02)

Офлайн

#5 Янв. 7, 2021 21:19:01

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Обработка файлов

vexamd
write() argument must be str, not
Конкретно по этой ошибке если не знаете английского то используйте google translate.

Либо надо результат преобразовать в строку.

Плохая идея везде использовать одну и туже переменную lines
Что вы имели ввиду когда писали:
 lines = sub
 if l[1] == '-'
Что по вашему мнению возвращает l???

Сейчас у вас в каждой строчке по несколько ошибок.

Я бы рекомендовал запустить интерпретатор питон (в IDE тоже есть консолька). И решайте задачу построчно. - выполнили readlines, посмотрели что получилось, выролнили l. над каждой строчкой надо сидеть пока не получится то что нужно.

А у вас напечатано сообщение об ошибке когда там уже давным давно все вверх тормашками.



Отредактировано doza_and (Янв. 7, 2021 21:21:16)

Офлайн

#6 Янв. 7, 2021 23:17:19

vexamd
Зарегистрирован: 2020-12-22
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка файлов

py.user.next
Получилось
резултат показывает правельно

def sub(a, b):
return a-b
with open ('./expression.txt', ‘r’) as f:
with open ('./output.txt', ‘w’) as g:
lines = f.readlines()
for l in lines:
if ‘-’ in l:
operands = l.split('-')
rez = sub(int(operands), int(operands))
g.write(operands + “-” + operands.rstrip() + “=” + str(rez) + “\n”)

Отредактировано vexamd (Янв. 7, 2021 23:18:26)

Офлайн

#7 Янв. 7, 2021 23:19:07

vexamd
Зарегистрирован: 2020-12-22
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка файлов

Спасибо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version