Advertisement
oleh_korkh

Untitled

Jan 5th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.12 KB | None | 0 0
  1. """ Скидаючи весь вміст файлу в один рядок, ми втрачаємо можливість
  2. виводити на екран інформацію щодо номера рядка в якому знайдено помилку.
  3. Додаткові дужки також не є необхідними.
  4. """
  5. with open("input.txt") as file:
  6.     input_txt = (file.read())
  7.  
  8. with open("words.txt") as file:
  9.     words = (file.read())
  10.  
  11. """ У наступному рядку вказується два символьні рядки, які йдуть
  12. один за одним.
  13.  
  14.    '......'"......."
  15.  
  16. Така форма запису еквівалентна їх конкатенації і в даному випадку не має
  17. сенсу. Всі символи можна легко вказати в рамках єдиного рядка.
  18. """
  19. punctuation = '`~!@#$%^&*()_+={}[];'"|<>,./?\\\:"
  20. temp = ""
  21. for i in input_txt:
  22.     if i in punctuation:
  23.         """ Даний блок не має сенсу, логічніше було б писати
  24.  
  25.            if i == "-":
  26.                temp += " "
  27.            elif i not in punctuation:
  28.                temp += i
  29.        """
  30.         continue
  31.     elif i == "-":
  32.         temp += " "
  33.     else:
  34.         temp += i
  35.  
  36. work_text = temp.lower().split()
  37. words_txt = words.split()
  38.  
  39. vowel_drop = "aeiouy"
  40. hw_drop = "hw"
  41. one_weight = "bfpv"
  42. two_weight = "cgjkqsxz"
  43. three_weight = "dt"
  44. four_weight  = "l"
  45. five_weight = "mn"
  46. six_weight = "r"
  47.  
  48. def hw_remove(word):
  49.     """ Тіло даної функції могло б виглядати так:
  50.  
  51.    return word[0], word[1:].replace('h', '').replace('w', '')
  52.    """
  53.     list_word = list(word)
  54.     for char in list_word[1:]:
  55.         if char in hw_drop:
  56.             list_word.remove(char)
  57.     return word[0], "".join(list_word)
  58.  
  59.  
  60. def test_soundex(word):
  61.     temp = ""
  62.     for char in word:
  63.         if char in one_weight:
  64.             temp += "1"
  65.         elif char in two_weight:
  66.             temp += "2"
  67.         elif char in three_weight:
  68.             temp += "3"
  69.         elif char in four_weight:
  70.             temp += "4"
  71.         elif char in five_weight:
  72.             temp += "5"
  73.         elif char in six_weight:
  74.             temp += "6"
  75.         else:
  76.             temp += char
  77.     return temp
  78.  
  79.  
  80. def double_remove(word):
  81.     list_word = list(word)
  82.     temp = ""
  83.     for i,char in enumerate(list_word):
  84.         try:
  85.             if char == list_word[i+1]:
  86.                 """ Не можна знаходячись в середині цикла for
  87.                модифікувати список по якому він працює. В даному випадку
  88.                можна було б в процесі проходження по циклу, формувати
  89.                нову змінну, вже буз дублікатів.
  90.                """
  91.                 list_word.pop(i)
  92.         except IndexError:
  93.             break
  94.     return "".join(list_word)
  95.  
  96.  
  97. def vowel_remove(first_leter,word):
  98.     temp = []
  99.     list_word = list(word)
  100.     temp = list_word[1:]
  101.     code = ""
  102.     """ Якось забагато циклів. І replace тут був би краще за remove.
  103.    """
  104.     for char in list_word[1:]:
  105.         if char in vowel_drop:
  106.             temp.remove(char)
  107.     code = first_leter.upper() + "".join(temp)
  108.     if len(code) < 4:
  109.         code = code + "0" * (4 - len(code))
  110.     else:
  111.         code = code[:4]
  112.     return code
  113.  
  114. 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']
  115.  
  116. tests_code = []
  117. for i in tests:
  118.     word = i.lower()
  119.     first_leter, return_word = hw_remove(word)
  120.     sec_return_word = test_soundex(return_word)
  121.     third_return_word = double_remove(sec_return_word)
  122.     forth_return_word = vowel_remove(first_leter,third_return_word)
  123.     tests_code.append([i,forth_return_word])
  124.  
  125. print(tests_code)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement