Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 13, 2021 06:20:44

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

Помогите с экселем

Если вы хотите чтобы оценили ваш код, то разумно будет его привести.
создание нового фрейма Довольно дешевая операция, ничего страшного.

also1
Это норм или можно умнее?
Умнее можно всегда. Мое мнение что оно должно упрощать вам жизнь. Сомневаюсь что на ваших данных вы исчерпаете память или будете сутками ждать результатов расчетов. А в поисках “умного” решения можно провести дни.

p.s.
Нужна разумность.
1. Если хотите сохранить установки то https://openpyxl.readthedocs.io/en/stable/tutorial.html#saving-as-a-stream
используйте шаблон файла.
2. pandas вообще неоднозначный инструмент. Он переусложнен и во многом отходит от приемов принятых в питоне. Если надо пару раз просуммировать ячейки и записать отформатированный результат то учить для этого pandas точно не стоит.
3. Если вы готовы потратить много времени на обеспечение максимального удобства пользователю то стоит взглянуть на pyQt или wxPython для создания полноценного приложения. Exel тоже неоднозначный инструмент. Он своенравен и считает что лучше вас знает что именно вам надо. Я сам был свидетелем как люди сутками бились над тем чтобы разумно организовать импорт экспорт csv таблиц, как десятки людей стояли на ушах когда перед сдачей финансового этапа в экселе развалилась система ссылок на внешние файлы, как однажды чуть не остановилась атомная станция когда человек воспользовался экселом для редактирования небольшой таблички с числами и умный ексел молча заменил некоторые плавающие числа на даты 1.12 на 1 Декабря…. Что уж тут говорить про свистопляску с запятыми вместо точек в плавающих числах.
В полноценном приложении вы гораздо лучше контролируете происходящее. За это правда надо платить большим объемом кода.



Отредактировано doza_and (Фев. 13, 2021 06:26:27)

Офлайн

#2 Фев. 13, 2021 12:32:10

also1
Зарегистрирован: 2019-12-06
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с экселем

doza_and Спасибо за развернутый ответ.
Особенно точно подмечено про особо умный эксель.
GUI для меня будет след шагом, пока разбираюсь с консолью.
И кстати вопрос про GUI: Как удобнее и лучше, сначала писать консольное приложение а потом его натягивать на интерфейс или сразу все делать в QT или wx

Офлайн

#3 Фев. 13, 2021 13:27:40

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите с экселем

also1
Как удобнее и лучше, сначала писать консольное приложение а потом его натягивать на интерфейс или сразу все делать в QT или wx
ИМХО для вас лучше сразу делать в QT или wx. На консольное приложение конечно можно натянуть ГУИ, но это лишний геморой и не всегда удобно. Или вы должны сразу писать консольное приложение с таким рассчетом что на него потом будет ГУИ натягиваться, но это , как мне кажеться, на данном этапе вам не под силу. Сначала разберитесь просто как работают событиеориентированые фрейморки QT или wx.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#4 Фев. 13, 2021 13:34:55

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

Помогите с экселем

PEHDOM
На консольное приложение конечно можно натянуть ГУИ, но это лишний геморой
Полностью соглаен.

С помощью консольных приложений вы можете отлаживать (или делать модульные тесты) отдельные куски которые потом будут использоватья как обработчики бизнес логики. Но об этом пока наверное рано думать.



Отредактировано doza_and (Фев. 13, 2021 13:36:53)

Офлайн

#5 Фев. 13, 2021 14:49:42

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1359
Репутация: +  119  -
Профиль   Отправить e-mail  

Помогите с экселем

also1
Может вам посмотреть в сторону Sql(базы данных)+ python, по мне этот опыт будет более прогрессивнее

Офлайн

#6 Фев. 13, 2021 16:38:21

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Помогите с экселем

PEHDOM
как мне кажеться, на данном этапе вам не под силу
эт вы зря
там же конструкторы есть ..
хотя у кого как .. наверное



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#7 Фев. 13, 2021 20:58:43

also1
Зарегистрирован: 2019-12-06
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с экселем

Наберусь смелости наглости: покритикуйте плиз
На это “творение” гуи натянуть можно или лучше заново?

Прикреплённый файлы:
attachment Зряплата01.rar (8,6 KБ)

Офлайн

#8 Фев. 13, 2021 21:14:37

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Помогите с экселем

ну эт вам решать (скорее всего часть старого кода бдет так или иначе использована) c qt связываться не доводилось а с wx …
конструктор
https://m.youtube.com/watch?v=wg3q058Awj8&list=PLeHfkOtgcB2uoVqsaSb4FOpdxAFCGYL2c&index=1
https://github.com/wxFormBuilder/wxFormBuilder/releases/download/v3.9.0/wxFormBuilder_v3.9.0.exe
документация
https://docs.wxpython.org/



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Фев. 13, 2021 21:23:44)

Офлайн

#9 Фев. 14, 2021 09:46:11

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

Помогите с экселем

also1
гуи натянуть можно или лучше заново?
Я думаю лучше заново.

У вас 3/4 кода это ввод с консоли и проверка его корректности.
С gui Этого не потребуется, там есть элементы ввода дат плавающих чисел и т.п со встроенными средствами валидации. Поэтому все это будет не нужно а новый код будет в 10 раз меньше.

Оставшаяся 1/4 Это бизнес логика на pandas. Я думаю тут сам алгоритм надо полностью переделать.

По сути Вы ведете учет транзакций Добавления убавления из кассы. Такое часто делают с использованием СУБД но вы можете и на файлах потренироваться.

Первое что надо - написать что вы хотите. Например. Хочу отслеживать текущую кассу. и историю изменений в кассе. Допустимые операции добавить выручку, забрать зарплату. Каждая операция должна сопровождаться датой и номером смены.

Второе - выбрать адекватные средства реализации. По сути вы пишете лог операций и вам нужно текущее состояние. Ну и сделайте два обычных файла. С текущей кассой и с логом операций. При этом инструмент записи надо брать такой чтобы не возиться с преобразованием данных из питона. Я бы взял pyyaml для наглядности. Я бы выкинул бухгалтерскую херню типа дебет кредет баланс. Комп не ошибается, расчеты практически ничего не стоят, мы считаем не на арифмометре если деньги берут из кассы мы вполне к числу можем минус приписать.
 import yaml
def log_operation(smena, tot, delta, op_type="Выручка"):
    """Этот файл только справочный и только пишется в конец"""
    with open("log.yaml","a",encoding="utf-8") as f:
          pos = f.tell()  # запомним позицию записи это поможет проверить соответствие лога и текущего состояния
          yaml.safe_dump(dict(t=datetime.datetime.now(),op=op_type,tot=tot,
                   smena=smena,delta=delta), f,allow_unicode=True)
      return pos
def sv_st(pos,tot):
    """запись текущего состояния кассы"""
    with open("tot.yaml","w",encoding="utf-8") as f:
          yaml.safe_dump({"pos":pos."tot":tot},f)
def ld_st():
    """чтение текущего состояния кассы"""
    with open("tot.yaml","r",encoding="utf-8") as f:
          return yaml.safe_load(f)
def on_v(self,evt):
     """пример обработки события добавления выручки"""
     tot=self.tot
     pos = self.pos
     try:
           self.tot+=self.doxod
           self.pos = log_operation(self.smena,self.tot,self.doxod, "Выручка")
           sv_st(self.pos,self.tot)
     except:
           # чтото пошло не так откатываем транзакцию
           self.tot=tot
           self.pos=pos
           sv_st(self.pos,self.tot)
           ......

По мелочи
 def some():
    ....
    some()  # это не цикл это рекурсия и это явно не то что вы хотите, Не делайте так!!!!
inkas = float(inkas.replace(',', '.'))  # не держите деньги во float он приближенный используйте 
# int или decimal  Я думаю если вам нужны копейки то и считайте все в копейках.
# тех кто пишет запятые вместо точек в плавающих числах надо немедленно увольнять а лучше вешать на фонарных столбах. Весь мир пишет точки. Запятые древнючий анахронизм.



Офлайн

#10 Фев. 14, 2021 10:29:17

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите с экселем

AD0DE412
эт вы зря
там же конструкторы есть ..
Дело не в том. Сложность не в том чтобы на форму контролов накидать, сложность написать именно консольное приложение, на которое потом без проблем можно натянуть ГУИ, не понимая как эти самые ГУИ работают.
py.user.next ниже более понятными словами расписал все.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Фев. 14, 2021 10:56:52)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version