Основы 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}')

Вот что получилось по выводу:

b6a1df58a3fa4f11dd891b834f580ad0.JPG

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

© Habrahabr.ru