Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """ Скидаючи весь вміст файлу в один рядок, ми втрачаємо можливість
- виводити на екран інформацію щодо номера рядка в якому знайдено помилку.
- Додаткові дужки також не є необхідними.
- """
- with open("input.txt") as file:
- input_txt = (file.read())
- with open("words.txt") as file:
- words = (file.read())
- """ У наступному рядку вказується два символьні рядки, які йдуть
- один за одним.
- '......'"......."
- Така форма запису еквівалентна їх конкатенації і в даному випадку не має
- сенсу. Всі символи можна легко вказати в рамках єдиного рядка.
- """
- punctuation = '`~!@#$%^&*()_+={}[];'"|<>,./?\\\:"
- temp = ""
- for i in input_txt:
- if i in punctuation:
- """ Даний блок не має сенсу, логічніше було б писати
- if i == "-":
- temp += " "
- elif i not in punctuation:
- temp += i
- """
- continue
- elif i == "-":
- temp += " "
- else:
- temp += i
- work_text = temp.lower().split()
- words_txt = words.split()
- vowel_drop = "aeiouy"
- hw_drop = "hw"
- one_weight = "bfpv"
- two_weight = "cgjkqsxz"
- three_weight = "dt"
- four_weight = "l"
- five_weight = "mn"
- six_weight = "r"
- def hw_remove(word):
- """ Тіло даної функції могло б виглядати так:
- return word[0], word[1:].replace('h', '').replace('w', '')
- """
- list_word = list(word)
- for char in list_word[1:]:
- if char in hw_drop:
- list_word.remove(char)
- return word[0], "".join(list_word)
- def test_soundex(word):
- temp = ""
- for char in word:
- if char in one_weight:
- temp += "1"
- elif char in two_weight:
- temp += "2"
- elif char in three_weight:
- temp += "3"
- elif char in four_weight:
- temp += "4"
- elif char in five_weight:
- temp += "5"
- elif char in six_weight:
- temp += "6"
- else:
- temp += char
- return temp
- def double_remove(word):
- list_word = list(word)
- temp = ""
- for i,char in enumerate(list_word):
- try:
- if char == list_word[i+1]:
- """ Не можна знаходячись в середині цикла for
- модифікувати список по якому він працює. В даному випадку
- можна було б в процесі проходження по циклу, формувати
- нову змінну, вже буз дублікатів.
- """
- list_word.pop(i)
- except IndexError:
- break
- return "".join(list_word)
- def vowel_remove(first_leter,word):
- temp = []
- list_word = list(word)
- temp = list_word[1:]
- code = ""
- """ Якось забагато циклів. І replace тут був би краще за remove.
- """
- for char in list_word[1:]:
- if char in vowel_drop:
- temp.remove(char)
- code = first_leter.upper() + "".join(temp)
- if len(code) < 4:
- code = code + "0" * (4 - len(code))
- else:
- code = code[:4]
- return code
- tests = ['Robert','Rupert','Rubin','Ashcraft','Ashcroft','Tymczak','Pfister','Honeyman','Burroughs','Burrows','Ciondecks','Ellery','Euler','Example','Gauss','Ghosh','Heilbronn','Hilbert','Kant','Knuth','Ladd','Lissajous','Lloyd','Lukasiewicz', 'OHara','Soundex','Wheaton']
- tests_code = []
- for i in tests:
- word = i.lower()
- first_leter, return_word = hw_remove(word)
- sec_return_word = test_soundex(return_word)
- third_return_word = double_remove(sec_return_word)
- forth_return_word = vowel_remove(first_leter,third_return_word)
- tests_code.append([i,forth_return_word])
- print(tests_code)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement