Διαδρομές
/
Python
Python
/
Ασκήσεις
/
Το λεξιλόγιο της μικρής αδερφής
Το λεξιλόγιο της μικρής αδερφής

Το λεξιλόγιο της μικρής αδερφής

Άσκηση εκμάθησης

Εισαγωγή

Μια str στην Python είναι μια αμετάβλητη ακολουθία από σημεία κώδικα Unicode. Αυτά μπορεί να περιλαμβάνουν γράμματα, διακριτικά σημεία, χαρακτήρες τοποθέτησης, αριθμούς, σύμβολα νομισμάτων, emoji, σημεία στίξης, χαρακτήρες κενού και αλλαγής γραμμής, και πολλά άλλα. Καθώς είναι αμετάβλητη, η τιμή ενός αντικειμένου str στη μνήμη δεν αλλάζει. Οι μέθοδοι που φαίνεται να τροποποιούν μια συμβολοσειρά επιστρέφουν ένα νέο αντίγραφο ή στιγμιότυπο αυτού του αντικειμένου str.

Ένα λεκτικό str μπορεί να δηλωθεί με απλά ' ή διπλά " εισαγωγικά. Ο χαρακτήρας διαφυγής \ είναι διαθέσιμος όταν χρειάζεται.


>>> single_quoted = 'These allow "double quoting" without "escape" characters.'

>>> double_quoted = "These allow embedded 'single quoting', so you don't have to use an 'escape' character."

>>> escapes = 'If needed, a \'slash\' can be used as an escape character within a string when switching quote styles won\'t work.'

Οι συμβολοσειρές πολλαπλών γραμμών δηλώνονται με ''' ή """.

>>> triple_quoted =  '''Three single quotes or "double quotes" in a row allow for multi-line string literals.
  Line break characters, tabs and other whitespace are fully supported.

  You\'ll most often encounter these as "doc strings" or "doc tests" written just below the first line of a function or class definition.
    They\'re often used with auto documentation ✍ tools.
    '''

Οι συμβολοσειρές μπορούν να συνενωθούν με τον τελεστή +. Αυτή η μέθοδος καλό είναι να χρησιμοποιείται με φειδώ, καθώς δεν είναι ιδιαίτερα αποδοτική ούτε εύκολη στη συντήρηση.

language = "Ukrainian"
number = "nine"
word = "дев'ять"

sentence = word + " " + "means" + " " + number + " in " + language + "."

>>> print(sentence)
...
"дев'ять means nine in Ukrainian."

Αν μια συλλογή από μεμονωμένες συμβολοσειρές, όπως list, tuple, set ή κάτι άλλο, χρειάζεται να συνδυαστεί σε μία μόνο str, το <str>.join(<iterable>) είναι καλύτερη επιλογή:

# str.join() makes a new string from the iterables elements.
>>> chickens = ["hen", "egg", "rooster"] # Lists are iterable.
>>> ' '.join(chickens)
'hen egg rooster'

# Any string can be used as the joining element.
>>> ' :: '.join(chickens)
'hen :: egg :: rooster'

>>> ' 🌿 '.join(chickens)
'hen 🌿 egg 🌿 rooster'


# Any iterable can be used as input.
>>> flowers = ("rose", "daisy", "carnation")  # Tuples are iterable.
>>> '*-*'.join(flowers)
'rose*-*daisy*-*carnation'

>>> flowers = {"rose", "daisy", "carnation"}  # Sets are iterable, but output order is not guaranteed.
>>> '*-*'.join(flowers)
'rose*-*carnation*-*daisy'

>>> phrase = "This is my string"  # Strings are iterable, but be careful!
>>> '..'.join(phrase)
'T..h..i..s.. ..i..s.. ..m..y.. ..s..t..r..i..n..g'


# Separators are inserted **between** elements, but can be any string (including spaces).
# This can be exploited for interesting effects.
>>> under_words = ['under', 'current', 'sea', 'pin', 'dog', 'lay']
>>> separator = ' ⤴️ under'
>>> separator.join(under_words)
'under ⤴️ undercurrent ⤴️ undersea ⤴️ underpin ⤴️ underdog ⤴️ underlay'

# The separator can be composed different ways, as long as the result is a string.
>>> upper_words = ['upper', 'crust', 'case', 'classmen', 'most', 'cut']
>>> separator = ' 🌟 ' + upper_words[0]
>>> separator.join(upper_words)
 'upper 🌟 uppercrust 🌟 uppercase 🌟 upperclassmen 🌟 uppermost 🌟 uppercut'

Τα σημεία κώδικα μέσα σε μια str μπορούν να προσπελαστούν με έναν αριθμό 0-based index από τα αριστερά:

creative = '창의적인'

>>> creative[0]
'창'

>>> creative[2]
'적'

>>> creative[3]
'인'

Η πρόσβαση λειτουργεί και από τα δεξιά, ξεκινώντας με -1-based index:

creative = '창의적인'

>>> creative[-4]
'창'

>>> creative[-2]
'적'

>>> creative[-1]
'인'

Δεν υπάρχει ξεχωριστός τύπος "χαρακτήρα" ή "rune" στην Python, οπότε η πρόσβαση με θέση σε μια συμβολοσειρά παράγει μια νέα str μήκους 1:


>>> website = "exercism"
>>> type(website[0])
<class 'str'>

>>> len(website[0])
1

>>> website[0] == website[0:1] == 'e'
True

Οι υποσυμβολοσειρές μπορούν να επιλεγούν με slice notation, χρησιμοποιώντας <str>[<start>:stop:<step>] για να παραχθεί μια νέα συμβολοσειρά. Τα αποτελέσματα δεν περιλαμβάνουν τη θέση stop. Αν δεν δοθεί start, η αρχική θέση θα είναι 0. Αν δεν δοθεί stop, η θέση stop θα είναι το τέλος της συμβολοσειράς.

moon_and_stars = '🌟🌟🌙🌟🌟⭐'
sun_and_moon = '🌞🌙🌞🌙🌞🌙🌞🌙🌞'

>>> moon_and_stars[1:4]
'🌟🌙🌟'

>>> moon_and_stars[:3]
'🌟🌟🌙'

>>> moon_and_stars[3:]
'🌟🌟⭐'

>>> moon_and_stars[:-1]
'🌟🌟🌙🌟🌟'

>>> moon_and_stars[:-3]
'🌟🌟🌙'

>>> sun_and_moon[::2]
'🌞🌞🌞🌞🌞'

>>> sun_and_moon[:-2:2]
'🌞🌞🌞🌞'

>>> sun_and_moon[1:-1:2]
'🌙🌙🌙🌙'

Οι συμβολοσειρές μπορούν επίσης να σπάσουν σε μικρότερες συμβολοσειρές με το <str>.split(<separator>), που επιστρέφει μια list από υποσυμβολοσειρές. Στη συνέχεια, η λίστα μπορεί να προσπελαστεί με θέσεις ή να διαχωριστεί περαιτέρω, αν χρειάζεται. Χρησιμοποιώντας το <str>.split() χωρίς ορίσματα, η συμβολοσειρά θα διαχωριστεί στα κενά.

>>> cat_ipsum = "Destroy house in 5 seconds mock the hooman."
>>> cat_ipsum.split()
...
['Destroy', 'house', 'in', '5', 'seconds', 'mock', 'the', 'hooman.']


>>> cat_ipsum.split()[-1]
'hooman.'


>>> cat_words = "feline, four-footed, ferocious, furry"
>>> cat_words.split(', ')
...
['feline', 'four-footed', 'ferocious', 'furry']

Οι διαχωριστές για το <str>.split() μπορούν να αποτελούνται από περισσότερους από έναν χαρακτήρες. Για την αντιστοίχιση του διαχωρισμού χρησιμοποιείται ολόκληρη η συμβολοσειρά.


>>> colors = """red,
orange,
green,
purple,
yellow"""

>>> colors.split(',\n')
['red', 'orange', 'green', 'purple', 'yellow']

Οι συμβολοσειρές υποστηρίζουν όλες τις κοινές πράξεις ακολουθιών. Μπορείς να διατρέξεις μεμονωμένα σημεία κώδικα σε έναν βρόχο με for item in <str>. Μπορείς να διατρέξεις θέσεις μαζί με τα στοιχεία τους σε έναν βρόχο με for index, item in enumerate(<str>).


>>> exercise = 'လေ့ကျင့်'

# Note that there are more code points than perceived glyphs or characters
>>> for code_point in exercise:
...    print(code_point)
...
လ
ေ
့
က
ျ
င
်
့

# Using enumerate will give both the value and index position of each element.
>>> for index, code_point in enumerate(exercise):
...    print(index, ": ", code_point)
...
0 :  လ
1 :  ေ
2 :  ့
3 :  က
4 :  ျ
5 :  င
6 :  ်
7 :  ့

Οδηγίες

Βοηθάς τη μικρότερη αδερφή σου με την εργασία της για το λεξιλόγιο των αγγλικών, την οποία βρίσκει πολύ βαρετή. Η τάξη της μαθαίνει να φτιάχνει νέες λέξεις προσθέτοντας προθέματα και επιθήματα. Δεδομένου ενός συνόλου λέξεων, η δασκάλα ψάχνει σωστά μετασχηματισμένες λέξεις με σωστή ορθογραφία, προσθέτοντας το πρόθεμα στην αρχή ή το επίθημα στο τέλος.

Η εργασία έχει τέσσερις δραστηριότητες, καθεμιά με ένα σύνολο από κείμενο ή λέξεις για να δουλέψεις.

1. Πρόσθεσε ένα πρόθεμα σε μια λέξη

Ένα από τα πιο συνηθισμένα προθέματα στα αγγλικά είναι το un, που σημαίνει "όχι". Σε αυτή τη δραστηριότητα, η αδερφή σου χρειάζεται να φτιάξει αρνητικές λέξεις, δηλαδή λέξεις που σημαίνουν "όχι", προσθέτοντας un σε αυτές.

Υλοποίησε τη συνάρτηση add_prefix_un(<word>) που παίρνει το word ως παράμετρο και επιστρέφει μια νέα λέξη με πρόθεμα un:

>>> add_prefix_un("happy")
'unhappy'

>>> add_prefix_un("manageable")
'unmanageable'

2. Πρόσθεσε προθέματα σε ομάδες λέξεων

Υπάρχουν τέσσερα ακόμη συνηθισμένα προθέματα που μελετά η τάξη της αδερφής σου: το en (που σημαίνει "βάζω μέσα" ή "καλύπτω"), το pre (που σημαίνει "πριν" ή "προς τα εμπρός"), το auto (που σημαίνει "εαυτός" ή "ίδιος"), και το inter (που σημαίνει "μεταξύ" ή "ανάμεσα").

Σε αυτή την άσκηση, η τάξη δημιουργεί ομάδες λέξεων λεξιλογίου χρησιμοποιώντας αυτά τα προθέματα, ώστε να μπορούν να μελετηθούν μαζί. Κάθε πρόθεμα έρχεται σε μια λίστα με τις συνηθισμένες λέξεις με τις οποίες χρησιμοποιείται. Οι μαθητές πρέπει να εφαρμόσουν το πρόθεμα και να παράγουν μια συμβολοσειρά που δείχνει το πρόθεμα εφαρμοσμένο σε όλες τις λέξεις.

Υλοποίησε τη συνάρτηση make_word_groups(<vocab_words>) που παίρνει το vocab_words ως παράμετρο με την εξής μορφή: [<prefix>, <word_1>, <word_2> .... <word_n>], και επιστρέφει μια συμβολοσειρά με το πρόθεμα εφαρμοσμένο σε κάθε λέξη, που μοιάζει με: '<prefix> :: <prefix><word_1> :: <prefix><word_2> :: <prefix><word_n>'.

Δεν χρειάζεται εδώ να δημιουργήσεις έναν βρόχο for ή while για να επεξεργαστείς την είσοδο. Σκέψου προσεκτικά ποιες μεθόδους συμβολοσειράς (και ποιους διαχωριστές) θα μπορούσες να χρησιμοποιήσεις αντ' αυτού.

>>> make_word_groups(['en', 'close', 'joy', 'lighten'])
'en :: enclose :: enjoy :: enlighten'

>>> make_word_groups(['pre', 'serve', 'dispose', 'position'])
'pre :: preserve :: predispose :: preposition'

>> make_word_groups(['auto', 'didactic', 'graph', 'mate'])
'auto :: autodidactic :: autograph :: automate'

>>> make_word_groups(['inter', 'twine', 'connected', 'dependent'])
'inter :: intertwine :: interconnected :: interdependent'

3. Αφαίρεσε ένα επίθημα από μια λέξη

Το ness είναι ένα συνηθισμένο επίθημα που σημαίνει "κατάσταση ύπαρξης". Σε αυτή τη δραστηριότητα, η αδερφή σου χρειάζεται να βρει την αρχική λέξη-ρίζα αφαιρώντας το επίθημα ness. Αλλά φυσικά υπάρχουν ενοχλητικοί κανόνες ορθογραφίας: Αν η λέξη-ρίζα τελείωνε αρχικά σε σύμφωνο που ακολουθείται από ένα "y", τότε το "y" άλλαξε σε "i". Η αφαίρεση του "ness" πρέπει να επαναφέρει το "y" σε αυτές τις λέξεις-ρίζες. π.χ. happiness --> happi --> happy.

Υλοποίησε τη συνάρτηση remove_suffix_ness(<word>) που δέχεται ένα word και επιστρέφει τη λέξη-ρίζα χωρίς το επίθημα ness.

>>> remove_suffix_ness("heaviness")
'heavy'

>>> remove_suffix_ness("sadness")
'sad'

4. Εξήγαγε και μετασχημάτισε μια λέξη

Τα επιθήματα χρησιμοποιούνται συχνά για να αλλάξουν το μέρος του λόγου στο οποίο ανήκει μια λέξη. Μια συνηθισμένη πρακτική στα αγγλικά είναι το "verbing" ή το "verbifying", όπου ένα επίθετο γίνεται ρήμα προσθέτοντας ένα επίθημα en.

Σε αυτή την εργασία, η αδερφή σου θα εξασκηθεί στο "verbing" λέξεων, εξάγοντας ένα επίθετο από μια πρόταση και μετατρέποντάς το σε ρήμα. Ευτυχώς, όλες οι λέξεις που πρέπει να μετασχηματιστούν εδώ είναι "κανονικές", δηλαδή δεν χρειάζονται αλλαγές στην ορθογραφία για να προστεθεί το επίθημα.

Υλοποίησε τη συνάρτηση adjective_to_verb(<sentence>, <index>) που παίρνει δύο παραμέτρους. Μια sentence που χρησιμοποιεί τη λέξη του λεξιλογίου και το index της λέξης, μόλις η πρόταση χωριστεί σε μέρη. Η συνάρτηση πρέπει να επιστρέφει το επίθετο που εξήχθη ως ρήμα.

>>> adjective_to_verb('I need to make that bright.', -1 )
'brighten'

>>> adjective_to_verb('It got dark as the sun set.', 2)
'darken'
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Python Exercism

Έτοιμος να ξεκινήσεις την άσκηση Το λεξιλόγιο της μικρής αδερφής;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.