Симеон обнови решението на 02.11.2022 17:15 (преди над 2 години)
+def nums_to_text(nums: list[int]):
+
+ word=""
Моля, слагай интервали около =
.
+ skipper=0
+ table=[['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']]
+
+ for i in range(len(nums)):
+
+ if(skipper>0): #I wanted to skip iterations
+ skipper-=1 #but "i+=5" didn't work
+ continue #there must be more elegant way
+ #but I don't know it :(
+ if(nums[i]==-1):
Моля, не слагай скоби в условията на if
. В Python е прието да няма.
+ continue
+
+ count=1
+
+ while(i+1!=len(nums) and nums[i]==nums[i+1]):
+ i+=1
+ count+=1
+
+ skipper=count-1
+ count=count%len(table[nums[i]-2])
+ word+=table[nums[i]-2][count-1]
+
+ return word
+
+def text_to_nums(text:str):
+
+ text=text.lower()
+ list_int:list[int]=[]
+ tmp:str=""
+ table={" ":"0","a":"2","b":"22","c":"222",
+ "d":"3","e":"33","f":"333",
+ "g":"4","h":"44","i":"444",
+ "j":"5","k":"55","l":"555",
+ "m":"6","n":"66","o":"666",
+ "p":"7","q":"77","r":"777","s":"7777",
+ "t":"8","u":"88","v":"888",
+ "w":"9","x":"99","y":"999","z":"9999"}
+
+ for letter in text:
+ tmp+=table[letter]
+
+ for letter in tmp:
+ data_int=ord(letter)-ord('0')
+ list_int.append(data_int)
+
+ return list_int
+
+def nums_to_angle(nums:list[int]):
+
+ sum=0
+
+ for num in nums:
+
+ if(num==0):
+ sum+=300
+
+ else:
+ sum+=num*30
+
+ return sum%360
+
+def angles_to_nums(angles:list[int]):
+
+ phone_nums:list[int]=[]
+
+ for angle in angles:
+
+ while(angle<0):
+ angle+=360
+
+ angle%=360
+ match angle:
+
+ case angle if(angle>=15 and angle<=44):
Този match
съдържа case
-ове които се нуждаят от if-ове, така че по-добре използвай чист
if`. По-четимо ще е.
+ phone_nums.append(1)
+
+ case angle if(angle>=45 and angle<=74):
+ phone_nums.append(2)
+
+ case angle if(angle>=75 and angle<=104):
+ phone_nums.append(3)
+
+ case angle if(angle>=105 and angle<=134):
+ phone_nums.append(4)
+
+ case angle if(angle>=135 and angle<=164):
+ phone_nums.append(5)
+
+ case angle if(angle>=165 and angle<=194):
+ phone_nums.append(6)
+
+ case angle if(angle>=195 and angle<=224):
+ phone_nums.append(7)
+
+ case angle if(angle>=225 and angle<=254):
+ phone_nums.append(8)
+
+ case angle if(angle>=255 and angle<=359):
+ phone_nums.append(9)
+
+ return phone_nums
+
+def is_phone_tastic(word:str):
+
+ list_int:list[int]=text_to_nums(word)
Избягвай стриктно да дефинираш типа на променливите си. В Python го считам за излишно. Точно този пример пък използва и променлива със същото име. Нищо не печелиш. А относно имената, използвай по-описателни. Говорихме след първото домашно, че 'list_int' не дава никаква информация, освен, че държи list от int.
+ angle=nums_to_angle(list_int)
+
+ return angle%len(word)==0
Моля, слагай интервали около
=
.Моля, не слагай скоби в условията на
if
. В Python е прието да няма.Този
match
съдържаcase
-ове които се нуждаят отif-ове, така че по-добре използвай чист
if`. По-четимо ще е.Избягвай стриктно да дефинираш типа на променливите си. В Python го считам за излишно. Точно този пример пък използва и променлива със същото име. Нищо не печелиш. А относно имената, използвай по-описателни. Говорихме след първото домашно, че 'list_int' не дава никаква информация, освен, че държи list от int.