task2.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. from typing import List, Union, Dict
  2. def check_user_response(user_response: str) -> None:
  3. """ Проверяем ответ пользователя """
  4. try:
  5. list_numbers = user_response.split(', ')
  6. [int(number) for number in list_numbers]
  7. except ValueError:
  8. message = 'Проверьте формат записи. Введенные значения должны являться числами.'
  9. raise ValueError(message)
  10. def get_user_response() -> str:
  11. """ Получаем ответ пользователя """
  12. message = 'Укажите массив чисел\nФормат: -3, 2, 3, 4, 5, 6, 7, 7, 8\n'
  13. response = input(message)
  14. check_user_response(response)
  15. return response
  16. def format_user_response(user_response: str) -> List[int]:
  17. """ Форматируем ответ пользователя в нужный вид """
  18. list_numbers = user_response.split(', ')
  19. list_numbers = list(map(int, list_numbers))
  20. return list_numbers
  21. def assign_numbers_to_groups(
  22. list_numbers: List[int]
  23. ) -> List[List[Union[str, int]]]:
  24. """ Распределяем номера по группам """
  25. set_of_numbers = []
  26. alphabet = list('abcdefghijklmnopqrstuvwxyz')
  27. for index, number in enumerate(list_numbers):
  28. if not index:
  29. set_of_numbers.append([alphabet[-1], index, number])
  30. continue
  31. previous_number = list_numbers[index-1]
  32. if previous_number + 1 == number:
  33. set_of_numbers.append([alphabet[-1], index, number])
  34. else:
  35. alphabet.pop(-1)
  36. set_of_numbers.append([alphabet[-1], index, number])
  37. return set_of_numbers
  38. def make_numbers_look_right(
  39. numbers_by_groups: List[List[Union[str, int]]]
  40. ) -> Dict[str, str]:
  41. """ Приводим числа в нужный вид """
  42. result = {}
  43. for element in numbers_by_groups:
  44. designation, index, number = element
  45. if result.get(designation):
  46. result[designation] += f'{index} '
  47. else:
  48. result[designation] = f'{index} '
  49. return result
  50. def get_result(number_indexes: Dict[str, str]) -> str:
  51. """ Получаем результат """
  52. set_of_indexes = {}
  53. for key in number_indexes:
  54. indexes = list(map(int, number_indexes[key].split()))
  55. quantity = len(indexes)
  56. set_of_indexes[quantity] = indexes
  57. m = max(set_of_indexes.keys())
  58. start, end = set_of_indexes[m][0], set_of_indexes[m][-1]
  59. result = f'{start}, {end}'
  60. return result
  61. # ВЫШЕ ОПРЕДЕЛЕНИЕ ФУНКЦИЙ
  62. user_response = get_user_response()
  63. list_numbers = format_user_response(user_response)
  64. numbers_by_groups = assign_numbers_to_groups(list_numbers)
  65. number_indexes = make_numbers_look_right(numbers_by_groups)
  66. result = get_result(number_indexes)
  67. print('Result: ', result)