Господа, приветствую! Решил описать результаты изучения абсолютно бесплатных курсов и статей по языку программирования python, любые комментарии с одобрениями/осуждениями/пожеланиями приветствуются.
Итак, дело было вечером — делать было нечего…. Бесплатный (пробный) курс на Я.Практикуме подтолкнул зафиксировать полученные знания хоть как-нибудь, так родилась идея создания Калькулятора Лазерной Резки (далее КЛР), аплодисменты в студию!! Видео на ютубе «Учим python за 7 часов! Уроки Python Полный курс обучения программированию на python с нуля» канала Python Hub Studio придало уверенность.
Вот что получилось по коду:
while True: length = int(input('Длинна мм = ')) # в миллиметрах длинна width = int(input('Ширина мм = ')) # в миллиметрах ширина t = int(input('Толщина мм = ')) # в миллиметрах толщина number_of_pieces = int(input('Кол-во деталей шт = ')) # кол-во деталей шт rezka = int(input('Длинна резки м/п = ')) # в метрах резка длинна vstavki = int(input('Кол-во вставок шт = ')) # кол-во вставок при резке gibov = int(input('Кол-во гибов шт = ')) # кол-во шт гибов metal_square= (length* width *0.000001)*number_of_pieces print(f'Площадь металла:{metal_square} м^2') metal_massa= length * width * t * number_of_pieces * 0.0000078 print(f'Масса маталла: {metal_massa} кг') metal_money = metal_massa * 350 print(f'Стоимость металла: {int(metal_money)} рублей') t_list=[ 1, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 20] price_list_100=[27, 36, 57, 64, 76, 87, 111, 154, 191, 224, 360, 519] price_list_101=[20, 28, 43, 50, 58, 68, 84, 125, 144, 186, 298, 432] for i in range(len(t_list)): if t == t_list[i] and rezka <= 100: rezka_price= price_list_100[i] elif t == t_list[i] and rezka >100: rezka_price= price_list_101[i] rezka_money = rezka * rezka_price if rezka_money < 5000: rezka_money = 5000 print(f'Стоимость лазерной резки: {rezka_money} рублей') vstavki_money = vstavki * 10 print(f'Стоимость вставок: {vstavki_money} рублей') if gibov <20: gibov_price = 200 else: gibov_price = 100 gibov_money = gibov * gibov_price print(f'Стоимость гибки: {gibov_money} рублей') print(f'ЕСЛИ МЕТАЛЛ НАШ: {metal_money + rezka_money + vstavki_money + gibov_money}') print(f'ЕСЛИ МЕТАЛЛ СВОЙ: {rezka_money + vstavki_money + gibov_money}')
Вот что получилось по выводу:
Заказы на нашем производстве стали просчитываться в 3 раза быстрее!! но пересмотрев курс на ютубе и на Я.Практикуме, пришло понимание что надо осваивать функции и похоже что мой КЛР ждет v2.0
На этот раз вот что получилось по коду:
t_list=[ 1, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 20] price_list_100=[27, 36, 57, 64, 76, 87, 111, 154, 191, 224, 360, 519] price_list_101=[20, 28, 43, 50, 58, 68, 84, 125, 144, 186, 298, 432] def metal_params(): global metal_cost length = int(input('Длинна мм = ')) width = int(input('Ширина мм = ')) global t t = int(input('Толщина мм = ')) number_of_pieces = int(input('Кол-во деталей шт = ')) global metal_cost metal_cost = length * width * t * number_of_pieces * 0.0000078 * 350 return f'Площадь металла: {(length* width *0.000001)*number_of_pieces} м^2 \nМасса маталла:{length * width * t * number_of_pieces * 0.0000078} кг \nСтоимость металла:{metal_cost} рублей' def cutting_cost(): cutting_length = int(input('Длинна резки м/п = ')) for i in range(len(t_list)): if t == t_list[i] and cutting_length <= 100: cutting_price= price_list_100[i] elif t == t_list[i] and cutting_length >100: cutting_price= price_list_101[i] global cutting_money cutting_money = cutting_length * cutting_price if cutting_money < 5000: cutting_money = 5000 return f'Стоимость лазерной резки: {cutting_money} рублей' def insert_cost(): global insert_money insert_money = int(input('Кол-во вставок шт = ')) * 10 return f'Стоимость вставок: {insert_money} рублей' def bending_cost(): bending_count = int(input('Кол-во гибов шт = ')) if bending_count <20: bending_price = 200 else: bending_price = 100 global bending_money bending_money = bending_count * bending_price return f'Стоимость гибки: {bending_money} рублей' def cost_out(): metal = metal_params() cutting = cutting_cost() insert = insert_cost() bending = bending_cost() print (f'{metal}\n{cutting}\n{insert}\n{bending}') print (f'Если металл наш:{metal_cost + cutting_money + insert_money + bending_money} \nЕсли метал НЕ наш: {cutting_money + insert_money + bending_money}') while True: cost_out()
Вывод результатов остался таким же. Да, согласен — ничего не поменялось, но сие творение получило возможность неограниченного расширения функционала, например оценка стоимости сварного шва, резки не только лазером (болгарка, ленточный станок), покраски, доставки и т.д. Мыслей было много, программа работала и использовалась почти каждый день.
Постепенно образовалась проблема следующего характера — никто не мог пользоваться этой программой, кроме меня. И заморачиваться установкой Python-а на комп ради одного калькулятора — так себе затея. Было решено — калькулятор в массы!! В этом оч помог краткий курс от https://python-scripts.com/ и тот же курс с канала Python Hub Studio прекрасно дополнил это дело по библиотекам TKINTER + pyinstaller, которые могут сделать из простого кода полноценное, самостоятельное приложение с расширением .exe! То есть, да, оно работает на любом компьютере как обыная прога.
Вот так пришло время КЛР V 3.0, код стал таким:
import tkinter as tk # вводные данные из таблицы по стоимости лазерной резки t_list = [1, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 20] price_list_100 = [27, 36, 57, 64, 76, 87, 111, 154, 191, 224, 360, 519] price_list_101 = [20, 28, 43, 50, 58, 68, 84, 125, 144, 186, 298, 432] # функция по просчету площади, массы, стоимости металла def metal_params(): metal_square = (int(ent_length.get()) * int(ent_width.get()) * 0.000001) * int(ent_number_of_pieces.get()) lbl_metal_square["text"] = f"Площадь металла: {metal_square} m^2" metal_massa = int(ent_length.get()) * int(ent_width.get()) * \ int(ent_t.get()) * int(ent_number_of_pieces.get()) * 0.0000078 lbl_metal_massa["text"] = f"Масса маталла: {metal_massa} кг" global metal_money metal_money = metal_massa * 100 lbl_metal_money["text"] = f'Стоимость металла: {int(metal_money)} рублей' # функция по просчету стоимости резки def cutting_cost(): cutting_length = int(ent_rezka.get()) for i in range(len(t_list)): if int(ent_t.get()) == t_list[i] and cutting_length <= 100: cutting_price = price_list_100[i] elif int(ent_t.get()) == t_list[i] and cutting_length > 100: cutting_price = price_list_101[i] global cutting_money cutting_money = cutting_length * cutting_price if cutting_money < 5000: cutting_money = 5000 lbl_cutting_money["text"] = f'Стоимость лазерной резки: {cutting_money} рублей' # функция по просчету стоимости вставок def insert_cost(): global insert_money insert_money = int(ent_vstavki.get()) * 5 lbl_insert_money["text"] = f'Стоимость вставок: {insert_money} рублей' # функция по просчету стоимости гибки def bending_cost(): bending_count = int(ent_gibov.get()) if bending_count < 20: bending_price = 200 else: bending_price = 100 global bending_money bending_money = bending_count * bending_price lbl_bending_money["text"] = f'Стоимость гибки: {bending_money} рублей' # функция вызывает другие функции и считает итоговую стоимость, это команда для кнопки в приложении def cost_out(): metal_params() cutting_cost() insert_cost() bending_cost() lbl_out_cost["text"] = f'Если металл наш: {metal_money + cutting_money + insert_money + bending_money}' lbl_out_cost2["text"] = f'Если метал НЕ наш: {cutting_money + insert_money + bending_money}' # создали окно и название окна window = tk.Tk() window.title('Калькулятор заказов в мастерской') window.resizable(width=False, height=False) # создали рамку frm_data в которой разместили ярлыки и поля ввода frm_data = tk.Frame(master=window) lbl_length = tk.Label(master=frm_data, text='Длинна мм = ') lbl_width = tk.Label(master=frm_data, text='Ширина мм = ') lbl_t = tk.Label(master=frm_data, text='Толщина мм = ') lbl_number_of_pieces = tk.Label(master=frm_data, text='Кол-во деталей шт = ') lbl_rezka = tk.Label(master=frm_data, text='Длинна резки м/п = ') lbl_vstavki = tk.Label(master=frm_data, text='Кол-во вставок шт = ') lbl_gibov = tk.Label(master=frm_data, text='Кол-во гибов шт = ') # поля ввода для каждого ярлыка ent_length = tk.Entry(master=frm_data, width=10) ent_width = tk.Entry(master=frm_data, width=10) ent_t = tk.Entry(master=frm_data, width=10) ent_number_of_pieces = tk.Entry(master=frm_data, width=10) ent_rezka = tk.Entry(master=frm_data, width=10) ent_vstavki = tk.Entry(master=frm_data, width=10) ent_gibov = tk.Entry(master=frm_data, width=10) # указываем положение ярлыков в рамке lbl_length.grid(row=0, column=0, sticky="e") lbl_width.grid(row=1, column=0, sticky="e") lbl_t.grid(row=2, column=0, sticky="e") lbl_number_of_pieces.grid(row=3, column=0, sticky="e") lbl_rezka.grid(row=4, column=0, sticky="e") lbl_vstavki.grid(row=5, column=0, sticky="e") lbl_gibov.grid(row=6, column=0, sticky="e") # указываем положение полей ввода в рамке ent_length.grid(row=0, column=1, sticky="w") ent_width.grid(row=1, column=1, sticky="w") ent_t.grid(row=2, column=1, sticky="w") ent_number_of_pieces.grid(row=3, column=1, sticky="w") ent_rezka.grid(row=4, column=1, sticky="w") ent_vstavki.grid(row=5, column=1, sticky="w") ent_gibov.grid(row=6, column=1, sticky="w") # обьявляем кнопку btn_go = tk.Button(master=window, text='Посчитать', command=cost_out) # рамка с результатами вычислений frm_result = tk.Frame(master=window, width=1000) # ярлыки в которых результаты вычислений lbl_metal_square = tk.Label(master=frm_result, text='Площадь металла: ') lbl_metal_massa = tk.Label(master=frm_result, text='Масса маталла: ') lbl_metal_money = tk.Label(master=frm_result, text='Стоимость металла: ') lbl_cutting_money = tk.Label( master=frm_result, text='Стоимость лазерной резки: ') lbl_insert_money = tk.Label(master=frm_result, text='Стоимость вставок: ') lbl_bending_money = tk.Label(master=frm_result, text='Стоимость гибки: ') lbl_out_cost = tk.Label(master=frm_result, text='Если металл наш: ') lbl_out_cost2 = tk.Label(master=frm_result, text='Если металл НЕ наш: ') # указываем положение результатов в рамке результатов lbl_metal_square.grid(row=0, column=0) lbl_metal_massa.grid(row=1, column=0) lbl_metal_money.grid(row=2, column=0) lbl_cutting_money.grid(row=3, column=0) lbl_insert_money.grid(row=4, column=0) lbl_bending_money.grid(row=5, column=0) lbl_out_cost.grid(row=6, column=0) lbl_out_cost2.grid(row=7, column=0) # указываем положение рамки и кнопки в общем окне frm_data.grid(row=0, column=0, padx=10) btn_go.grid(row=0, column=1, padx=10) frm_result.grid(row=0, column=2, padx=10) # шоб все заработало window.mainloop()
ввод и вывод стал выглядеть так:
Сейчас учу тему по ООП, хз делать V 4.0 или что то более масштабное сообразить?… Кто дочитал до конца — красавчик.
Респект автору канала Python Hub Studio, Я.Практикуму и всем кто выкладывает образовательные материалы по программированию. Земной поклон вам, сделаю вам скидку при просчете заказа 🙂
ссылка на оригинал статьи https://habr.com/ru/post/723218/
Добавить комментарий