1def beginning(word):
2 if len(word) % 3 == 0:
3 return word[:len(word)//3:]
4 if len(word) % 3 == 1:
5 return word[:len(word)//3:]
6 if len(word) % 3 == 2:
7 return word[:len(word)//3+1:]
8
9def middle(word):
10 if len(word) % 3 == 0:
11 return word[len(word)//3:2*len(word)//3:]
12 if len(word) % 3 == 1:
13 return word[len(word)//3:2*len(word)//3+1:]
14 if len(word) % 3 == 2:
15 return word[len(word)//3+1:2*len(word)//3:]
16
17def end(word):
18 if len(word) % 3 == 0:
19 return word[2*len(word)//3:]
20 if len(word) % 3 == 1:
21 return word[2*len(word)//3+1:]
22 if len(word) % 3 == 2:
23 return word[2*len(word)//3:]
24
25def word_result(word):
26 return (beginning(word), middle(word), end(word))
27
28def split_sentence(sentence):
29 words = sentence.split()
30 res = []
31 for word in words:
32 res.append(word_result(word))
33 return res
............
----------------------------------------------------------------------
Ran 12 tests in 0.000s
OK
Димитър Христов
15.10.2023 16:26Ето с разделени по функциите код. Също така наистина работи само с едни :
|
Георги Кунчев
15.10.2023 10:57Цялата идея с изнасянето на логиката за всички три функции в отделна не ми допада. Имаш едни стрингове, които определят резултата, а базиране на логика по стрингове може лесно да се оплеска с някое тайпо.
Като цяло решението ще бъде далеч по-добро, ако всяка функция държи логиката си, а не я делегира на друга, претоварена от логиката и за трите функции, функция.
|
n | 1 | def word_cutter(word, position): | n | 1 | def beginning(word): |
2 | if len(word) % 3 == 0: | 2 | if len(word) % 3 == 0: | ||
n | 3 | if position == "start": | n | ||
4 | return word[:len(word)//3:] | 3 | return word[:len(word)//3:] | ||
5 | if position == "mid": | ||||
6 | return word[len(word)//3:2*len(word)//3:] | ||||
7 | if position == "end": | ||||
8 | return word[2*len(word)//3::] | ||||
9 | if len(word) % 3 == 1: | 4 | if len(word) % 3 == 1: | ||
n | 10 | if position == "start": | n | ||
11 | return word[:len(word)//3:] | 5 | return word[:len(word)//3:] | ||
12 | if position == "mid": | ||||
13 | return word[len(word)//3:2*len(word)//3+1:] | ||||
14 | if position == "end": | ||||
15 | return word[2*len(word)//3+1::] | ||||
16 | if len(word) % 3 == 2: | 6 | if len(word) % 3 == 2: | ||
n | 17 | if position == "start": | n | ||
18 | return word[:len(word)//3+1:] | 7 | return word[:len(word)//3+1:] | ||
19 | if position == "mid": | ||||
20 | return word[len(word)//3+1:2*len(word)//3:] | ||||
21 | if position == "end": | ||||
22 | return word[2*len(word)//3::] | ||||
23 | |||||
24 | def beginning(word): | ||||
25 | return word_cutter(word, "start") | ||||
26 | 8 | ||||
27 | def middle(word): | 9 | def middle(word): | ||
n | 28 | return word_cutter(word, "mid") | n | 10 | if len(word) % 3 == 0: |
11 | return word[len(word)//3:2*len(word)//3:] | ||||
12 | if len(word) % 3 == 1: | ||||
13 | return word[len(word)//3:2*len(word)//3+1:] | ||||
14 | if len(word) % 3 == 2: | ||||
15 | return word[len(word)//3+1:2*len(word)//3:] | ||||
29 | 16 | ||||
30 | def end(word): | 17 | def end(word): | ||
n | 31 | return word_cutter(word, "end") | n | 18 | if len(word) % 3 == 0: |
19 | return word[2*len(word)//3:] | ||||
20 | if len(word) % 3 == 1: | ||||
21 | return word[2*len(word)//3+1:] | ||||
22 | if len(word) % 3 == 2: | ||||
23 | return word[2*len(word)//3:] | ||||
32 | 24 | ||||
33 | def word_result(word): | 25 | def word_result(word): | ||
t | 34 | return (word_cutter(word, "start"), word_cutter(word, "mid"), word_cutter(word, "end")) | t | 26 | return (beginning(word), middle(word), end(word)) |
35 | 27 | ||||
36 | def split_sentence(sentence): | 28 | def split_sentence(sentence): | ||
37 | words = sentence.split() | 29 | words = sentence.split() | ||
38 | res = [] | 30 | res = [] | ||
39 | for word in words: | 31 | for word in words: | ||
40 | res.append(word_result(word)) | 32 | res.append(word_result(word)) | ||
41 | return res | 33 | return res |
Legends | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
|