Домашни > Man who speaks the ends of words > Решения > Решението на Лилия Костадинова

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

10 точки общо

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

 1def process_word(word):
 2    """
 3    Split the given word (string) into 3 parts (beginning, middle, end) based on a given formula.
 4    For a length that is exactly divisible by 3 the word has a length of 3 * x so each part has a length of x.
 5    For modular division with inverse 2 the word has a length of x * 3 + 2. Beginning: x + 1, middle: x, end: x + 1.
 6    For modular division with inverse 1 the word has a length of x * 3 + 1. Beginning: x, middle: x + 1, end: x.
 7    """
 8    if type(word) is not str:
 9        word = str(word)
10    if len(word) < 2:
11        return '', word, ''
12
13    third_of_len = len(word) // 3
14    if not len(word) % 3:
15        return word[:third_of_len], word[third_of_len:-third_of_len], word[third_of_len * 2:]
16    elif len(word) % 3 == 2:
17        return word[:third_of_len + 1], word[third_of_len + 1:-(third_of_len + 1)], word[third_of_len * 2 + 1:]
18    # Last case is if the inverse is equal to 1
19    return word[:third_of_len], word[third_of_len:-third_of_len], word[third_of_len * 2 + 1:]
20
21
22def beginning(word):
23    """Split the input word into 3 parts and return the beginning part as a string."""
24    return process_word(word)[0]
25
26
27def middle(word):
28    """Split the input word into 3 parts and return the middle part as a string."""
29    return process_word(word)[1]
30
31
32def end(word):
33    """Split the input word into 3 parts and return the last part as a string."""
34    return process_word(word)[2]
35
36
37def split_sentence(sentence):
38    """Split the sentence into tuples of split words. Return [(split first word), (split second word), ...]."""
39    if not sentence:
40        return [('', '', '')]
41    if type(sentence) is not str:
42        sentence = str(sentence)
43    return [process_word(word) for word in sentence.split()]

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

OK

Дискусия
Лилия Костадинова
16.10.2023 12:04

Благодаря за бързата обратна връзка, ще имам едно на ум за следващите домашни.
Георги Кунчев
16.10.2023 10:55

Не съм голям фен на изваждането на цялата логика от трите функции в една обща. Общата функция `process_word` става доста сложна и претрупана. Не държа да го преправяш, но го имай предвид за следващия път. Старай се функцията да има single responsibility. Може да се каже, че разделянето на думата на три парчета е single responsibility, но пък логиката и математиката там стават достра сериозни.
История

f1def process_word(word):f1def process_word(word):
2    """2    """
3    Split the given word (string) into 3 parts (beginning, middle, end) based on a given formula.3    Split the given word (string) into 3 parts (beginning, middle, end) based on a given formula.
4    For a length that is exactly divisible by 3 the word has a length of 3 * x so each part has a length of x.4    For a length that is exactly divisible by 3 the word has a length of 3 * x so each part has a length of x.
5    For modular division with inverse 2 the word has a length of x * 3 + 2. Beginning: x + 1, middle: x, end: x + 1.5    For modular division with inverse 2 the word has a length of x * 3 + 2. Beginning: x + 1, middle: x, end: x + 1.
6    For modular division with inverse 1 the word has a length of x * 3 + 1. Beginning: x, middle: x + 1, end: x.6    For modular division with inverse 1 the word has a length of x * 3 + 1. Beginning: x, middle: x + 1, end: x.
7    """7    """
nn8    if type(word) is not str:
9        word = str(word)
8    if len(word) < 2:10    if len(word) < 2:
9        return '', word, ''11        return '', word, ''
nn12 
10    third_of_len = len(word) // 313    third_of_len = len(word) // 3
11    if not len(word) % 3:14    if not len(word) % 3:
n12        return word[0:third_of_len], word[third_of_len:-third_of_len], word[third_of_len * 2:]n15        return word[:third_of_len], word[third_of_len:-third_of_len], word[third_of_len * 2:]
13    elif len(word) % 3 == 2:16    elif len(word) % 3 == 2:
n14        return word[0:third_of_len + 1], word[third_of_len + 1:-(third_of_len + 1)], word[third_of_len * 2 + 1:]n17        return word[:third_of_len + 1], word[third_of_len + 1:-(third_of_len + 1)], word[third_of_len * 2 + 1:]
18    # Last case is if the inverse is equal to 1
15    return word[0:third_of_len], word[third_of_len:-third_of_len], word[third_of_len * 2 + 1:]19    return word[:third_of_len], word[third_of_len:-third_of_len], word[third_of_len * 2 + 1:]
1620
1721
18def beginning(word):22def beginning(word):
19    """Split the input word into 3 parts and return the beginning part as a string."""23    """Split the input word into 3 parts and return the beginning part as a string."""
20    return process_word(word)[0]24    return process_word(word)[0]
2125
2226
23def middle(word):27def middle(word):
24    """Split the input word into 3 parts and return the middle part as a string."""28    """Split the input word into 3 parts and return the middle part as a string."""
25    return process_word(word)[1]29    return process_word(word)[1]
2630
2731
28def end(word):32def end(word):
29    """Split the input word into 3 parts and return the last part as a string."""33    """Split the input word into 3 parts and return the last part as a string."""
30    return process_word(word)[2]34    return process_word(word)[2]
3135
3236
33def split_sentence(sentence):37def split_sentence(sentence):
34    """Split the sentence into tuples of split words. Return [(split first word), (split second word), ...]."""38    """Split the sentence into tuples of split words. Return [(split first word), (split second word), ...]."""
t35    return [(beginning(word), middle(word), end(word)) for word in sentence.split()]t39    if not sentence:
40        return [('', '', '')]
41    if type(sentence) is not str:
42        sentence = str(sentence)
43    return [process_word(word) for word in sentence.split()]
44 
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

f1def process_word(word):f1def process_word(word):
2    """2    """
3    Split the given word (string) into 3 parts (beginning, middle, end) based on a given formula.3    Split the given word (string) into 3 parts (beginning, middle, end) based on a given formula.
4    For a length that is exactly divisible by 3 the word has a length of 3 * x so each part has a length of x.4    For a length that is exactly divisible by 3 the word has a length of 3 * x so each part has a length of x.
5    For modular division with inverse 2 the word has a length of x * 3 + 2. Beginning: x + 1, middle: x, end: x + 1.5    For modular division with inverse 2 the word has a length of x * 3 + 2. Beginning: x + 1, middle: x, end: x + 1.
6    For modular division with inverse 1 the word has a length of x * 3 + 1. Beginning: x, middle: x + 1, end: x.6    For modular division with inverse 1 the word has a length of x * 3 + 1. Beginning: x, middle: x + 1, end: x.
7    """7    """
8    if len(word) < 2:8    if len(word) < 2:
t9        return ' ', word, ' 't9        return '', word, ''
10    third_of_len = len(word) // 310    third_of_len = len(word) // 3
11    if not len(word) % 3:11    if not len(word) % 3:
12        return word[0:third_of_len], word[third_of_len:-third_of_len], word[third_of_len * 2:]12        return word[0:third_of_len], word[third_of_len:-third_of_len], word[third_of_len * 2:]
13    elif len(word) % 3 == 2:13    elif len(word) % 3 == 2:
14        return word[0:third_of_len + 1], word[third_of_len + 1:-(third_of_len + 1)], word[third_of_len * 2 + 1:]14        return word[0:third_of_len + 1], word[third_of_len + 1:-(third_of_len + 1)], word[third_of_len * 2 + 1:]
15    return word[0:third_of_len], word[third_of_len:-third_of_len], word[third_of_len * 2 + 1:]15    return word[0:third_of_len], word[third_of_len:-third_of_len], word[third_of_len * 2 + 1:]
1616
1717
18def beginning(word):18def beginning(word):
19    """Split the input word into 3 parts and return the beginning part as a string."""19    """Split the input word into 3 parts and return the beginning part as a string."""
20    return process_word(word)[0]20    return process_word(word)[0]
2121
2222
23def middle(word):23def middle(word):
24    """Split the input word into 3 parts and return the middle part as a string."""24    """Split the input word into 3 parts and return the middle part as a string."""
25    return process_word(word)[1]25    return process_word(word)[1]
2626
2727
28def end(word):28def end(word):
29    """Split the input word into 3 parts and return the last part as a string."""29    """Split the input word into 3 parts and return the last part as a string."""
30    return process_word(word)[2]30    return process_word(word)[2]
3131
3232
33def split_sentence(sentence):33def split_sentence(sentence):
34    """Split the sentence into tuples of split words. Return [(split first word), (split second word), ...]."""34    """Split the sentence into tuples of split words. Return [(split first word), (split second word), ...]."""
35    return [(beginning(word), middle(word), end(word)) for word in sentence.split()]35    return [(beginning(word), middle(word), end(word)) for word in sentence.split()]
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op