E
E
Evgenzsin2017-06-22 00:13:08
Python
Evgenzsin, 2017-06-22 00:13:08

Should I attach my project to the resume, or is it redneck code?

I wrote what is called "for myself", a program that opens a text file (in English), splits it into sentences (bicycle), sentences into words, creates a window (Tkinter), creates buttons by the number of words in the sentence, when you click on the button (connects to api-yandex dictionary) displays translation options for this word.
Now I'm looking for a job as an intern, is it worth showing such a code to a potential employer?

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()

Answer the question

In order to leave comments, you need to log in

3 answer(s)
S
sim3x, 2017-06-22
@sim3x

You need to show the code that you are proud of.
The code is never attached to the resume, maximum links, preferably one link per profile on github

A
Alexander Titov, 2017-06-22
@alex-t

When presenting the code in python, you need to bring it to the Pep 8 standard (there is a checking program, but in general it automatically highlights inconsistencies in the environment), using this code for 5 minutes of work. It would also be nice to support the documentation standard - Pep 257 .

D
devalone, 2017-06-22
@devalone

Well, I would not show this, in my opinion weakly somehow. If there is nothing better, then it will not be superfluous. I would not call it bydlokod, quite readable, the code of my OOP teacher is 1000 times worse. You need to avoid transliteration in naming and use modularity.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question