Tracks
/
Python
Python
/
Übungen
/
Der Wortschatz der kleinen Schwester
Der Wortschatz der kleinen Schwester

Der Wortschatz der kleinen Schwester

Lernübung

Einführung

Ein str in Python ist eine unveränderliche Sequenz von Unicode-Codepunkten. Diese können Buchstaben, diakritische Zeichen, Positionierungszeichen, Zahlen, Währungssymbole, Emojis, Satzzeichen, Leerzeichen und Zeilenumbruchzeichen und mehr umfassen. Da sie unveränderlich sind, ändert sich der Wert eines str-Objekts im Speicher nicht; Methoden, die eine Zeichenkette zu verändern scheinen, geben eine neue Kopie oder Instanz dieses str-Objekts zurück.

Ein str-Literal kann mit einfachen ' oder doppelten " Anführungszeichen deklariert werden. Das Escape-Zeichen \ steht bei Bedarf zur Verfügung.


>>> 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.'

Mehrzeilige Zeichenketten werden mit ''' oder """ deklariert.

>>> 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.
    '''

Zeichenketten können mit dem +-Operator verkettet werden. Diese Methode sollte sparsam eingesetzt werden, da sie nicht sehr leistungsfähig und schwer zu pflegen ist.

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

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

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

Wenn eine list, tuple, set oder eine andere Sammlung einzelner Zeichenketten zu einer einzigen str zusammengefügt werden soll, ist <str>.join(<iterable>) die bessere Option:

# 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'

Auf Codepunkte innerhalb einer str kann von links mit einer 0-based index-Nummer zugegriffen werden:

creative = '창의적인'

>>> creative[0]
'창'

>>> creative[2]
'적'

>>> creative[3]
'인'

Die Indizierung funktioniert auch von rechts, beginnend mit einem -1-based index:

creative = '창의적인'

>>> creative[-4]
'창'

>>> creative[-2]
'적'

>>> creative[-1]
'인'

In Python gibt es keinen separaten Typ für „Zeichen“ oder „Rune“, daher erzeugt die Indizierung einer Zeichenkette eine neue str der Länge 1:


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

>>> len(website[0])
1

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

Teilzeichenketten können über die Slice-Notation ausgewählt werden, indem <str>[<start>:stop:<step>] verwendet wird, um eine neue Zeichenkette zu erzeugen. Die Ergebnisse schließen den stop-Index aus. Wenn kein start angegeben ist, ist der Startindex 0. Wenn kein stop angegeben ist, ist der stop-Index das Ende der Zeichenkette.

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]
'🌙🌙🌙🌙'

Zeichenketten können auch über <str>.split(<separator>) in kleinere Zeichenketten zerlegt werden, was eine list von Teilzeichenketten zurückgibt. Die Liste kann dann bei Bedarf weiter indiziert oder zerlegt werden. Die Verwendung von <str>.split() ohne Argumente zerlegt die Zeichenkette an Leerraumzeichen.

>>> 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']

Trennzeichen für <str>.split() können aus mehr als einem Zeichen bestehen. Die gesamte Zeichenkette wird für den Split-Abgleich verwendet.


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

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

Zeichenketten unterstützen alle allgemeinen Sequenzoperationen. Einzelne Codepunkte können in einer Schleife mit for item in <str> durchlaufen werden. Indizes mit Elementen können in einer Schleife mit for index, item in enumerate(<str>) durchlaufen werden.


>>> 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 :  ့

Anleitung

Du hilfst deiner kleinen Schwester bei ihren Englisch-Vokabelhausaufgaben, die sie sehr mühsam findet. Ihre Klasse lernt gerade, neue Wörter zu bilden, indem sie Präfixe und Suffixe anhängt. Bei einer vorgegebenen Menge von Wörtern sucht die Lehrerin nach korrekt umgewandelten Wörtern mit korrekter Schreibweise, indem das Präfix an den Anfang oder das Suffix an das Ende gesetzt wird.

Die Aufgabe besteht aus vier Aktivitäten, jede mit einem Text oder einer Wortliste, mit der du arbeitest.

1. Füge einem Wort ein Präfix hinzu

Eines der häufigsten Präfixe im Englischen ist un, es bedeutet „nicht". In dieser Aktivität muss deine Schwester negative Wörter, also „Nicht"-Wörter, bilden, indem sie un davor setzt.

Implementiere die Funktion add_prefix_un(<word>), die word als Parameter nimmt und ein neues Wort mit vorangestelltem un zurückgibt:

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

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

2. Füge Präfixe zu Wortgruppen hinzu

Deine Schwester und ihre Klasse beschäftigen sich noch mit vier weiteren häufigen Präfixen: en (bedeutet „hineinstecken" oder „bedecken"), pre (bedeutet „vor" oder „vorwärts"), auto (bedeutet „selbst" oder „gleich") und inter (bedeutet „zwischen" oder „unter").

In dieser Übung bildet die Klasse Wortgruppen mit diesen Präfixen, damit sie gemeinsam gelernt werden können. Jedes Präfix kommt in einer Liste mit häufigen Wörtern vor, mit denen es verwendet wird. Die Schülerinnen und Schüler müssen das Präfix anwenden und einen String erzeugen, der das Präfix vor allen Wörtern zeigt.

Implementiere die Funktion make_word_groups(<vocab_words>), die vocab_words als Parameter in folgender Form nimmt: [<prefix>, <word_1>, <word_2> .... <word_n>], und einen String zurückgibt, bei dem das Präfix vor jedem Wort steht und der so aussieht: '<prefix> :: <prefix><word_1> :: <prefix><word_2> :: <prefix><word_n>'.

Eine for- oder while-Schleife zum Verarbeiten der Eingabe ist hier nicht nötig. Überlege genau, welche String-Methoden (und Trennzeichen) du stattdessen verwenden könntest.

>>> 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. Entferne ein Suffix von einem Wort

ness ist ein häufiges Suffix und bedeutet „Zustand des Seins". In dieser Aktivität muss deine Schwester das ursprüngliche Wort finden, indem sie das Suffix ness entfernt. Aber natürlich gibt es lästige Rechtschreibregeln: Wenn das ursprüngliche Wort auf einen Konsonanten gefolgt von einem „y" endete, wurde das „y" zu einem „i". Beim Entfernen von „ness" muss das „y" in diesen ursprünglichen Wörtern wiederhergestellt werden. z. B. happiness --> happi --> happy.

Implementiere die Funktion remove_suffix_ness(<word>), die ein word nimmt und das ursprüngliche Wort ohne das Suffix ness zurückgibt.

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

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

4. Extrahiere und wandle ein Wort um

Suffixe werden oft verwendet, um die Wortart eines Wortes zu ändern. Im Englischen ist es üblich, Wörter zu „verben" oder zu „verbifizieren": Ein Adjektiv wird zu einem Verb, indem man das Suffix en anhängt.

In dieser Aufgabe übt deine Schwester das „Verben" von Wörtern, indem sie ein Adjektiv aus einem Satz extrahiert und in ein Verb umwandelt. Glücklicherweise sind alle Wörter, die hier umgewandelt werden müssen, „regelmäßig", sie brauchen keine Änderungen der Schreibweise, um das Suffix anzuhängen.

Implementiere die Funktion adjective_to_verb(<sentence>, <index>), die zwei Parameter nimmt. Einen sentence mit dem Vokabelwort und den index des Wortes, sobald der Satz aufgeteilt ist. Die Funktion sollte das extrahierte Adjektiv als Verb zurückgeben.

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

>>> adjective_to_verb('It got dark as the sun set.', 2)
'darken'
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Python Exercism

Bereit, mit Der Wortschatz der kleinen Schwester zu starten?

Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.