@Evgenzsin

Стоит ли прикрепить к резюме свой проект, или это быдло код?

Написал, что называется "для себя", программу, которая открывает текстовой файл (на английском), разбивает его на предложения (велосипед), предложения на слова, создает окно (Tkinter), создает кнопки по количеству слов в предложении, при нажатии на кнопку (подключается к api-яндекс словаря) выводит на экран варианты перевода этого слова.
Сейчас ищу работу стажером, стоит ли показывать такой код потенциальному работодателю?
spoiler
file_name = '1textfile.txt'
init_str = open(file_name, 'r').read()
sens_str = []
sen_str = init_str[:2]
end_sen = ['.', '?', '!', '…'] 
# list состоящий из строк-предложений
for i in range(2, len(init_str)):
    
    # Если большая буква и пробел с .!? ИЛИ не маленькая буква и \n
    if (init_str[i].istitle() and init_str[i-2] in end_sen) or (not ('a' <= init_str[i] <= 'z') and init_str[i-1]=='\n'): # Разделение по \n, и если следующая строка НЕ начинается с строчной буквы запись предложения
        sens_str.append(sen_str)
        sen_str = init_str[i]
        
    # Если символ последний записываем предложение
    elif i==len(init_str)-1:
        sen_str += init_str[i]
        sens_str.append(sen_str)
        
    # Иначе дописываем символ в предложение-строку
    else:
        sen_str += init_str[i]

sens_list = [] # list всех предложений состоящих из list
# list состоящий из list-предложений
for sen_str in sens_str:
    sen_list = [] # Предложение list состоящее из слов и символов
    new = '' # Для добавления новых символов
    apostrophe = False 
    
    # Первый символ   
    if sen_str[0].isalpha():
        word = True
    else:
        word = False
        
    # Перебор символов для разделения str-предложений на слова и символы
    rang = range(0, len(sen_str))
    for i in rang:
        
        # Апостроф
        if sen_str[i]=="'" and (i-1 in rang and i+1 in rang):
            if sen_str[i-1].isalpha() and sen_str[i+1].isalpha():
                apostrophe = True
        
        # Если буква или апостроф (в слове)
        if sen_str[i].isalpha() or apostrophe:
            if word:
                new += sen_str[i]
                if apostrophe:
                    apostrophe = False
            else:
                sen_list.append(new)
                new = sen_str[i]
                word = True
                
        # Если символ
        else:
            if word:
                sen_list.append(new)
                new = sen_str[i]
                word = False
            else:
                new += sen_str[i]
                
    # Последний символ (в тч буква)
    sen_list.append(new)

    # В list предложений добавляем list предложения разбитого по словам и символам     
    sens_list.append(sen_list)


# Парсер яндекс переводчика по офицальному api
import re 
from tkinter import *
import requests

class Application(Frame):

    '''Начинаем с первого (s=0) предложения'''
    def __init__(self, master):
        super(Application, self).__init__(master)  
        self.grid()
        s = 0
        sen_list = sens_list[s]
        self.first = False # Для функции translate
        self.init_buttons(s, sen_list)

    def init_buttons(self, s, sen_list):
        
        # Распаковка словаря из файла в список
        slovar = open('slovar.txt', 'r').read()
        slovar = re.split(r' - |\n', slovar) # 2-й вариант разделения slovar.replace('\n', ' - ').split(' - ')
        
        mslovar = open('mslovar.txt', 'r').read()
        mslovar = re.split(r' - |\n', mslovar)

        # Переход к предыдущему предложению
        if s!=0:
            self.nex = Button(self, text = "PREV", command = lambda: self.prev(s))
            self.nex.grid(row = 0, column = 0)

        # Переход к следующему предложению
        if s!=len(sens_list)-1:
            self.nex = Button(self, text = "NEXT", command = lambda: self.nexet(s))
            self.nex.grid(row = 0, column = 1)
        
        # Слова из предложения  
        for i, word in enumerate(sen_list):
            i = i + 2 # Две кнопки в начале (Prev Next)
            word = word.lower()
            
            # Неизвестное слово
            if word[0].isalpha() and word not in mslovar and word not in slovar: # Если элемент списка частей предложения именно слово И оно не в мсловаре и словаре
                self.bttn = Button(self)
                self.bttn["text"] = word
                self.bttn.bind("<Button-1>", lambda event, i=i, word_eng = self.bttn['text']: self.translate(word_eng, i))
                self.bttn.grid(row = 0, column = i)
                
            # Слово из словаря, но его можно переопределить
            elif word in slovar:
                self.bttn = Button(self, text = word + ' (' + slovar[slovar.index(word)+1] + ')')
                self.bttn.bind("<Button-1>", lambda event, i=i, word = word: self.redicted_slovar(word, i))
                self.bttn.grid(row = 0, column = i)
                
            # Слово из мсловаря или символ
            else:
                self.bttn = Button(self, text = word) #+ ' (' + slovar[slovar.index(word)+1] + ')')
                self.bttn.bind("<Button-1>", lambda event, i=i, word = word: self.redicted_mslovar(word, i))
                self.bttn.grid(row = 0, column = i)
                #self.bttn = Label(self, text = word).grid(row = 0, column = i)
    
    def translate(self, word_eng, i):
        r = requests.post(url, data={'key': key, 'text': word_eng, 'lang': lang, 'flags': 4})
        res = r.json()
        wslovar = open('slovar.txt', 'a').write('\n' + word_eng + ' - '); #wslovar.close()
        self.first = True # Значит слово первый вариант перевода
        t = 0 # Для позиционирования варианта перевода под словом

        # Кнопки на каждый вариант перевода
        for d in range(len(res['def'])):
            for v in range(len(res['def'][d]['tr'])): # Это варианты сущ, гл, прил 
                t += 1
                word_rus = res['def'][d]['tr'][v]['text'] # Это количество вариантов перевода для каждой части речи
                self.bttn = Button(self, text = word_rus, command = lambda word_rus = word_rus: self.dicted(self.first, word_rus))
                self.bttn.grid(row = t, column = i)
                
        # Кнопка для добавления слова в mslovar 
        self.bttn = Button(self, text = 'msl', command = lambda: self.dicted_mslovar(word_eng)).grid(row = t+1, column = i)
    
    # Запись в мой словарь и удаление из словаря 
    def dicted_mslovar(self, word_eng):
        rslovar = open('slovar.txt', 'r').read()
        i = rslovar.find('\n' + word_eng)
        wslovar = open('slovar.txt', 'w').write(rslovar[:i])
        
        wmslovar = open('mslovar.txt', 'a').write(rslovar[i:])
            
    # Запись в словарь   
    def dicted(self, first, word_rus):
        if first:
            self.first = False
        else:
            word_rus = '/' + word_rus
        wslovar = open('slovar.txt', 'a')
        wslovar.write(word_rus)
        wslovar.close()

    def prev(self, s):
        
        # Это удаление всех виджетов, которые есть на рамке
        for widget in app.winfo_children():
            widget.destroy()
            
        s -= 1 # Переход к следующему предложению
        sen_list = sens_list[s]
        return self.init_buttons(s, sen_list)

    def nexet(self, s):
        
        # Это удаление всех виджетов, которые есть на рамке
        for widget in app.winfo_children():
            widget.destroy()
            
        s += 1 # Переход к следующему предложению
        sen_list = sens_list[s]
        return self.init_buttons(s, sen_list)

    # Удаление из словаря и переход к translate
    def redicted_slovar(self, word_eng, ic):
        
        rslovar = open('slovar.txt', 'r').read()
        i = rslovar.find(word_eng) # Здесь слово начинается
        if i in range(1, len(rslovar)): i = i-1 # Если оно не первое и есть \n перед ним тогда его тоже захватываем
        y = rslovar.find('\n', i+1) # Здесь начинается следующее слово
        if y == -1: y = len(rslovar) # Если следующего нет (-1 это исключение), то концом предыдущего слова считаем конец всего списка
        
        nslovar = rslovar[:i] + rslovar[y:] # Переписываем весь словарь без переопределяемого слова
        wslovar = open('slovar.txt', 'w')
        wslovar.write(nslovar)
        wslovar.close()
        
        self.translate(word_eng, ic)

    # Удаление из мсловаря и переход к translate
    def redicted_mslovar(self, word_eng, ic):
        
        rmslovar = open('mslovar.txt', 'r').read()
        i = rmslovar.find(word_eng) # Здесь слово начинается
        if i in range(1, len(rmslovar)): i = i-1 # Если оно не первое и есть \n перед ним тогда его тоже захватываем
        y = rmslovar.find('\n', i+1) # Здесь начинается следующее слово
        if y == -1: y = len(rmslovar) # Если следующего нет (-1 это исключение), то концом предыдущего слова считаем конец всего списка
        
        nmslovar = rmslovar[:i] + rmslovar[y:] # Переписываем весь словарь без переопределяемого слова
        wmslovar = open('mslovar.txt', 'w')
        wmslovar.write(nmslovar)
        wmslovar.close()
        
        self.translate(word_eng, ic)       

root = Tk()
root.title("Init Text Buttoned")
root.geometry("900x300")
app = Application(root)
root.mainloop()

  • Вопрос задан
  • 697 просмотров
Пригласить эксперта
Ответы на вопрос 3
sim3x
@sim3x
Нужно показывать код, которым вы гордитесь

Код к резюме никогда не прикрепляют, максимум линки, лучше один линк на профайл на гитхаб
Ответ написан
@alex-t
Прогр. в команде rco.ru
Представляя код на питоне надо привести его к стандарту Pep 8 (есть проверяющая программа, ну а в среде вообще автоматом подчеркивает несоответствия), по данному коду минут на 5 работы. Еще хорошо бы стандарт документации поддержать - Pep 257.
Ответ написан
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Ну, я бы не стал такое показывать, на мой взгляд слабенько как-то. Если нет ничего лучше, то лишним не будет. Быдлокодом не назвал бы, вполне читаемо, код моего преподавателя по ООП в 1000 раз хуже. Вам нужно избегать транслита в именовании и использовать модульность.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы