Форум сайта python.su
0
Здравствуйте. Подскажите пожалуйста, как умнее сделать:
Скрипт открывает файл, читает первую строку, производит некоторые вычисления с ней и записывает полученный результат в новую строку (вниз) Как можно заставить, или что-б новый результат записывался в новую строку сверху, или заставить считывать последнюю строку в файле??
Каждая строка- одно число float
Офлайн
568
почитайте документацию по функции open, там описаны все режимы открытия файла
Офлайн
857
also1Лучше вот это чтение из файла и сразу запись в файл не делать. Если программа упадёт посередине выполнения, то ты исходный файл оставишь в повреждённом виде.
Скрипт открывает файл, читает первую строку, производит некоторые вычисления с ней и записывает полученный результат в новую строку (вниз)
also1Это всё нужно делать в новый файл, а потом первый файл стереть и вместо него новый файл поместить. Если программа упадёт посередине, то с исходным файлов всё в порядке останется.
Подскажите пожалуйста, как умнее сделать:
Офлайн
0
Нужного не нашел. Если можно, ткните пальцем ссылку.
Офлайн
0
py.user.nextЗапись происходит только после выполнения (Ну это я так понимаю)
with open("text.txt", 'r', encoding='utf-8') as f: st_pok = f.read() print("Старые показания: ", st_pok, 'KWt') st_pok = int(st_pok) pok = int(input("Введите показания: ")) if pok < st_pok: print("Не правильно введены показания. Повторите ввод") print("Старые показания", st_pok) exit() rashod = pok - st_pok print("Расход", rashod, 'KWt') pok = str(pok) with open("text.txt", 'w', encoding='utf-8') as f: f.write(pok) tarif = 4.65 print('Сумма к оплате: ', "%.2f" % (rashod * tarif), ' руб.') with open("many.txt", 'r', encoding='utf-8') as f: saldo = f.readline() saldo = float(saldo) print("Было на счете: ", saldo, 'Руб.') print("Можно оплатить: ", "%.2f" % (rashod * tarif - saldo), 'Руб.') opl = float(input("Введите сумму: ")) saldo = "%.2f" % (opl + saldo - rashod * tarif) print("На балансе осталось: ", saldo, 'Руб.') saldo = str(saldo) with open("many.txt", 'w', encoding='utf-8') as f: f.writelines(saldo + '\n') q = input("Для закрытия нажмите любую клавишу")
Отредактировано also1 (Дек. 6, 2019 12:37:55)
Прикреплённый файлы:
el2.py (1,3 KБ)
Офлайн
857
also1Лучше задание напиши словами. Этот код даже средним нельзя назвать.
Вот мое первое творение. хочу сделать, чтоб в файлах сохранялась бы не только последнее значение, а вся история показаний и оплат.
Отредактировано py.user.next (Дек. 6, 2019 13:24:56)
Офлайн
0
py.user.nextЯ догадываюсь. Только начинаю изучать python/
Этот код даже средним нельзя назвать.
Офлайн
253
:(
Оперировать строками в файле плохая идея, тем более искать последнюю.
Писать нестандартные форматы данных плохая идея.
pok = int(input(“Введите показания: ”)) Заставлять пользователя корпеть в консоли плохая идея лучше отредактировать в приятном текстовом редакторе файл понятной структуры
tarif = 4.65 - хадкодить параметры можно, но не в России.
q = input(“Для закрытия нажмите любую клавишу”) - плохая идея. Не улавливаю даже смысл зачем так делать.
Вот что может например получиться:
import json import os history = "history.json" last_rec = "last_rec.json" new_rec = "new_rec.json" #получили новые данные with open(new_rec,"r") as f: rec =json.load(f) # {"money":100,"count":353,"price":2} #получили старые данные if os.path.exists(last_rec): with open(last_rec,"r") as f: last =json.load(f) #{"money": -140, "count": 353, "price": 2} else: last={"money":0,"count":rec["count"]} #выполнили действия rec["money"] += last["money"] - rec["price"] * (rec["count"] - last["count"]) #записали лог with open(history,"a") as f: json.dump(last,f) f.write("\n") #записали последнее состояние with open(last_rec,"w") as f: json.dump(rec,f)
Отредактировано doza_and (Дек. 6, 2019 21:35:29)
Офлайн
857
also1Пришли файл ввода. Пришли полученный из файла ввода файл результата. И объясни как из файла ввода получаешь файл результата. Объясни, по какому принципу ты это сам делаешь, без программы, а дальше уже можно будет сделать программу, которая делает эти все действия вместо тебя - автоматизирует процесс.
Это калькулятор оплаты электроэнергии
Отредактировано py.user.next (Дек. 7, 2019 05:48:36)
Офлайн
253
py.user.nextЯ бы тут добавил. “Адаптируй решение задачи под возможности языка программирования”. Программа почти всегда очень сильно отличатся от действий человека. Составлять входной json с подписыванием всех полей никто не будет. Просто в калькулятор циферку запишут, а программно запихать циферку в калькулятор будет ой как не просто. Человеку последнюю запись из файла раз плюнуть взять. А в программе целый огород для этого вырастет. Поэтому при автоматизации проще отдельный файл записать. и т.д. и т.п.
по какому принципу ты это сам делаешь, без программы
Офлайн