A str a Pythonban változtathatatlan sorozat, amely Unicode-kódpontokból áll.
Ezek lehetnek betűk, diakritikus jelek, pozicionáló karakterek, számok, pénznemszimbólumok, emodzsik, írásjelek, szóköz- és sortöréskarakterek, és még sok más.
Mivel változtathatatlan, a str objektum értéke a memóriában nem változik; a karakterláncot látszólag módosító metódusok egy új másolatot vagy a str objektum egy új példányát adják vissza.
Egy str literál aposztróffal ' vagy idézőjellel " hozható létre. Az escape \ karakter szükség szerint elérhető.
>>> 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.'
A többsoros karakterláncokat ''' vagy """ használatával hozzuk létre.
>>> 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.
'''
A karakterláncok a + operátorral fűzhetők össze.
Ezt a módszert mértékkel érdemes használni, mert nem túl hatékony, és nehéz karbantartani.
language = "Ukrainian"
number = "nine"
word = "дев'ять"
sentence = word + " " + "means" + " " + number + " in " + language + "."
>>> print(sentence)
...
"дев'ять means nine in Ukrainian."
Ha egy list, tuple, set vagy más, egyedi karakterláncokból álló gyűjteményt egyetlen str-ré kell összevonni, akkor a <str>.join(<iterable>) jobb választás:
# 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'
A str-en belüli kódpontokra balról egy 0-based index számmal hivatkozhatsz:
creative = '창의적인'
>>> creative[0]
'창'
>>> creative[2]
'적'
>>> creative[3]
'인'
Az indexelés jobbról is működik, -1-based index-szel kezdve:
creative = '창의적인'
>>> creative[-4]
'창'
>>> creative[-2]
'적'
>>> creative[-1]
'인'
A Pythonban nincs külön „karakter” vagy „rune” típus, ezért egy karakterlánc indexelése egy 1 hosszúságú új str-t eredményez:
>>> website = "exercism"
>>> type(website[0])
<class 'str'>
>>> len(website[0])
1
>>> website[0] == website[0:1] == 'e'
True
A rész-sztringek szeleteléses jelöléssel, a <str>[<start>:stop:<step>] használatával választhatók ki, ami egy új karakterláncot eredményez.
Az eredmény nem tartalmazza a stop indexet.
Ha nincs megadva start, akkor a kezdőindex 0 lesz.
Ha nincs megadva stop, akkor a stop index a karakterlánc vége lesz.
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]
'🌙🌙🌙🌙'
A karakterláncok kisebb darabokra is bonthatók a <str>.split(<separator>) segítségével, amely rész-sztringek list-jét adja vissza.
A listát ezután szükség esetén tovább indexelheted vagy bonthatod.
Ha a <str>.split()-et argumentumok nélkül használod, a karakterláncot szóközök mentén bontja fel.
>>> 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']
A <str>.split() elválasztója egynél több karakter is lehet.
A felbontáshoz a teljes karakterláncot veszi alapul.
>>> colors = """red,
orange,
green,
purple,
yellow"""
>>> colors.split(',\n')
['red', 'orange', 'green', 'purple', 'yellow']
A karakterláncok minden általános sorozatműveletet támogatnak.
Az egyes kódpontokon ciklusban, a for item in <str> segítségével mehetsz végig.
Az indexeket az elemeikkel együtt ciklusban, a for index, item in enumerate(<str>) segítségével járhatod be.
>>> 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 : ့
Segítesz a húgodnak az angol szókincs házijában, amit nagyon unalmasnak talál. Az osztálya éppen azt tanulja, hogyan hozzon létre új szavakat előtagok és utótagok hozzáadásával. A tanár egy megadott szóhalmazból olyan helyesen átalakított szavakat vár, amelyek helyesírással is rendben vannak, úgy, hogy az előtag a szó elejére, az utótag a szó végére kerül.
A feladatnak négy részfeladata van, és mindegyikhez egy szöveg- vagy szóhalmaz tartozik.
Az angolban az egyik leggyakoribb előtag az un, amelynek jelentése „nem”.
Ebben a részfeladatban a húgodnak tagadó, vagyis „nem” jelentésű szavakat kell alkotnia úgy, hogy un-t tesz eléjük.
Valósítsd meg az add_prefix_un(<word>) függvényt, amely egy word paramétert kap, és visszaad egy új, un előtaggal ellátott szót:
>>> add_prefix_un("happy")
'unhappy'
>>> add_prefix_un("manageable")
'unmanageable'
Négy további gyakori előtagot tanul a húgod osztálya:
en (jelentése: »betenni« vagy »befedni valamivel«),
pre (jelentése: »előtte« vagy »előre«),
auto (jelentése: »ön-« vagy »azonos«),
és inter (jelentése: »között« vagy »körében«).
Ebben a részfeladatban az osztály ezekkel az előtagokkal alkot szókincscsoportokat, hogy együtt lehessen őket tanulni. Minden előtag egy listában szerepel a hozzá tartozó gyakori szavakkal. A tanulóknak alkalmazniuk kell az előtagot, és létre kell hozniuk egy stringet, amely az összes szóra alkalmazott előtagot mutatja.
Valósítsd meg a make_word_groups(<vocab_words>) függvényt, amely egy vocab_words paramétert kap a következő formában:
[<prefix>, <word_1>, <word_2> .... <word_n>], és egy olyan stringet ad vissza, amelyben az előtag minden szóra alkalmazva látszik, így:
'<prefix> :: <prefix><word_1> :: <prefix><word_2> :: <prefix><word_n>'.
Itt nem szükséges for vagy while ciklust írni a bemenet feldolgozásához.
Gondold át alaposan, milyen string-metódusokat (és elválasztókat) használhatsz helyette.
>>> 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'
A ness gyakori utótag, jelentése valaminek az állapota.
Ebben a részfeladatban a húgodnak meg kell keresnie az eredeti alapszót úgy, hogy eltávolítja a ness utótagot.
De persze vannak azok a kellemetlen helyesírási szabályok: ha az alapszó eredetileg úgy végződött, hogy egy mássalhangzót »y« követett, akkor az »y« »i«-vé változott.
A ness eltávolításakor helyre kell állítani az »y«-t ezekben az alapszavakban. Pl.: happiness --> happi --> happy.
Valósítsd meg a remove_suffix_ness(<word>) függvényt, amely egy word szót kap, és visszaadja az alapszót a ness utótag nélkül.
>>> remove_suffix_ness("heaviness")
'heavy'
>>> remove_suffix_ness("sadness")
'sad'
Az utótagokat gyakran arra használjuk, hogy megváltoztassuk, melyik szófajhoz tartozik egy szó.
Az angolban gyakori az „igésítés” (verbing vagy verbifying), amikor egy melléknév en utótag hozzáadásával igévé válik.
Ebben a részfeladatban a húgod szavak „igésítését” gyakorolja: kivesz egy melléknevet egy mondatból, és igévé alakítja. Szerencsére itt minden átalakítandó szó „szabályos”, vagyis az utótag hozzáadásához nem kell a helyesírást megváltoztatni.
Valósítsd meg az adjective_to_verb(<sentence>, <index>) függvényt, amely két paramétert kap.
Az első egy sentence mondat, amely a szókincsbeli szót használja, a második pedig a szó index-e, miután a mondatot szétbontottuk.
A függvény a kivett melléknevet igeként adja vissza.
>>> adjective_to_verb('I need to make that bright.', -1 )
'brighten'
>>> adjective_to_verb('It got dark as the sun set.', 2)
'darken'
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Python nyelvet 17 fogalom146 feladat segítségével, valódi emberi mentorálással, mindez ingyen.