Николета обнови решението на 03.11.2022 16:29 (преди над 2 години)
+phone_dictionary = {2: ["A", "B", "C"], 3: ["D", "E", "F"],
+ 4: ["G", "H", "I"], 5: ["J", "K", "L"],
+ 6: ["M", "N", "O"], 7: ["P", "Q", "R", "S"],
+ 8: ["T", "U", "V"], 9: ["W", "X", "Y", "Z"]}
+
+
+def nums_to_text(nums):
+ counter = 0
+ result_string = ""
+ for i in range(len(nums)):
+ if nums[i] in (-1, 1):
+ continue
+ elif nums[i] == 0:
+ result_string += " "
+ elif i+1 < len(nums) and nums[i] == nums[i+1]:
Моля слагай интервали около +
и други аритметични оператори.
+ counter += 1
+ else:
+ if nums[i] == 7 or nums[i] == 9:
По-прието е nums[i] in (7, 9)
+ if counter >= 4:
+ counter = counter % 4
+ else:
+ if counter >= 3:
+ counter = counter % 3
+
+ result_string += phone_dictionary[nums[i]][counter]
+ counter = 0
+
+ return result_string
+
+
+def text_to_nums(text):
+ nums = []
+ value = 0
+ count = 0
+ for character in text:
+ new_character = character.upper()
+ match new_character:
Тук имаш доста повтарящи се редове (само символите са различни). Една дефиниция в речник ще ти спести този проблем.
+ case "A" | "B" | "C":
+ if value == 2:
+ nums.append(-1)
+ value = 2
+ count = phone_dictionary[2].index(new_character) + 1
+ case "D" | "E" | "F":
+ if value == 3:
+ nums.append(-1)
+ value = 3
+ count = phone_dictionary[3].index(new_character) + 1
+ case "G" | "H" | "I":
+ if value == 4:
+ nums.append(-1)
+ value = 4
+ count = phone_dictionary[4].index(new_character) + 1
+ case "J" | "K" | "L":
+ if value == 5:
+ nums.append(-1)
+ value = 5
+ count = phone_dictionary[5].index(new_character) + 1
+ case "M" | "N" | "O":
+ if value == 6:
+ nums.append(-1)
+ value = 6
+ count = phone_dictionary[6].index(new_character) + 1
+ case "P" | "Q" | "R" | "S":
+ if value == 7:
+ nums.append(-1)
+ value = 7
+ count = phone_dictionary[7].index(new_character) + 1
+ case "T" | "U" | "V":
+ if value == 8:
+ nums.append(-1)
+ value = 8
+ count = phone_dictionary[8].index(new_character) + 1
+ case "W" | "X" | "Y" | "Z":
+ if value == 9:
+ nums.append(-1)
+ value = 9
+ count = phone_dictionary[9].index(new_character) + 1
+ case " ":
+ value = 0
+ count = 1
+
+ for i in range(count):
+ nums.append(value)
+
+ return nums
+
+
+def nums_to_angle(nums):
+ sum_angles = 0
+ for i in nums:
+ if i == 0:
+ sum_angles += 10*30
+ else:
+ sum_angles += i*30
+
+ if sum_angles > 359:
+ sum_angles = sum_angles % 360
+
+ return sum_angles
+
+
+def angles_to_nums(angles):
+ nums = []
+ to_append = 0
+ for angle in angles:
+ if angle > 359 or angle < -359:
+ angle = angle % 360
+ if angle < 0:
+ angle = 360 + angle
+ if 15 < angle <= 30:
+ nums.append(1)
+ elif 30 < angle < 316:
+ if angle % 30 == 0:
+ if angle/30 == 10:
+ nums.append(0)
+ else:
+ nums.append(int(angle/30))
+ else:
+ if angle % 30 <= 15:
+ to_append = int(angle//30)
+ else:
+ to_append = int(angle//30)+1
+
+ if to_append < 10:
+ nums.append(to_append)
+ else:
+ nums.append(0)
+ return nums
+
+
+def is_phone_tastic(word):
+ nums = text_to_nums(word)
+ angle = nums_to_angle(nums)
+ if len(word) == 0:
+ return False
+ return angle % len(word) == 0
+
Моля слагай интервали около
+
и други аритметични оператори.По-прието е
nums[i] in (7, 9)
Тук имаш доста повтарящи се редове (само символите са различни). Една дефиниция в речник ще ти спести този проблем.