Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from text_to_num import text2num
- from collections import Counter
- from tkinter import *
- window = Tk()
- window.title("Добро пожаловать в приложение PythonRu")
- window.geometry('700x750')
- lbl = Label(window, text="Введите число:")
- lbl.grid(column=0, row=0)
- txt = Entry(window, width=10)
- txt.grid(column=1, row=0)
- # Перевести на французский!!!
- # ---------------------
- g_lang = "en"
- # ---------------------
- # Не смотри на эту функцию - она большой костыль, потому что мне было лень думать
- # А вообще эта функция фильтрует слова, которые не подхоят text_to_num
- # Благодаря этой функции эта прога подходит ко всем языкам.
- def func_find_word_num(list_words):
- list_words_checker = []
- for word in list_words:
- # Костыль для английского языка. Почему - то эта библиотека не понимает слово million итд, но вот слово
- # thousand, например, она может понять. Странно :ъ
- if 'illion' in word and g_lang == "en":
- list_words_checker.append(word)
- continue
- try:
- text2num(word, lang=g_lang)
- except:
- continue
- else:
- list_words_checker.append(word)
- return list_words_checker
- # Эта функция переводит арабские цифры в римские.
- def func_check_io(n):
- result = ''
- for arabic, roman in zip((1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1),
- 'M CM D CD C XC L XL X IX V IV I'.split()):
- result += n // arabic * roman
- n %= arabic
- return result
- # Эта функция просто считает сколько раз то или иное слово встретилось в списке
- def func_count_numbers_in_list(list_words):
- return dict(Counter(list_words))
- # Эта функция просто считает сколько раз повторилось слово, которое не должно было повторяться.
- def func_count_repeat_numbers_in_list(list_words):
- list_words_repeat = []
- for index in range(1, len(list_words)):
- if list_words[index - 1] == list_words[index]:
- list_words_repeat.append(list_words[index])
- else:
- continue
- return dict(Counter(list_words_repeat))
- # Эта функция генерирует список слов, которые являются цифрой так или иначе.
- def func_split_str_numbers(line):
- list_words = line.split()
- list_word_result = []
- for word in list_words:
- for word_check in set(func_find_word_num(list_words)):
- if word == word_check:
- list_word_result.append(word)
- else:
- continue
- return list_word_result
- def clear():
- list_ = window.grid_slaves()
- for l in list_:
- if l is txt or l is btn:
- continue
- l.destroy()
- # Главная функция
- def main():
- clear()
- window.title("Добро пожаловать в приложение PythonRu")
- window.geometry('700x750')
- lbl = Label(window, text="Введите число:")
- lbl.grid(column=0, row=0)
- # txt = Entry(window, width=10)
- # txt.grid(column=1, row=0)
- # while True:
- # number = input('\nВведите число: ').lower()
- number = txt.get().lower()
- # if number == 'stop':
- # break
- try:
- lbl1 = Label(window, text="Arabic = " +
- str(text2num(number, lang=g_lang)))
- lbl1.grid(column=1, row=1)
- lbl2 = Label(window, text="Roman = " +
- str(func_check_io(text2num(number, lang=g_lang))))
- lbl2.grid(column=1, row=2)
- # lbl1 += str(text2num(number, lang=g_lang))
- # lbl2 += str(func_check_io(text2num(number, lang=g_lang)))
- except Exception as e:
- length = len(str(repr(e)))
- print('-' * length, '\nОшибка!\n')
- dict_repeat_num = func_count_repeat_numbers_in_list(func_split_str_numbers(number))
- dict_num = func_count_numbers_in_list(func_split_str_numbers(number))
- set_incorrect_words = set(number.split())
- set_repeat_num = set(dict_num.keys())
- set_incorrect_words -= set_repeat_num
- def fabric(name: str) -> '(x: Any)':
- return lambda row, key_, dict_repeat_num_, : Label(window, text=name.
- format(key_, dict_repeat_num_[key_])).grid(column=1,
- row=row + 2)
- label = fabric('* {} повторяется {} лишний(их) раз')
- for offset, key in enumerate(dict_repeat_num):
- label(offset, key, dict_repeat_num)
- if set_incorrect_words != set():
- lbl4 = Label(window, text=f'Некорректные слова:{set_incorrect_words}')
- lbl4.grid(column=1, row=3)
- lbl5 = Label(window, text=f'Подробнее: {repr(e)}')
- lbl5.grid(column=1, row=4)
- # print()
- # Точка входа в программу
- if __name__ == '__main__':
- btn = Button(window, text="Конвертировать!", command=main)
- btn.grid(column=2, row=0)
- window.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement