Домашни > Man who speaks the ends of words > Решения > Решението на Рая Григорова

Резултати
10 точки от тестове
0 точки от учител

10 точки общо

12 успешни теста
0 неуспешни теста
Код

 1def beginning(word):
 2    end_ind = len(word) // 3
 3
 4    if len(word) % 3 == 2:  # add extra letter to 'beginning'
 5        end_ind += 1
 6    return word[:end_ind]
 7
 8
 9def middle(word):
10    beg_ind = len(word) // 3
11    end_ind = beg_ind + len(word) // 3
12
13    if len(word) % 3 == 1:  # extra letter for 'middle'
14        end_ind += 1
15    elif len(word) % 3 == 2:  # extra letter for 'beginning', so shift 'middle' right
16        end_ind += 1
17        beg_ind += 1
18
19    return word[beg_ind:end_ind]
20
21
22def end(word):
23    beg_ind = (len(word) // 3) * 2
24
25    # extra letter in 'beginning' or 'middle', so shift 'end' right
26    if len(word) % 3 == 1 or len(word) % 3 == 2:
27        beg_ind += 1
28
29    return word[beg_ind:]
30
31
32def split_sentence(sentence):
33    words = sentence.split()
34    tuples = []
35    for word in words:
36        elem = (beginning(word), middle(word), end(word))
37        tuples.append(elem)
38    return tuples

............
----------------------------------------------------------------------
Ran 12 tests in 0.000s

OK

Дискусия
Георги Кунчев
15.10.2023 11:07

Ако просто сложиш логиката за всяка част от думата в съответната функция, махайки двете допълнителни функции, които си дефинирала, ще е далеч по-четимо и по-лесно. Ще имаш малко повече дублиране на код, но за сметка на по-лесен за разбиране и поддръжка код.
История

f1def beginning(word):f1def beginning(word):
n2    beg_ind = 0n
3    end_ind = len(word) // 32    end_ind = len(word) // 3
43
5    if len(word) % 3 == 2:  # add extra letter to 'beginning'4    if len(word) % 3 == 2:  # add extra letter to 'beginning'
6        end_ind += 15        end_ind += 1
n7    return word[beg_ind:end_ind]n6    return word[:end_ind]
87
98
10def middle(word):9def middle(word):
11    beg_ind = len(word) // 310    beg_ind = len(word) // 3
12    end_ind = beg_ind + len(word) // 311    end_ind = beg_ind + len(word) // 3
1312
14    if len(word) % 3 == 1:  # extra letter for 'middle'13    if len(word) % 3 == 1:  # extra letter for 'middle'
15        end_ind += 114        end_ind += 1
16    elif len(word) % 3 == 2:  # extra letter for 'beginning', so shift 'middle' right15    elif len(word) % 3 == 2:  # extra letter for 'beginning', so shift 'middle' right
17        end_ind += 116        end_ind += 1
18        beg_ind += 117        beg_ind += 1
1918
20    return word[beg_ind:end_ind]19    return word[beg_ind:end_ind]
2120
2221
23def end(word):22def end(word):
24    beg_ind = (len(word) // 3) * 223    beg_ind = (len(word) // 3) * 2
n25    end_ind = len(word)n
2624
27    # extra letter in 'beginning' or 'middle', so shift 'end' right25    # extra letter in 'beginning' or 'middle', so shift 'end' right
28    if len(word) % 3 == 1 or len(word) % 3 == 2:26    if len(word) % 3 == 1 or len(word) % 3 == 2:
29        beg_ind += 127        beg_ind += 1
3028
t31    return word[beg_ind:end_ind]t29    return word[beg_ind:]
3230
3331
34def split_sentence(sentence):32def split_sentence(sentence):
35    words = sentence.split()33    words = sentence.split()
36    tuples = []34    tuples = []
37    for word in words:35    for word in words:
38        elem = (beginning(word), middle(word), end(word))36        elem = (beginning(word), middle(word), end(word))
39        tuples.append(elem)37        tuples.append(elem)
40    return tuples38    return tuples
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

n1def calculate_lengths(word):n1def beginning(word):
2    # calculate lengths of individual parts of the word2    beg_ind = 0
3    res = []3    end_ind = len(word) // 3
4    match len(word) % 3:
5        case 0:  # equally distributed letters
6            res += [len(word) // 3] * 3
7        case 1:  # extra letter is in the middle
8            res.append(len(word) // 3)
9            res.append(len(word) // 3 + 1)
10            res.append(len(word) // 3)
11        case 2:  # distribute letters on both sides
12            res.append(len(word) // 3 + 1)
13            res.append(len(word) // 3)
14            res.append(len(word) // 3 + 1)
154
n16    return resn5    if len(word) % 3 == 2:  # add extra letter to 'beginning'
17 6        end_ind += 1
18 7    return word[beg_ind:end_ind]
19# this function will be used in beginning(), middle() and end()
20# the parameter 'my_type' will be 0 for 'beginning', 1 for 'middle' and 2 for 'end'
21def helper_func(my_type, word):
22    lengths = calculate_lengths(word)
23    offset = 0
24    for i in range(my_type):
25        offset += lengths[i]
26    return word[offset:offset + lengths[my_type]]
27 
28 
29def beginning(word):
30    return helper_func(0, word)
318
329
33def middle(word):10def middle(word):
n34    return helper_func(1, word)n11    beg_ind = len(word) // 3
12    end_ind = beg_ind + len(word) // 3
13 
14    if len(word) % 3 == 1:  # extra letter for 'middle'
15        end_ind += 1
16    elif len(word) % 3 == 2:  # extra letter for 'beginning', so shift 'middle' right
17        end_ind += 1
18        beg_ind += 1
19 
20    return word[beg_ind:end_ind]
3521
3622
37def end(word):23def end(word):
n38    return helper_func(2, word)n24    beg_ind = (len(word) // 3) * 2
25    end_ind = len(word)
26 
27    # extra letter in 'beginning' or 'middle', so shift 'end' right
28    if len(word) % 3 == 1 or len(word) % 3 == 2:
29        beg_ind += 1
30 
31    return word[beg_ind:end_ind]
3932
4033
41def split_sentence(sentence):34def split_sentence(sentence):
t42    words = sentence.split()  # split sentence into wordst35    words = sentence.split()
43    tuples = []36    tuples = []
44    for word in words:37    for word in words:
45        elem = (beginning(word), middle(word), end(word))38        elem = (beginning(word), middle(word), end(word))
46        tuples.append(elem)39        tuples.append(elem)
47    return tuples40    return tuples
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op