Основы python в бизнесе
Господа, приветствую! Решил описать результаты изучения абсолютно бесплатных курсов и статей по языку программирования 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, Я.Практикуму и всем кто выкладывает образовательные материалы по программированию. Земной поклон вам, сделаю вам скидку при просчете заказа :-)