Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.78 KB | None | 0 0
  1. #Переменные
  2. #digits_list - список чисел
  3. #index - индекс
  4. #flag_uncertainty - флаг для просмотра последовательности на неопределенность
  5. #flag_up_eq_sec, flag_down_eq_sec - проверка на возрастание или убывание\
  6. #повторяющихся элементов последовательности
  7. #up_sec, down_sec - переменные считающие количество элементов последовательности
  8. #i, k - счетчики
  9. #first, last – первый и последний элементы последовательности, если\
  10. #присутствуют повторяющиеся элементы. Бывает, что они равны.
  11. #count_up_sec, count_down_sec - переменные для нахождения количества последовательностей в определенном направлении
  12. #цикл, находящий количество возрастаний и убываний последовательности
  13. ##########################################################################
  14.  
  15. def dop_fuction():
  16. global digits_list
  17. digits_list.pop()
  18. i = 0
  19. global count_up_seq
  20. count_up_seq = 0
  21. while i < len(digits_list) - 1:
  22. first = digits_list[i]
  23. k = 0
  24. while i < len(digits_list) - 1 and digits_list[i+1] >= digits_list[i]:
  25. k = 1
  26. i += 1
  27. last = digits_list[i]
  28. i += 1
  29. if k != 0 and first != last:
  30. count_up_seq += 1
  31. i = 0
  32. global count_down_seq
  33. count_down_seq = 0
  34. while i < len(digits_list) - 1:
  35. first = digits_list[i]
  36. k = 0
  37. while i < len(digits_list) - 1 and digits_list[i+1] <= digits_list[i]:
  38. k = 1
  39. i += 1
  40. last = digits_list[i]
  41. i += 1
  42. if k != 0 and first != last:
  43. count_down_seq += 1
  44. digits_list += [0]
  45.  
  46. ##########################################################################
  47. #проверка на 0
  48. def input_0():
  49. if len(digits_list) == 1:
  50. exit()
  51.  
  52. #главный цикл для подсчета количества возрастающих и убывающих элементов
  53. def main_function():
  54. index = 0
  55. # flag_uncertainty для проверки на 5 5 5 0 (неопределенность)
  56. flag_uncertainty = 0
  57. up_seq = 0
  58. down_seq = 0
  59. while True:
  60. #обнуление флагов для просмотра последовательности повторяющихся элементов
  61. flag_up_eq_sec = 0
  62. flag_down_eq_sec = 0
  63. #вывод с обходом ошибки при делении на 0
  64. if index == len(digits_list) - 2:
  65. if count_up_seq > 0:
  66. print('Возрастание','{:.3f}'.format(up_seq / count_up_seq),end=' ')
  67. else:
  68. print('Возрастание','{:.3f}'.format(up_seq),end=' ')
  69. if count_down_seq > 0:
  70. print('Убывание','{:.3f}'.format(down_seq / count_down_seq))
  71. else:
  72. print('Убывание','{:.3f}'.format(down_seq))
  73. exit()
  74. #возрастание последовательности
  75. if digits_list[index+1] > digits_list[index]:
  76. flag_up_eq_sec = 1
  77. while digits_list[index+1] > digits_list[index]:
  78. if digits_list[index+1] == 0:
  79. break
  80. else:
  81. flag_uncertainty = 1
  82. up_seq += 1
  83. index += 1
  84. #убывание последовательности
  85. elif digits_list[index+1] < digits_list[index]:
  86. flag_down_eq_sec = 1
  87. while digits_list[index+1] < digits_list[index]:
  88. if digits_list[index+1] == 0:
  89. break
  90. else:
  91. flag_uncertainty = 1
  92. down_seq += 1
  93. index += 1
  94. #повторяющиеся элементы последовательности
  95. if digits_list[index+1] == digits_list[index]:
  96. equal_digits = 0
  97. while digits_list[index+1] == digits_list[index]:
  98. equal_digits += 1
  99. index += 1
  100. #проверка на неопределенность
  101. if digits_list[index+1] == 0 and flag_uncertainty == 0:
  102. print('Возрастание','{:.3f}'.format(0),end=' ')
  103. print('Убывание','{:.3f}'.format(0))
  104. exit()
  105. #если последовательность начинается с повторяющихся элементов
  106. if flag_up_eq_sec == 0 and flag_down_eq_sec == 0:
  107. if digits_list[index+1] > digits_list[index]:
  108. up_seq += equal_digits
  109. flag_uncertainty = 1
  110. elif digits_list[index+1]<digits_list[index]:
  111. down_seq += equal_digits
  112. flag_uncertainty = 1
  113. #если в последовательности присутствуют повторяющиеся элементы(не в самом начале)
  114. if flag_up_eq_sec == 1:
  115. up_seq += equal_digits
  116. flag_uncertainty = 1
  117. elif flag_down_eq_sec == 1:
  118. down_seq += equal_digits
  119. flag_uncertainty = 1
  120.  
  121. #ввод ввод чисел в строку
  122. digits_list = list(map(int, input('Введите числа в строку через пробел: ').split()))
  123. input_0()
  124. dop_fuction()
  125. main_function()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement