from math import atan,log10,piimport matplotlib.pyplot as pltfrom openpyxl import Workbookfrom openpyxl.styles import Font, Alignment, Border, Sidefrom openpyxl.utils import get_column_letter#   исходные данные   #f = 1300hr = 40hbs1 = 49hbs2 = 35hms = 1.7fi = 30# константыw = 15b = 40#   Модель Уолфиша-Икегами   #def los(f, d):    return(42.6 + 26 * log10(d) + 20 * log10(f))def nlos(f, d, hms, hbs, kf, hr, fi):    delta_hms = hr - hms    delta_hbs = hbs - hr    kd = 18 if hbs >= hr else 18 - 15 * delta_hbs / hr    ka = (54 if hbs > hr else          54 - 0.8 * delta_hbs if d >= 0.5 else          54 - 1.5 * delta_hbs * d)    Lbsh = -18 * log10(1 + delta_hbs) if hbs > hr else 0    Lmsd = Lbsh + ka + kd * log10(d) + kf * log10(f) - 9 * log10(b)    Lori = (        -10 + 0.354 * w if 0 <= fi < 35 else        2.5 + 0.075 * (fi - 35) if 35 <= fi < 55 else        4.0 + 0.114 * (fi - 55) if 55 <= fi <= 90 else 0    )    Lrts = -16.9 - 10 * log10(w) + 10 * log10(f) + 20 * log10(delta_hms) + Lori    Lo = 32.44 + 20 * log10(d) + 20 * log10(f)    Lnlos = Lo + max(0, Lrts + Lmsd)    return Lnlos#   Модель Кся-Бертони   #def bertoni(f, d, hms, hbs, w, b):    c = 3e8    lam = c / f    delta_hbs = hr - hbs    delta_hms = hms - hr    x = w / 2    teta = atan(delta_hms / x)    r=((delta_hms2)+(x2))0.5    Ldb= -10 * ((log10(lam / ((4 * pi) * d)))  2)     - 10 * log10((lam / ((4 * (pi)  2) * r)) * (((1 / teta) - (1 / ((2 * pi) + teta)))  2))     - 10 * log10((2.35  2) * (((delta_hbs / d) * ((b / lam)  0.5)) ** 1.8))    return Ldbmeters=list(range(200,1600,100))los_set, nlos_hbs1_middletown, nlos_hbs1_largetown, nlos_hbs2_middletown, nlos_hbs2_largetown, bertoni_hbs1=[],[],[],[],[],[]for el in meters:    los_set.append(los(f, el))    nlos_hbs1_middletown.append(nlos(f, el, hms, hbs1, (-4+(0.7*((f/925))-1)), hr, fi))    nlos_hbs1_largetown.append(nlos(f, el, hms, hbs1, (-4+(1.5*((f/925))-1)), hr, fi))    nlos_hbs2_middletown.append(nlos(f, el, hms, hbs2, (-4+(0.7*((f/925))-1)), hr, fi))    nlos_hbs2_largetown.append(nlos(f, el, hms, hbs2, (-4+(1.5*((f/925))-1)), hr, fi))    bertoni_hbs1.append(bertoni(f, el, hms, hbs2, w, b))def plot():    plt.figure(figsize=(8, 7))    plt.plot(meters,los_set,meters,nlos_hbs1_middletown,meters,nlos_hbs1_largetown,meters,nlos_hbs2_middletown,meters,nlos_hbs2_largetown,meters,bertoni_hbs1)    plt.grid(True)    plt.gca().legend(('зона прямой видимости',                      'вне зоны прямой видимости, высота {} м, город средних размеров'.format(hbs1),                      'вне зоны прямой видимости, высота {} м, город с плотной застройкой'.format(hbs1),                      'вне зоны прямой видимости, высота {} м, город средних размеров'.format(hbs2),                      'вне зоны прямой видимости, высота {} м, город с плотной застройкой'.format(hbs2),                      'Модель Кся-Бертони. Высота  м'),loc="lower center",bbox_to_anchor=(0.5, -0.4))    plt.xlim(200,1500)    plt.xticks(meters)    plt.xlabel("расстояние x, м")    plt.ylabel("L (потери сигнала), дБ")    plt.title("Модели Уолфиша-Икегами и Кся-Бертони")    plt.subplots_adjust(bottom=0.262,top=0.934)    plt.show()def toFixed(numObj, digits=3):    return float(f"{numObj:.{digits}f}")def save_to_xlsx(filename="pract3.xlsx"):    workbook = Workbook()    sheet = workbook.active    sheet.title = "Потери сигнала"        headers = [        "Расстояние (м)",         "Зона прямой видимости",         'Вне зоны, {} м, средний город'.format(hbs1),         "Вне зоны, {} м, плотная застройка".format(hbs1),         "Вне зоны, {} м, средний город".format(hbs2),         "Вне зоны, {} м, плотная застройка".format(hbs2),         "Модель Кся-Бертони"    ]    sheet.append(headers)        for i in range(len(meters)):        sheet.append([            meters[i],            toFixed(los_set[i]),            toFixed(nlos_hbs1_middletown[i]),            toFixed(nlos_hbs1_largetown[i]),            toFixed(nlos_hbs2_middletown[i]),            toFixed(nlos_hbs2_largetown[i]),            toFixed(bertoni_hbs1[i])        ])        for column_cells in sheet.columns:        max_length = 0        column = column_cells[0].column        for cell in column_cells:            try:                if len(str(cell.value)) > max_length:                    max_length = len(cell.value)            except:                pass        adjusted_width = (max_length + 2)        sheet.column_dimensions[get_column_letter(column)].width = adjusted_width    thin_border = Border(        left=Side(style='thin'),        right=Side(style='thin'),        top=Side(style='thin'),        bottom=Side(style='thin')    )    for row in sheet.iter_rows():        for cell in row:            cell.alignment = Alignment(horizontal="center", vertical="center")            cell.border = thin_border    for cell in sheet[1]:        cell.font = Font(bold=True)    workbook.save(filename)plot()save_to_xlsx()Добавь к программе полупрозрачный интерфейс, чтобы можно было забивать исходные графики, строить график и сохранять отчет в одном окне.