Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from text_to_num import text2num
- from collections import Counter
- # Перевести на французский!!!
- # ---------------------
- 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 main():
- while True:
- number = input('\nВведите число: ').lower()
- if number == 'stop':
- break
- try:
- print('Arabic =', text2num(number, lang=g_lang))
- print('Roman =', 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
- for key in dict_repeat_num:
- print('* {} повторяется {} лишний(их) раз'.format(key, dict_repeat_num[key]))
- if set_incorrect_words != set():
- print('Некорректные слова:', set_incorrect_words)
- print('\nПодробнее:\n', repr(e), '\n', '-' * length)
- # Точка входа в программу
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement