Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 22, 2022 09:56:09

joneb1983
Зарегистрирован: 2022-11-21
Сообщения: 5
Репутация: +  1  -
Профиль   Отправить e-mail  

Возможно ли это реализовать на Python?

Спасибо за развернутый ответ.

py.user.next
Так что снимай розовые очки и начинай с нуля.
Не подскажешь какую лучше roadmap выбрать по изучению python?
Ментора если найти частного, который раз в неделю может будет 1-2 часа времени уделять, это лучше курсов?

Отредактировано joneb1983 (Ноя. 22, 2022 09:57:24)

Офлайн

#2 Ноя. 22, 2022 11:33:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Возможно ли это реализовать на Python?

Для ознакомления с основами программирования можешь пройти курс Хирьянова. Он типа православный человек, учился на священника или дьякона, поэтому всё делает бесплатно для людей. Он даёт несколько языков, но даёт лишь основы, потому что, видимо, сам не шарит глубоко. Нет у него глубоких курсов, только курс для первокурсников и курс для школьников. Но по крайней мере это абсолютно бесплатно и трушно.

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

joneb1983
Ментора если найти частного
А как ты его проверишь? Давать-то он всё равно будет максимум начальные знания какие-то, которые и бесплатно можно взять самому. Но может быть и хуже, он может начать тебе втирать, что ты суперпрограммист уже, что у тебя успехи какие-то, при этом делать это на пустом месте. Не бывает быстрого обучения. А проверить себя всегда можно: ты просто берёшь и пробуешь написать программу. Если не получается, значит ты не умеешь.

Вот для начала пройди что-то вводное. Потом на этом пройденном вводном слое пройди уже что-то начальное. Потом на начальном слое, который на вводном слое, пройди уже что-то среднее. Так послойно ты станешь крепнуть.

Главное, что нужно делать, пока учишься, - пиши программы, которыми можно пользоваться. Написал простейшую программу и ещё можешь пользоваться ей - хорошо. При этом она может быть на две строчки. Там две строчки потом станут двумя страницами, а две страницы станут потом двумя сотнями страниц. Просто надо расти постепенно. А потом уже ты научишься писать программы, которые состоят из программ, которые состоят из программ. Это уже тысячестрочные программы. И главное, они будут юзабельными, а не будут просто какой-то туфтой в виде кучи кода.



Отредактировано py.user.next (Ноя. 22, 2022 11:45:51)

Офлайн

#3 Ноя. 23, 2022 00:16:35

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

Возможно ли это реализовать на Python?

  
import smtplib
from email.message import EmailMessage
 
def get_to_addr_from_excel(file):
    print('достает адрес из файла')
 
def get_to_copy_addr_from_excel(file):
    print('достает адрес для копии из файла')
 
def create_subject(num, addr):
    print('создает тему для сообщения')
 
def create_text_message(num):
    print('создает текст сообщения')
 
def get_data_from_table():
    print('достает данные из таблицы')
 
def get_chart():
    print('достает график')
 
def get_device_info():
    print('получает информацию от оборудования')
 
def send_email_message(to, subject, text, cc=None):
    with smtplib.SMTP('smtp.rambler.ru', 587) as server:
        try:
            server.starttls()
            server.login('your_addr@mail', 'passwd')
            msg = EmailMessage()
            msg['Subject'] = subject
            msg['From'] = 'your_addr@mail'
            msg['To'] = to
            if cc:
                msg['CC'] = cc
            msg.set_content(text)
            errors = server.send_message(msg)
            return errors
        except smtplib.SMTPException as e:
            return e
 
if __name__ == '__main__':
    res = send_email_message('to_adddr@mail', 'тема', 'отправлено из python','addr_for_copy@mail' )
    if res:
        print(res)

Офлайн

#4 Дек. 8, 2022 13:03:13

joneb1983
Зарегистрирован: 2022-11-21
Сообщения: 5
Репутация: +  1  -
Профиль   Отправить e-mail  

Возможно ли это реализовать на Python?

py.user.next
Так что снимай розовые очки и начинай с нуля.
Привет. Посидел немного и решил вникнуть в конструкцию языка и необходимую мне программу. Получилось создать код с использованием базы данных, скомпилировать в .exe файл. Программа работает.
Что делает:
1. Пользователь вводит некоторые данные
2. Формируется письмо перед отправкой, в аутлуке со всеми автоматически заполнеными полями.
3. Поля кому, копия, тема письма и тело письма формируются из БД согласно условиям и логике.
4. Реализовать вставку в тело письма автоматических скиншотов графиков и пинги сетевых устройств пока не решал, решил пока остановиться над тем что пока есть.
Конечно уверен что мой код возможно не оптимизирован как надо и не используют все нужные конструкции, возможно и собран как то грубо. Но для первой программы, думаю это нормально.
Возник вопрос, после компиляции в винде файл стал определяться как троян. Возможно это из за обращения в коде к приложению аутлук, возможно нужно права доступа как то запрашивать или ещё, что. Есть ли решение этой проблемы? Код без БД прилагаю. Спасибо.


import os
import win32com.client as win32
import sqlite3

def main():
#---------------------------------------------------------------------------------------------------------------------------------------------------------
#Приветствие и информация о программе

print('Вас приветствует программа Auto create letter outlook (ACLO)\n****************************************************************') #Вывод Текста
print('Программа автоматически формирует письмо перед отправкой по недоступным каналам связи.\nАвтоматически подставляет адреса, тему письма, текст и данные из БД.') #Вывод Текста
print('*******************************************************************************') #Вывод Текста

#---------------------------------------------------------------------------------------------------------------------------------------------------------
#Объявление переменных их переназначение и ввод значений от пользователя через input

channel_0 = input('Введите № канала (Пример: 053)\n*******************************\n')#Ввод значения в переменную channel_0
channel = str("'"+ channel_0 + "'")#Переназначение переменной channel_0 в channel
channel_2 = str(""+ channel_0 + "")#Переназначение переменной channel_0 в channel_2
#Переназначение делались для того чтобы значения были с ковычками, это необходимо для сравнивания со значениями в базе данных,
#так как там все значения в ячейках представлены в кавычках 'TEXT'
service = input('Введите номер Сервиса (1 - VPLAN 2 - Internet)\n************************************************\n')#Ввод значения в переменную service
ch_2 = 'no chanell'#Обьявление значения переменной для последующего сравнения в условиях
division =''#Обьявление пустого значения переменной, переменная будет использоваться для подставления в поле копия нужного адреса по условию ниже
adrr_3 ='no'#Обьявление значения переменной для последующего сравнения в условиях, далее в эту переменную будет перезаписываться вывод из базы данных из столбца channels_addr

#---------------------------------------------------------------------------------------------------------------------------------------------------------
#Условие записывается в переменную для дальнейшего сравнения в следующих условиях

service_2 = ''#Обьявление пустого значения переменной для сравнения в таблице channels
if service == '1':#Условие для сравнивания в таблице channels
service_2 = str("'VP LAN'")
else:
service_2 = str("'Internet'")

#---------------------------------------------------------------------------------------------------------------------------------------------------------
#Подключение к базе и запись данных из таблицы БД в переменную

title = sqlite3.connect('channels_071222.db')#База данных подключение
title_2 = title.cursor()#Функция title.cursor() записывается в переменную title2


title_2.execute('SELECT channels_title FROM channels WHERE channels_ch == '+channel+'')#Вывод данных только из столбца channels_addr таблицы channels
#где есть условие WHERE, где сравнивается введеные даные пользователя в переменной channel с данными столбца channels_ch
title_f = title_2.fetchall()#В переменую title_f устанавливается функция fetchall() которая возвращает только одну строку
for row in title_f:#Цикл for для перебора последовательности строк
title_r = (row)#Запись в переменную title_r
title_ch = (' '.join(title_r))#Запись в переменную title_ch для удаление кавычек и скобок

#---------------------------------------------------------------------------------------------------------------------------------------------------------
#Подключение к базе и запись данных из таблицы БД в переменную

consq = sqlite3.connect('channels_071222.db')#База данных подключение
cursorrObjq = consq.cursor()#Функция consq.cursor() записывается в переменную cursorrObjq


cursorrObjq.execute('SELECT channels_addr FROM channels WHERE channels_ch == '+channel+' AND channels_ser == '+service_2+'')#Вывод данных только из столбца channels_addr таблицы channels
#где есть условие WHERE, где сравнивается введеные даные пользователя в переменной channel с данными столбца channels_ch и значением столбца channels_ser с переменной service_2
rowssq = cursorrObjq.fetchall()#В переменую rowssq устанавливается функция fetchall() которая возвращает только одну строку
for row in rowssq:#Цикл for для перебора последовательности строк
adrr_2 = (row)#Запись в переменную adrr_2
adrr_3 = (' '.join(adrr_2))#Запись в переменную adrr_3 для удаление кавычек и скобок

#---------------------------------------------------------------------------------------------------------------------------------------------------------
#Условия при которых переменная division будет меняться в копии отправителей в письме

if channel_0 == '078' or '067':
division = 'www@mail.ru'
if channel_0 == '077':
division = 'eee@mail.ru'
if channel_0 == '076':
division = 'eee@mail.ru'
if channel_0 == '075':
division = 'eee@mail.ru'
if channel_0 == '074':
division = 'eee@mail.ru'
if channel_0 == '073':
division = 'eee@mail.ru'
if channel_0 == '072':
division = 'eee@mail.ru'
if channel_0 == '071':
division = 'eee@mail.ru'

#---------------------------------------------------------------------------------------------------------------------------------------------------------
#Подключение к базе и запись данных из таблицы БД в переменную

cons = sqlite3.connect('channels_071222.db')#База данных подключение
cursorrObj = cons.cursor()#Функция cons.cursor() записывается в переменную cursorObj


cursorrObj.execute('SELECT channels_ch FROM channels WHERE channels_ch == '+channel+' ')#Вывод данных только из столбца channels_ср таблицы channels
#где есть условие WHERE, где сравнивается введеные даные пользователя в переменной channel с данными столбца channels_ch
rowss = cursorrObj.fetchall()#В переменую rowss устанавливается функция fetchall() которая возвращает только одну строку
for row in rowss:#Цикл for для перебора последовательности строк
ch_1 = (row)#Запись в переменную ch_1
ch_2 = (' '.join(ch_1))#Запись в переменную ch_2 для удаление кавычек и скобок

#---------------------------------------------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------------------------------------------

con = sqlite3.connect('channels_071222.db')#База данных подключение
cursorObj = con.cursor()#Функция con.cursor() записывается в переменную cursorObj

#Главное условие для VPLAN

if service == '1' and ch_2 != 'no chanell' and adrr_3 != 'no':#Условие для ранее введенного значения в переменной service, ch_2,adrr_3 для VPLAN
cursorObj.execute('SELECT channels_addr FROM channels WHERE channels_ser == "VP LAN" AND channels_ch == '+channel+' ')#Вывод данных только из столбца channels_addr таблицы channels
#где есть условие WHERE, где сравнивается введеные даные пользователя в переменной channel с данными столбца channels_ch и значением столбца channels_ser
rows = cursorObj.fetchall()#В переменую rows устанавливается функция fetchall() которая возвращает только одну строку
for row in rows:#Цикл for для перебора последовательности строк
address = (row)#Запись в переменную address
address2 = (' '.join(address))#Запись в переменную address2 для удаление кавычек и скобок
cursorObj.execute('SELECT channels_title, channels_ser, channels_oper, channels_id, channels_speed, channels_addr, channels_scala, channels_media, channels_ip, channels_note FROM channels WHERE channels_ser == "VP LAN" AND channels_ch == '+channel+' ')#Вывод данных всего столбца из таблицы channels
#,(кроме столбца channels_ch) где есть условие WHERE, где сравнивается введеные даные пользователя в переменной channel с данными столбца channels_ch и значением столбца channels_ser
rows_all = cursorObj.fetchall()#В переменую rows_all устанавливается функция fetchall() которая возвращает только одну строку
for row in rows_all:#Цикл for для перебора последовательности строк
row_table = (row)#Запись в переменную row_table
row_table2 = (' '.join(row_table))#Запись в переменную row_table2 значений без ковычек, скобочек и запятых

#---------------------------------------------------------------------------------------------------------------------------------------------------------
#В этом блоке происходит подключение к БД и вывод из таблицы название оператора связи при выборе определенных столбцов и запись этого результата в переменную title_ch_oper

title_oper = sqlite3.connect('channels_071222.db')#База данных подключение
title_2_oper = title_oper.cursor()#Функция con.cursor() записывается в переменную title_2_oper

title_2_oper.execute('SELECT channels_oper FROM channels WHERE channels_ch == '+channel+' AND channels_ser == '+service_2+'')#Вывод данных только из столбца channels_oper таблицы channels
#где есть условие WHERE, где сравнивается введеные даные пользователя в переменной channel с данными столбца channels_ch и значением столбца channels_ser
title_f_oper = title_2_oper.fetchall()#В переменую title_f_oper устанавливается функция fetchall() которая возвращает только одну строку
for row in title_f_oper:#Цикл for для перебора последовательности строк
title_r_oper = (row)#Запись в переменную title_r_oper
title_ch_oper = (' '.join(title_r_oper))#Запись в переменную title_ch_oper для удаление кавычек и скобок

#---------------------------------------------------------------------------------------------------------------------------------------------------------
#В этом блоке происходит подключение к Outlook.Application, создание и формирование эл.письма в приложении Outlook


olApp = win32.Dispatch('Outlook.Application')#Запись в переменную olApp обращения к Outlook
olNS = olApp.GetNameSpace('MAPI')#Запись в переменную olNS обращения к API Outlook
mailItem = olApp.CreateItem(0)#Создание эл. письма в приложении Outlook
mailItem.Subject = 'Недоступность канала связи VPLAN '+ str(title_ch_oper)+ ' в '+ str(title_ch) + ' по адресу '+ str(address2)+ ' //'#Тема письма с втавляемыми переменными
mailItem.BodyFormat = 1#Формат текста тела письма(0-Неопределенный, 1-Простой, 2-HTML, 3-Rich text)
mailItem.Body = 'Добрый день.\nКоллеги, фиксируем недоступность канала связи.\nПросьба взять в работу и уточнить причины\n\n' + str(row_table2)#Сам текст тела письма
if title_ch_oper == 'Билайн':
mailItem.To = 'beeline@mail.ru'#Адреса кому
elif title_ch_oper == 'RETN':
mailItem.To = 'retn@mail.ru'#Адреса кому
else:
mailItem.To = 'no adress'#Адреса кому
mailItem.CC = '111@mail.ru; 333@mail.ru;' + str(division)#Адреса копии
mailItem.Display()#Открыть и показать заполненое письмо перед отправкой в Outlook

#---------------------------------------------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------------------------------------------
#Главное условие для Internet

elif service == '2' and ch_2 != 'no chanell' and adrr_3 != 'no':#Условие для ранее введенного значения в переменной service, ch_2,adrr_3 для Internet
cursorObj.execute('SELECT channels_addr FROM channels WHERE channels_ser == "Internet" AND channels_ch == '+channel+' ')#Вывод данных только из столбца channels_addr таблицы channels
#где есть условие WHERE, где сравнивается введеные даные пользователя в переменной channel с данными столбца channels_ch
rows = cursorObj.fetchall()#В переменую rows устанавливается функция fetchall() которая возвращает только одну строку
for row in rows:#Цикл for для перебора последовательности строк
address = (row)#Запись в переменную address
address2 = (' '.join(address))#Запись в переменную address2 для удаление кавычек и скобок
cursorObj.execute('SELECT channels_title, channels_ser, channels_oper, channels_id, channels_speed, channels_addr, channels_scala, channels_media, channels_ip, channels_note FROM channels WHERE channels_ser == "Internet" AND channels_ch == '+channel+' ')#Вывод данных всего столбца из таблицы channels
#,(кроме столбца channels_ch) где есть условие WHERE, где сравнивается введеные даные пользователя в переменной channel с данными столбца channels_ch и значением столбца channels_ser
rows_all = cursorObj.fetchall()#В переменую rows_all устанавливается функция fetchall() которая возвращает только одну строку
for row in rows_all:#Цикл for для перебора последовательности строк
row_table = (row)#Запись в переменную row_table
row_table2 = (' '.join(row_table))#Запись в переменную row_table2 значений без ковычек, скобочек и запятых
#---------------------------------------------------------------------------------------------------------------------------------------------------------
#В этом блоке происходит подключение к БД и вывод из таблицы название оператора связи при выборе определенных столбцов и запись этого результата в переменную title_ch_oper

title_oper = sqlite3.connect('channels_071222.db')#База данных подключение
title_2_oper = title_oper.cursor()#Функция con.cursor() записывается в переменную cursorObj

title_2_oper.execute('SELECT channels_oper FROM channels WHERE channels_ch == '+channel+' AND channels_ser == '+service_2+'')#Вывод данных только из столбца channels_addr таблицы channels
#где есть условие WHERE, где сравнивается введеные даные пользователя в переменной channel с данными столбца channels_ch и значением столбца channels_ser с переменной service_2
title_f_oper = title_2_oper.fetchall()#В переменую title_f_oper устанавливается функция fetchall() которая возвращает только одну строку
for row in title_f_oper:#Цикл for для перебора последовательности строк
title_r_oper = (row)#Запись в переменную title_r_oper
title_ch_oper = (' '.join(title_r_oper))#Запись в переменную title_ch_oper для удаление кавычек и скобок

#---------------------------------------------------------------------------------------------------------------------------------------------------------
#В этом блоке происходит подключение к Outlook.Application, создание и формирование эл.письма в приложении Outlook

olApp = win32.Dispatch('Outlook.Application')
olNS = olApp.GetNameSpace('MAPI')
mailItem = olApp.CreateItem(0)
mailItem.Subject = 'Недоступность канала связи Интернет '+ str(title_ch_oper)+ ' в '+ str(title_ch) + ' по адресу '+ str(address2)+ ' //'
mailItem.BodyFormat = 1
mailItem.Body = 'Добрый день.\nКоллеги, фиксируем недоступность канала связи.\nПросьба взять в работу и уточнить причины\n\n' + str(row_table2)
if title_ch_oper == 'Ростелеком':
mailItem.To = 'rostelecom@mail.ru'#Адреса кому
elif title_ch_oper == 'Энфорта':
mailItem.To = 'enforta@mail.ru'#Адреса кому
elif title_ch_oper == 'RETN':
mailItem.To = 'retn@mail.ru'#Адреса кому
elif title_ch_oper == 'ЭР-Телеком':
mailItem.To = 'enforta@mail.ru'#Адреса кому
elif title_ch_oper == 'Билайн':
mailItem.To = 'beeline@mail.ru'#Адреса кому
else:
mailItem.To = 'no adress'#Адреса кому
mailItem.CC = '111@mail.ru; 333@mail.ru;' + str(division)
mailItem.Display()

#---------------------------------------------------------------------------------------------------------------------------------------------------------
#Конец главных условий

else:
print('Нет такого канала или сервиса, попробуйте еще раз!\n\n')

#-------------------------------------------------------------------------------------------------------------------------------------------------------------
#В этом блоке вызывается функция main() которая была объеденнина вся вышенаписанная программа. Далее эта функция вызывается в бесконечном цикле с условием продолжения
#или остановки программы

stop = ''
while True:
main()
stop = input("Для выхода нажмите 's' и ENTER для продолжения нажмите ENTER\n")

if stop == 's':
break
if stop == 'S':
break
else:
continue

#-------------------------------------------------------------------------------------------------------------------------------------------------------------

Отредактировано joneb1983 (Дек. 8, 2022 13:14:18)

Офлайн

#5 Дек. 8, 2022 22:24:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Возможно ли это реализовать на Python?

joneb1983
Возник вопрос, после компиляции в винде файл стал определяться как троян.
Поищи в антивирусах папку для исключений. Там просто в исключения добавляешь папку, которую антивирус не проверяет, а потом в эту папку кладёшь свои программы, которые нужно исключить из проверки. Типа такого. Оно во всех антивирусах есть.

joneb1983
Посидел немного и решил вникнуть в конструкцию языка и необходимую мне программу.
Главное, что ты её написал от и до. Вот её не было, была только пустота, и вот она из пустоты появилась и работает после этого, приносит какую-то пользу тебе. Раньше её не было, теперь она есть.

Это вот важная процедура, которая выполняется постоянно, которой многие программисты не обладают. Даже могут научиться всяким разным технологиям, а своих программ у них не появляется годами, десятилетиями даже. Они ждут, когда им закажут программу и скажут им, что им писать. А ты же при создании своих программ привыкаешь это делать, уровень их растёт тоже постоянно. И вот у тебя уже появляются программы, которые лучше, чем у других каких-нибудь даже не программистов, а целых компаний.

Дальше у тебя робот-пылесос, например, из магазина. Обычная бытовая вещь. Ты смотришь, что он как-то слабо убирает комнату, тупые движения. Берёшь и делаешь программу, которая ему наращивает мозги, и через некоторое время у тебя всё просто становится чисто во всём доме. А на то, что эта твоя программа, залитая в этот робот-пылесос, лучше раз в сто, чем та программа, которая в тысяче таких роботах-пылесосах стоит изначально, ты уже даже внимания не обращаешь, потому что привык делать программы лучше существующих. Тебе всё равно, что они лучше, твои программы просто делают больше всего, чем те, которые сделали какие-то программисты на зарплатах в Samsung там или где-то в подобных компаниях (не мелких, короче).

joneb1983
Программа работает.
Важно получать плюсы от своей программы. Понимаешь, когда делаешь учебные программы, ты от них плюсов не получаешь. Ну, ты получаешь от них плюсы в виде опыта там, экспериментов всяких, новых мелких знаний деталей там каких-то, но ты эти плюсы не чувствуешь. Они есть, но их не видно. Другое дело, когда твоя программа работает, а ты чай пьёшь в это время, и ты чувствуешь, что раньше ты бы не пил этот чай, потому что программы раньше не было этой. И без тебя бы она не появилась бы никогда.

То есть ты начинаешь с пустоты, потом что-то появляется и оно генерирует какую-то пользу всё время. Сначала ты одну такую делаешь, потом две, потом три, потом у тебя их там сто. Стоят какие-то сто штук и приносят какие-то сто польз. Так ты растёшь, так ты становишься создателем.

Поэтому я и говорю, что неважно, что у тебя там на начальных этапах программа слабая какая-то. Главное, что ты её написал и это дало тебе знание о том, как из пустоты что-то создать, а оно потом будет фурычить и влиять на тебя в каком-то положительном плане. Вот это инженерия.


tags: make program



Отредактировано py.user.next (Дек. 8, 2022 22:57:12)

Офлайн

#6 Дек. 8, 2022 22:49:40

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Возможно ли это реализовать на Python?

Теперь по коду и обучению.

joneb1983
Конечно уверен что мой код возможно не оптимизирован как надо
Да конечно. Я сам такие же писал, когда начинал. Я и комментарии пробовал писать и над кодом, и под кодом, и в три строчки, и в десять строк, пробовал всякое. Потом смотрел во времени, какой от этого эффект. Так оно постепенно вырабатывается в оптимальное. Где-то потом нужно и десять строк записать, а где-то вообще ноль. Также изучал разные способы комментариев у других программистов в разных проектах. Просто берёшь чужие программы, ничего в них не понимаешь, но читаешь комментарии в них, чтобы чисто комментарии посмотреть. Читал тоже про комментарии разные материалы. Я бы тебе рассказал, как писать комментарии, если бы можно было это рассказать за одну секунду. Но это целая область. Как бы это не важно всё, но несмотря на это, там всё равно теории дофига всякой.

Потом приходишь к тому, что лучший комментарий - это тот, которого нет, который не нужен вообще, без которого всё и так понятно. А это случается тогда, когда комментарии встроены в сам код, сам код является комментарием самого себя. Естественно, ты не придёшь к этому сходу. Это нужно очень много кодов написать.

Также у тебя код поделён на отсеки такие. Это, конечно, всё замечательно, код нужно делить постоянно, но вот эти отсеки тоже нужно делить на отсеки, а потом те отсеки тоже нужно делить на отсеки. И так таких уровней деления может быть, ну… десять например (хотя их больше, они как бы бесконечны). И вот когда ты захочешь поделить отсеки на отсеки, тогда ты уже не сможешь писать где какой отсек начинается, а где какой отсек заканчивается. Если их будет уровней десять, там никакие комментарии уже не помогут. Ты просто будешь читать собственный код и не будешь понимать, где какой отсек, где какой подотсек, где какой подотсек подотсека и так далее.

Вот для этого существует метод разработки сверху вниз. С ним можно бесконечно так разбивать код. Код на отсеки, отсеки на подотсеки, подотсеки на подподотсеки, подподотсеки на подподподотсеки, - ну, бесконечно, то есть.

Это то, что тебе придётся изучить на следующем этапе, после того как ты попишешь программы вот в таком стиле, как у тебя сейчас. Попиши простые программы, чтобы привыкнуть к этой процедуре и набрать понимание, что такое из ничего сделать что-то.

По поводу комментариев я тебя скажу так: сначала ты их пишешь в коде, чтобы просто понять, что нужно писать и что не нужно писать. Если оно тебе потом не пригождается, то его не нужно писать изначально. Но это можно понять лишь потом, когда оно тебе через какое-то время не пригодилось. Поэтому это надо всё пройти. А вообще, вот эта вся информация, которую ты пишешь в комментариях, она должна писаться отдельно, в документации к программе. Есть внутренняя документация программы, есть внешняя документация программы. Вот внутренняя документация она для того и нужна, чтобы ты все нюансы писал туда, а не в код. А внешняя документация нужна, чтобы внешний пользователь программы мог полностью использовать программу на всю катушку, не читая содержимое исходников этой программы вообще.


tags: comment documentation up to down



Отредактировано py.user.next (Дек. 8, 2022 22:56:12)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version