Мариян обнови решението на 02.11.2022 20:20 (преди над 2 години)
+phone_keyboard = ((' '), (), ('A', 'B', 'C'), ('D', 'E', 'F'), ('G', 'H', 'I'), ('J', 'K', 'L'),
+ ('M', 'N', 'O'), ('P', 'Q', 'R', 'S'), ('T', 'U', 'V'), ('W', 'X', 'Y', 'Z'))
+
+
+def group_nums(nums):
+ last_number = 0
+ separated_list = []
+ sub_list = []
+ for i, number in enumerate(nums):
+ if i == 0 or number == last_number:
+ sub_list.append(number)
+ else:
+ separated_list.append(sub_list)
+ sub_list = []
+ sub_list.append(number)
+ last_number = number
+
+ if not sub_list == []:
+ separated_list.append(sub_list)
+
+ return separated_list
+
+
+def nums_to_text(nums):
+ text = ""
+
+ separated_list = group_nums(nums)
+ for list in separated_list:
+ number = list[0]
+ if number in (-1, 1):
+ continue
+ else:
+ responding_letter = len(list) % len(phone_keyboard[number]) - 1
+ text += phone_keyboard[number][responding_letter]
+ return text
+
+
+def text_to_nums(text):
+ text_upper = text.upper()
+ nums = []
+
+ for i, character in enumerate(text_upper):
+ for l in range(10):
+ for j, __ in enumerate(phone_keyboard[l]):
+ if character in (phone_keyboard[l][j]):
+ if (len(nums) > 0 and nums[len(nums)-1] == l):
+ nums.append(-1)
+ for k in range(j+1):
+ nums.append(l)
+ break
+
+ return nums
+
+
+angle_conversions = [(286, 315), (16, 45), (46, 75), (76, 105), (106, 135),
+ (136, 165), (166, 195), (196, 225), (226, 255), (256, 285)]
+
+
+def normalize_angle(angle):
+ if (angle < 0):
+ while(angle < 0):
+ angle += 360
+ elif (angle > 360):
+ while(angle > 360):
+ angle -= 360
+
+ return angle
+
+
+def nums_to_angle(nums):
+ angle = 0
+ for num in nums:
+ angle += int((angle_conversions[num][0]
+ + angle_conversions[num][1]) / 2)
+ return normalize_angle(angle)
+
+
+def angles_to_nums(angles):
+ nums = []
+ for angle in angles:
+ for j in range(0, 9):
+ if angle_conversions[j][0] <= normalize_angle(angle) <= angle_conversions[j][1]:
+ nums.append(j)
+ break
+ return nums
+
+
+def is_phone_tastic(word):
+ return normalize_angle(nums_to_angle(text_to_nums(word))) % len(word) == 0
+
list
е запазена дума.Когато не искаш да използваш елемента, използва се само една
_
.nums.extend([l] * (j + 1))
прави същото.Можеш да дефинираш това в някаква логика с няколко реда код, за да избегнеш евентуални грешки при въвеждане, както и да направиш кода по-лесен за промяна.