Werken met strings in Python
BeginnerLes 5 van 10 in Cursus Inleiding tot programmeren met Python
Wat je leert
- Schrijf stringliterals, meet en combineer strings en gebruik indexen en uitsneden om elk teken of deel van een tekst te benaderen.
- Schrijf stringliterals en combineer stringsMaak strings met aanhalingstekens, escapesequenties en driedubbele aanhalingstekens, bepaal hun lengte met
len()en combineer ze met+en*. - Selecteer afzonderlijke tekens met een indexGebruik positieve en negatieve indexen om elk teken van een string te lezen en voorkom één-ernaast-fouten en fouten met lege strings die een
IndexErroropwerpen. - Selecteer delen van een string met uitsnedenMaak deelstrings met
[start:stop]en[start:stop:step], gebruik weggelaten en negatieve posities en voorspel precies welke tekens een uitsnede bevat.
- Schrijf stringliterals en combineer strings
- Doorloop een string om te tellen, te zoeken en tekst op te bouwen, en houd er rekening mee dat de tekens van een string nooit ter plaatse kunnen worden gewijzigd.
- Doorloop de tekens van een string met een lusDoorloop elk teken met lussen met
forenwhile, gebruik posities waar die van belang zijn en pas patronen voor tellen, zoeken en accumuleren toe op tekst. - Maak nieuwe strings in plaats van bestaande strings te wijzigenLeg uit wat het betekent dat strings onwijzigbaar zijn en maak gewijzigde tekst met uitsneden, concatenatie en hernieuwde toekenning.
- Doorloop de tekens van een string met een lus
- Roep stringmethoden aan om hoofdletters en kleine letters te wijzigen en tekst op te schonen, deelstrings te vinden en te tellen en te controleren wat een string bevat voordat je die gebruikt.
- Wijzig hoofdletters en kleine letters en schoon tekst op met methodenRoep methoden aan met puntnotatie om hoofdletters en kleine letters te wijzigen, ongewenste tekens te verwijderen, tekst te vervangen en strings op te vullen, en schakel meerdere methoden aaneen.
- Zoek tekst binnen een stringControleer of een deelstring aanwezig is, zoek waar die begint, tel hoe vaak die voorkomt en gebruik de gevonden posities om tekst uit te snijden.
- Toets en vergelijk stringsControleer waarmee een string begint, waarmee die eindigt of waaruit die bestaat, valideer invoer voordat je die omzet en voorspel hoe Python strings vergelijkt en ordent.
- Wijzig hoofdletters en kleine letters en schoon tekst op met methoden
- Splits een tekstregel in woorden of velden met
split()en voeg delen weer samen tot één string metjoin().- Splits een string in een lijst met delenGebruik
split()met en zonder scheidingstekst, beperk het aantal splitsingen en zet de delen van een regel om in de waarden die een programma nodig heeft. - Voeg strings samen met scheidingstekstCombineer veel strings tot één string met
join(), kies de scheidingstekst, zet elementen die geen string zijn eerst om en gebruiksplit()samen metjoin()om tekst opnieuw vorm te geven.
- Splits een string in een lijst met delen
- Maak duidelijke uitvoer door waarden met f-strings in tekst in te voegen, getallen, datums en tijden leesbaar op te maken en resultaten in kolommen uit te lijnen.
- Voeg waarden in tekst in met f-stringsSchrijf f-strings die de waarden van variabelen en expressies in tekst plaatsen en herken de oudere stijlen
format()en%in bestaande code. - Maak getallen, datums en tijden leesbaar opVoeg opmaakspecificaties toe om decimalen, afronding, scheidingstekens voor duizendtallen, percentages, plus- en mintekens en voorloopnullen te bepalen, en stel datums en tijden in Amerikaanse notatie samen.
- Lijn uitvoer uit in kolommenStel veldbreedtes, uitlijning en opvultekens in, kort lange tekst in en combineer deze opties om uitgelijnde tabellen en kassabonnen af te drukken.
- Voeg waarden in tekst in met f-strings
Strings in Python: uitleg
1Maak strings en selecteer delen ervan
Tekst in een programma heeft zowel inhoud als positie. Een naam kan een spatie bevatten, een bericht kan een regelafbreking bevatten en een code kan de eerste twee letters gescheiden houden van het getal. Je kunt deze strings maken, combineren en precies de tekens selecteren die je nodig hebt. Maak eerst onderscheid tussen de manier waarop tekst in Python wordt geschreven en de waarde die de tekst bevat. Gebruik daarna een beeld van de posities om te voorspellen wat indexen en uitsneden opleveren.
1.1 Schrijf stringliterals en combineer strings
Een string is een sequentie van tekens met het type str. Een string kan een naam, een zin, een code of helemaal geen tekens bevatten. Python bewaart de tekens op volgorde, inclusief spaties en leestekens.
Schrijf de waarde tussen bij elkaar passende aanhalingstekens
Enkele en dubbele aanhalingstekens maken hetzelfde soort waarde: 'hello' en "hello" zijn gelijk. De buitenste aanhalingstekens geven de grenzen aan; het zijn geen tekens in de waarde. Kies aanhalingstekens die eventuele aanhalingstekens binnen de tekst goed leesbaar houden:
message = "It's late"
reply = 'She said "yes"'
empty = ""
In 'It's late' sluit de apostrof de string te vroeg af, wat een SyntaxError veroorzaakt. Dubbele aanhalingstekens lossen dit op, of je kunt 'It\'s late' schrijven. Gebruik rechte aanhalingstekens in code.
Sla regelafbrekingen en backslashes op
Een escapesequentie begint met een backslash. Python leest \n als één regeleinde, \t als één tab en \\ als één backslash. Geëscapete aanhalingstekens, \' en \", plaatsen aanhalingstekens in tekst.
text = "a\nb"
print(len(text)) # 3
print(text)
De laatste aanroep drukt a en b op afzonderlijke regels af. De waarde heeft drie tekens: a, een regeleinde en b. Escapesequenties worden verwerkt wanneer Python de literal leest. De shell toont een representatie met aanhalingstekens en waar nodig escapesequenties; print() toont de tekens zelf. Zo wordt "\x41" bijvoorbeeld "A", zodat de shell de oorspronkelijke escapesequentie niet hoeft te tonen.
Met driedubbele aanhalingstekens kan een literal over meerdere regels lopen. Elke regelafbreking daarin wordt een regeleindeteken:
notice = """Door closed
Use side entrance"""
Een ruwe string heeft een r vóór de aanhalingstekens. In r"C:\new" blijven de backslash en n afzonderlijk, wat zes tekens oplevert. In "C:\new" wordt \n een regeleinde, wat vijf tekens oplevert. Ruwe stringliterals zijn handig als backslashes in de tekst thuishoren.
Meet en combineer tekst
len() telt elk teken, ook spaties: len("Hi there!") is 9 en len("") is 0. Preciezer gezegd telt de functie Unicodecodepunten. len("café") is 4 als é één codepunt is; len("👍🏽") is 2, ook al ziet de emoji eruit als één symbool.
Gebruik + om strings samen te voegen en * om een string te herhalen:
first = "Ada"
last = "Lovelace"
full = first + " " + last # "Ada Lovelace"
rule = "-" * 10 # ten dashes
Concatenatie voegt niets voor je in. Zonder " " worden de namen "AdaLovelace". Als je "ab" nul keer herhaalt, krijg je de lege string.
Bepaal of cijfers tekst of getallen zijn
Beide operanden van stringconcatenatie moeten strings zijn. "Age: " + 30 werpt een TypeError op; "Age: " + str(30) geeft "Age: 30". Omgekeerd geeft input() tekst terug: "3" + "4" geeft "34". Om hun numerieke waarden op te tellen, zet je ze eerst om: int("3") + int("4") geeft 7.
Belangrijkste punten
- Een string bevat een geordende sequentie van tekens; de buitenste aanhalingstekens zijn syntaxis.
is één regeleindeteken, terwijl ruwe stringliterals de backslash en de daaropvolgende letter afzonderlijk houden.len()telt codepunten, inclusief spaties en leestekens.+voegt strings samen zonder spaties toe te voegen;*herhaalt een string.- Zet tekst om in getallen om te rekenen en getallen in tekst om strings samen te voegen.
1.2 Selecteer afzonderlijke tekens met een index
Een index selecteert één teken op basis van zijn positie. Python begint bij nul te tellen, dus de positie van een teken is één minder dan de plaats bij een gewone telling vanaf links.
Breng de posities in beeld
Voor word = "Python" heeft elk teken een niet-negatieve en een negatieve index:
| Teken | P | y | t | h | o | n |
|---|---|---|---|---|---|---|
| Vanaf het begin | 0 | 1 | 2 | 3 | 4 | 5 |
| Vanaf het einde | -6 | -5 | -4 | -3 | -2 | -1 |
word = "Python"
print(word[0]) # P
print(word[1]) # y
print(word[-1]) # n
De vierkante haakjes achter de string selecteren het teken. Het resultaat is een string met lengte één: Python heeft geen apart tekentype. Je kunt geselecteerde tekens samenvoegen, dus word[0] + word[-1] geeft "Pn".
Voor lengte n lopen de geldige indexen van -n tot en met n - 1 als n > 0. Niet-negatieve indexen tellen vanaf het begin; negatieve indexen tellen vanaf het einde. Een index -k selecteert hetzelfde teken als n - k; in dit woord van zes tekens selecteren -2 en 4 allebei "o".
Houd de lengte en de laatste index uit elkaar
len(word) is 6, maar word[6] werpt een IndexError op: er is geen zevende teken. Het laatste teken is word[len(word) - 1], of eenvoudig word[-1]. Te ver gaan vanaf een van beide uiteinden levert een fout op; ook word[-7] werpt een IndexError op.
Een index moet een geheel getal zijn. word[1.0] werpt een TypeError op, ook al heeft het zwevendekommagetal een gehele waarde. Gebruik // bij het berekenen van een middelste positie:
word = "Pyt"
middle = len(word) // 2 # 1
print(word[middle]) # y
De operator / zou 1.5 opleveren, waarmee je geen string kunt indexeren. Bij een oneven lengte selecteert len(word) // 2 het middelste teken. Bij een even lengte selecteert dit het rechter van de twee middelste tekens: "Python"[3] is "h".
Maak initialen van eerste tekens
first = "Grace"
last = "Hopper"
initials = first[0] + last[0]
print(initials) # GH
Van elke naam wordt het teken op index 0 gebruikt. Met first[-1] zou je "e" krijgen, de laatste letter. Voor deze methode moet elke naam minstens één teken bevatten.
Controleer lege invoer vóór indexering
De lege string heeft lengte nul en geen geldige tekenindex. ""[0] werpt een IndexError op. Een lengtecontrole kan voorkomen dat een programma een teken leest dat niet bestaat:
line = input("Comment: ")
if len(line) > 0 and line[0] == "#":
print("Comment line")
Python evalueert and van links naar rechts. Als de lengtecontrole onwaar is, slaat Python line[0] over. Als je die twee controles omdraait, wordt eerst de onveilige indexering geprobeerd. Als je alleen wilt weten of een regel begint met "#", werkt line.startswith("#") ook bij lege invoer en geeft het False terug.
Belangrijkste punten
- Index 0 selecteert het eerste teken; index -1 selecteert het laatste.
- De laatste niet-negatieve index is
len(text) - 1. - Indexering geeft een string van één teken terug en werpt een
IndexErrorop voor een ontbrekende positie. - Gebruik een geheel getal als index en controleer op lege invoer voordat je een teken selecteert.
1.3 Selecteer delen van een string met uitsneden
Een uitsnede selecteert een aaneengesloten reeks tekens en geeft die terug als string. Hiermee kun je een beginstuk nemen, een einde verwijderen of velden scheiden die vaste posities innemen.
De startwaarde telt mee; de eindgrens niet
Schrijf text[start:stop]. Met s = "Monty Python" geeft s[0:5] de string "Monty" en s[6:12] de string "Python". De spatie staat op index 5, dus de tweede uitsnede begint bij 6.
Stel je de getallen van een uitsnede voor als tussenruimtes. Tussenruimte 0 staat vóór het eerste teken en tussenruimte 5 na de eerste vijf. Alles daartussen nemen levert vijf tekens op. Voor 0 <= start <= stop <= len(text) is de lengte stop - start.
word = "Monty"
print(word[0:4]) # Mont
print(word[0:5]) # Monty
De eindpositie is de eerste positie die wordt weggelaten. Door één op te tellen bij de gewenste laatste index neem je dat laatste teken mee.
Laat een grens weg
| Uitsnede | Betekenis | Resultaat voor s |
|---|---|---|
s[:5] | Begin tot en met positie 4 | "Monty" |
s[6:] | Positie 6 tot en met het einde | "Python" |
s[:] | Volledige string | "Monty Python" |
s[-6:] | Laatste zes tekens | "Python" |
s[:-1] | Alles behalve het laatste teken | "Monty Pytho" |
Op elke splitsingspositie k geeft s[:k] + s[k:] de string s terug. De uitsneden sluiten op dezelfde tussenruimte aan, zonder ontbrekend of herhaald teken.
Uitsnedegrenzen voorbij de uiteinden worden teruggebracht tot de uiteinden. "cat"[1:100] is "at"; "cat"[5:] is "". Voor een voorwaartse uitsnede geeft een startwaarde op of voorbij de eindgrens een lege string, zoals in s[4:2]. Anders dan bij een index voor één teken werpt een uitsnede buiten het bereik geen IndexError op.
Kies een stapgrootte
De derde plaats in text[start:stop:step] bepaalt hoe ver je tussen geselecteerde posities opschuift:
letters = "abcdefgh"
print(letters[::2]) # aceg
print(letters[1::2]) # bdfh
print(letters[::-1]) # hgfedcba
Een negatieve stapgrootte loopt achteruit. Als beide grenzen zijn weggelaten, begint [::-1] bij het laatste teken en doorloopt het alle tekens in omgekeerde volgorde. Een stapgrootte van nul werpt een ValueError op. De richting moet passen bij de grenzen: de regel hierboven dat een startwaarde op of voorbij de eindgrens een leeg resultaat geeft, geldt voor een positieve stapgrootte.
Pas uitsneden toe op een vaste indeling
d = "2026-07-04"
year = d[:4]
month = d[5:7]
day = d[8:10]
print(month + "/" + day + "/" + year) # 07/04/2026
De posities werken omdat deze indeling altijd vier cijfers voor het jaar en twee voor de maand en dag gebruikt. Tekst met wisselende veldlengtes moet je doorzoeken of splitsen.
Omkering levert ook een palindroomtest op: word == word[::-1]. "level" voldoet, maar "Level" niet, omdat hoofdletters en kleine letters meetellen. Ken clean = word.lower() toe en toets clean == clean[::-1] om hoofdletters en kleine letters buiten beschouwing te laten.
Belangrijkste punten
- Een uitsnede bevat de startpositie, maar niet de eindpositie.
- Met weggelaten grenzen en negatieve posities selecteer je gemakkelijk begin- en eindstukken.
- Uitsnedegrenzen buiten het bereik worden teruggebracht tot de uiteinden; een stapgrootte van nul werpt een
ValueErrorop. - Een negatieve stapgrootte loopt achteruit;
[::-1]keert de volledige string om. - Uitsneden op vaste posities zijn afhankelijk van een consistente tekstindeling.
2Verwerk strings teken voor teken
Een lus kan elk teken bekijken, een telling bijhouden, stoppen bij de eerste overeenkomst of een nieuw bericht opbouwen. Dezelfde kleine patronen werken voor veel teksttaken: klinkers tellen, een cijfer vinden of geselecteerde letters verbergen. Strings hebben bovendien een vaste waarde zodra ze zijn gemaakt. Door een lus iteratie voor iteratie te volgen, zie je hoe een programma gewijzigde tekst kan maken terwijl de oorspronkelijke string intact blijft, en waarom een waarde aan een variabele toekennen iets anders is dan een teken wijzigen.
2.1 Doorloop de tekens van een string met een lus
Gebruik een lus wanneer over elk teken een beslissing moet worden genomen. De lus kan overeenkomsten tellen, hun posities gebruiken, bij de eerste overeenkomst stoppen of de tekens verzamelen die in een resultaat thuishoren.
Doorloop tekens rechtstreeks
for ch in "hi!":
print(ch)
De lusinhoud wordt drie keer uitgevoerd, met ch achtereenvolgens gelijk aan "h", "i" en "!". Bij de lege string wordt de lusinhoud nul keer uitgevoerd. Een lus die de tekens rechtstreeks doorloopt, heeft geen index nodig als je alleen het huidige teken gebruikt.
Initialiseer voor een telling de teller vóór de lus en verhoog die alleen als het teken aan de voorwaarde voldoet:
text = "Programming in Python"
count = 0
for ch in text.lower():
if ch in "aeiou":
count += 1
print(count) # 5
Door alles naar kleine letters om te zetten, voldoen ook klinkers in hoofdletters aan de voorwaarde. De teststring bepaalt welke klinkers worden geteld; y staat er niet in. Als je count binnen de lus opnieuw op nul zou zetten, zou het totaal van eerdere iteraties verloren gaan.
Gebruik posities als naburige tekens van belang zijn
range(len(text)) levert de indexen van nul tot en met de laatste geldige index. Voor een taak waarvoor je zowel de positie als het teken nodig hebt, levert enumerate(text) ze samen:
for i, ch in enumerate("abc"):
print(i, ch)
Dit drukt 0 a, daarna 1 b en vervolgens 2 c af. De twee lusvariabelen krijgen de index en het teken van elk paar.
Om buren te vergelijken, kan de laatste index niet de huidige positie zijn, omdat er geen volgend teken is:
text = "bookkeeper"
pairs = 0
for i in range(len(text) - 1):
if text[i] == text[i + 1]:
pairs += 1
print(pairs) # 3
De overeenkomsten zijn oo, kk en ee. Met range(len(text)) zou de laatste iteratie text[len(text)] proberen en een IndexError opwerpen.
Houd een positie bij met while
i = 0
while i < len(text):
print(text[i])
i += 1
De voorwaarde gebruikt strikt <: positie len(text) ligt voorbij het einde. De verhoging brengt de lus dichter bij het einde; als je die weglaat, blijft de lus bij niet-lege tekst eindeloos hetzelfde teken lezen. Om achteruit te lopen, begin je bij len(text) - 1, ga je door zolang i >= 0 en trek je er bij elke iteratie één van af.
Zoek of verzamel
Stop bij het eerste cijfer in "Room 42B" zodra een overeenkomst is gebruikt:
for ch in "Room 42B":
if ch.isdigit():
print(ch) # 4
break
Zonder break zouden beide cijfers worden afgedrukt. Voor een eenvoudige aanwezigheidscontrole geeft "4" in text al ja of nee als antwoord.
Om tekst te verzamelen, begin je met result = "" en voeg je elk gewenst teken toe. Voor "a b c" bouw je "abc" op door alleen toe te voegen als ch != " ". De toekenning ch = ch.upper() binnen een lus verandert alleen de lusvariabele; ze verandert niet de tekens die in text zijn opgeslagen.
Belangrijkste punten
- Een rechtstreekse
for-lus doorloopt elk teken op volgorde. - Initialiseer tellers en accumulatoren vóór de lus.
enumerate()levert elke index samen met het bijbehorende teken.- Stop één positie eerder wanneer je
text[i + 1]leest. - Een
while-lus heeft een veilige grens en een bijwerking van de positie nodig. breakstopt een zoekactie bij de eerste overeenkomst.
2.2 Maak nieuwe strings in plaats van bestaande strings te wijzigen
Strings zijn onwijzigbaar: hun tekens kunnen niet worden veranderd nadat de string bestaat. Een programma dat tekst lijkt te wijzigen, maakt een andere string en kiest welke variabele daarnaar verwijst.
Lees een teken, maar ken er niets aan toe
name = "Jane"
name[0] = "D" # TypeError
Met de index kun je "J" lezen, maar je kunt er geen waarde aan toekennen. Ook del name[0] werpt een TypeError op. Om "Dane" te krijgen, combineer je het gewenste eerste teken met het ongewijzigde einde:
name = "Jane"
name = "D" + name[1:]
print(name) # Dane
Python evalueert eerst de rechterkant en maakt daarbij een nieuwe string. Daarna laat Python name naar dat resultaat verwijzen.
Vervang of voeg in op een bekende positie
Voor een geldige niet-negatieve index i gebruiken deze expressies verschillende uitsneden aan de rechterkant:
| Taak | Expressie |
|---|---|
Teken op i vervangen | text[:i] + new + text[i + 1:] |
Vóór teken op i invoegen | text[:i] + new + text[i:] |
Bij vervanging wordt het oude teken overgeslagen; bij invoeging blijft het behouden. Met text = "cat", i = 1 en new = "X" geeft vervanging "cXt", terwijl invoeging "cXat" geeft.
Zet een negatieve index om naar de niet-negatieve tegenhanger voordat je dit vervangingspatroon gebruikt. Voor het laatste teken van "cat" is i = len(text) - 1 gelijk aan 2. Als je -1 rechtstreeks in text[i + 1:] invult, wordt dat text[0:]. Daardoor wordt de volledige oude string toegevoegd en krijg je "caXcat".
Bewaar het resultaat van een methode
Bewerkingsmethoden volgen dezelfde regel van onwijzigbaarheid:
msg = "hello"
msg.upper()
print(msg) # hello
msg = msg.upper()
print(msg) # HELLO
De eerste aanroep berekent een resultaat dat het programma weggooit. De toekenning bewaart het tweede resultaat. Stringmethoden wijzigen de oorspronkelijke string nooit, maar hun retourtypen verschillen: upper() geeft een string terug, find() een geheel getal en isdigit() een booleaanse waarde.
Volg twee namen voor één waarde
Na a = "cat" en b = a verwijzen beide variabelen naar "cat". De uitvoering van a = a + "s" geeft a de nieuwe waarde "cats"; b verwijst nog steeds naar "cat". Geen enkel teken in de gedeelde oude string is veranderd. a += "s" voert voor een string dezelfde soort hernieuwde toekenning uit.
Bouw een gewijzigde waarde op in een lus
word = "secret"
masked = ""
for ch in word:
if ch in "aeiou":
masked += "*"
else:
masked += ch
print(masked) # s*cr*t
print(word) # secret
Elke iteratie breidt masked uit met één gekozen teken. Als je in plaats daarvan elk teken vooraan zet met result = ch + result, wordt de tekst omgekeerd: de iteraties over "drawer" bouwen "d", "rd", "ard", "ward", "eward" en "reward" op.
Herhaalde concatenatie is handig voor korte voorbeelden. Als delen al in een lijst staan, bouwt "".join(pieces) rechtstreeks één resultaat op en kan het ook scheidingstekst tussen de delen plaatsen.
Belangrijkste punten
- Een string kan niet worden gewijzigd door een element toe te kennen of te verwijderen.
- Vervangen en invoegen bouwen nieuwe strings op uit uitsneden.
- Bewaar het resultaat van een bewerking door het toe te kennen.
- Als je opnieuw een waarde aan één variabele toekent, blijven andere variabelen naar de oude waarde verwijzen.
- Een accumulator bouwt een nieuwe string op, telkens met één gekozen deel.
3Bewerk, doorzoek en toets tekst met stringmethoden
Met stringmethoden kun je nuttige vragen over tekst stellen en opgeschoonde versies ervan maken. Een programma moet misschien extra spaties in een antwoord accepteren, een scheidingsteken vinden of controleren of een hoeveelheid kan worden omgezet in een getal. Kies een methode op basis van het resultaat dat je nodig hebt: gewijzigde tekst, een positie, een telling of een booleaanse test. Let op exacte overeenkomsten, de waarde die wordt teruggegeven als een zoekactie mislukt en het verschil tussen tekstvolgorde en numerieke volgorde.
3.1 Wijzig hoofdletters en kleine letters en schoon tekst op met methoden
Een methode is een functie die aan een waarde is verbonden. Stringmethoden voeren veelvoorkomende taken uit, zoals hoofdletters en kleine letters wijzigen, invoer aan de randen opschonen en tekst vervangen. Elke aanroep geeft een resultaat terug en laat de oorspronkelijke string ongewijzigd.
Roep een methode aan met puntnotatie
Schrijf value.method(arguments), zoals in "hello".upper(). De ronde haakjes zorgen ervoor dat de aanroep wordt uitgevoerd. name.upper zonder haakjes verwijst naar de methode zelf; het levert geen tekst in hoofdletters op. Met upper(name) wordt geen zelfstandige functie met de naam upper gevonden. Gebruik dir("") om stringmethoden te tonen en help(str.upper) om over een methode te lezen.
Kies een bewerking voor hoofdletters en kleine letters
| Methode | Resultaat voor het voorbeeld |
|---|---|
"Hello".upper() | "HELLO" |
"Hello".lower() | "hello" |
"Hello".swapcase() | "hELLO" |
"the old man".title() | "The Old Man" |
"hELLO wORLD".capitalize() | "Hello world" |
capitalize() wijzigt het eerste teken en zet de rest om in kleine letters; title() begint opnieuw met woorden na tekens die geen letters zijn. Daardoor wordt "they're".title() gelijk aan "They'Re", dus automatisch hoofdletters plaatsen in titels moet je soms controleren.
Voor vergelijkingen zonder onderscheid tussen hoofdletters en kleine letters verwerkt casefold() meer gevallen in verschillende talen dan lower(). "Straße".lower() is "straße", terwijl "Straße".casefold() gelijk is aan "strasse". Pas hoofdletternormalisatie toe op beide strings voordat je ze vergelijkt.
Schoon de uiteinden van tekst op
strip() verwijdert witruimte aan het begin en einde, waaronder spaties, tabs en regeleinden. De spatiëring binnen de tekst blijft behouden: " New York \n".strip() is "New York". lstrip() schoont alleen het linkeruiteinde op; rstrip() alleen het rechteruiteinde.
Met een argument verwijdert de methode de opgegeven tekens herhaaldelijk van de uiteinden. Ze verwijdert geen exact woord:
print("...Wow!!!".strip(".!")) # Wow
print("report.txt".rstrip(".txt")) # repor
print("report.txt".removesuffix(".txt")) # report
De laatste t in report behoort ook tot de verzameling te verwijderen tekens en verdwijnt dus. removeprefix() en removesuffix() verwijderen exacte tekst aan een uiteinde; ze zijn beschikbaar in Python 3.9 en later.
Vervang overeenkomsten en schakel bewerkingen aaneen
replace(old, new) vervangt elke exacte overeenkomst. Een derde argument beperkt hoeveel overeenkomsten worden gewijzigd: "a-b-c".replace("-", "", 1) geeft "ab-c". Een lege vervanging verwijdert overeenkomsten. Hoofdletters en kleine letters tellen mee, dus "Cat cat".replace("cat", "dog") geeft "Cat dog".
answer = " YES \n"
answer = answer.strip().lower()
print(answer == "yes") # True
De aanroepen worden van links naar rechts uitgevoerd: strip() geeft "YES" terug, daarna geeft lower() "yes" terug. Een keten werkt als de volgende methode past bij het type van het vorige resultaat. Een zoekresultaat is een geheel getal en ondersteunt dus geen methoden voor het opschonen van strings.
Voor opvulling geeft "7".zfill(3) de string "007", voegt "Total".ljust(8) rechts drie spaties toe en geeft "Hi".center(8, "*") de string "***Hi***". rjust() vult links op. Deze breedtes zijn minima; langere tekst blijft volledig behouden.
Belangrijkste punten
- Gebruik puntnotatie en ronde haakjes om een stringmethode aan te roepen.
- Bewerkingen voor hoofdletters en kleine letters hebben verschillende taken;
casefold()ondersteunt vergelijkingen tussen talen. strip(chars)verwijdert een verzameling tekens van de uiteinden; voor exacte voor- of achtervoegsels zijnremoveprefix()ofremovesuffix()nodig.replace()zoekt naar exacte tekst en kan het aantal wijzigingen beperken.- Aaneengeschakelde bewerkingen werken van links naar rechts op elke teruggegeven string.
- Opvullen voegt tekens toe tot een minimumbreedte is bereikt.
3.2 Zoek tekst binnen een string
Zoeken kan drie verschillende vragen beantwoorden: of tekst voorkomt, waar die begint en hoe vaak die voorkomt. Kies het resultaat dat past bij de beslissing die je programma moet nemen.
Kies een zoekresultaat
| Hulpmiddel | Resultaat | Als er geen overeenkomst is |
|---|---|---|
sub in text | Aanwezigheid als True of False | False |
text.find(sub) | Eerste startindex | -1 |
text.rfind(sub) | Laatste startindex | -1 |
text.index(sub) | Eerste startindex | Werpt ValueError op |
text.count(sub) | Aantal niet-overlappende overeenkomsten | 0 |
Een deelstring is een aaneengesloten reeks tekens. "py" in "happy" is True, maar "hpy" in "happy" is False. De overeenkomst is hoofdlettergevoelig: "Py" in "python" is False. not in keert de aanwezigheidscontrole om. De lege string komt in elke string voor.
Vind het juiste voorkomen
text = "banana"
print(text.find("an")) # 1
print(text.find("an", 2)) # 3
print(text.rfind("an")) # 3
De optionele startpositie slaat eerdere mogelijkheden over. De teruggegeven index telt nog steeds vanaf het begin van de volledige string. index() geeft dezelfde positie terug als er een overeenkomst is, maar de fout bij een ontbrekende overeenkomst maakt de methode nuttig als afwezigheid wijst op een onverwacht probleem.
Controleer een positie voordat je een uitsnede maakt
email = "maria.lopez@example.org"
at = email.find("@")
if at != -1:
user = email[:at]
domain = email[at + 1:]
print(user) # maria.lopez
print(domain) # example.org
De zoekactie geeft 11 terug. De eerste uitsnede stopt vóór @; de tweede begint één teken erna. Als de markering zou ontbreken, zou at gelijk zijn aan -1. Als je dat als uitsnedegrens gebruikt, wordt ongemerkt tekst aan het einde geselecteerd. Handel een ontbrekende markering daarom af voordat je delen selecteert.
Gebruik if text.find("x"): niet als aanwezigheidscontrole. Een overeenkomst op index 0 geldt als onwaar in een voorwaarde, terwijl de waarde -1 voor een ontbrekend resultaat als waar geldt. Gebruik if "x" in text: of vergelijk de positie expliciet met -1.
Zoek vanaf een bekende markering
Voor line = "Order #4521 shipped" volgt het getal op # en eindigt het bij de volgende spatie:
start = line.find("#") + 1
end = line.find(" ", start)
number = line[start:end]
print(number) # 4521
Hier zijn beide markeringen aanwezig. Door de tweede zoekactie bij start te beginnen, sla je de eerdere spatie na Order over. Als markeringen kunnen ontbreken, controleer dan elk onbewerkt zoekresultaat voordat je er één bij optelt of een uitsnede maakt; één optellen bij -1 zou de mislukte zoekactie verhullen door er 0 van te maken.
Tel volledige overeenkomsten
"banana".count("a") is 3 en "banana".count("ana") is 1. De twee mogelijke overeenkomsten met ana overlappen, dus count() telt ze niet allebei. Evenzo is "aaaa".count("aa") gelijk aan 2.
Om hoofdletters en kleine letters buiten beschouwing te laten, zoek je in een omgezette versie, zoals "python" in sentence.lower(). De zoekactie zoekt nog steeds naar een exacte overeenkomst binnen die versie. Voor tellingen en aanwezigheidscontroles kun je de omgezette string rechtstreeks gebruiken; een index hoort bij de specifieke string die is doorzocht.
Belangrijkste punten
- Gebruik
invoor aanwezigheid, een zoekmethode voor de positie encount()voor de frequentie. find()enrfind()geven -1 terug als tekst ontbreekt;index()werpt eenValueErrorop.- Controleer een zoekresultaat voordat je het als index of uitsnedegrens gebruikt.
- Een startargument slaat eerdere overeenkomsten over, terwijl de indexen voor de volledige string behouden blijven.
count()telt niet-overlappende overeenkomsten.
3.3 Toets en vergelijk strings
Stringcontroles geven booleaanse waarden terug die een voorwaarde kunnen sturen. Ze helpen je invoer te accepteren die aan een regel voldoet en tekst in een consistente vorm te vergelijken.
Controleer de uiteinden of de tekens
startswith() en endswith() controleren exacte tekst aan de uiteinden. Met een tuple kan één controle meerdere eindstukken accepteren: name.endswith((".jpg", ".png")). De hoofdletters in "photo.PNG" zorgen ervoor dat die naam niet aan de controle voldoet, tenzij je hem eerst naar kleine letters omzet.
| Controle | Waar als de niet-lege string bestaat uit… |
|---|---|
isalpha() | Alleen letters |
isalnum() | Alleen letters of cijfers |
isdigit() | Alleen Unicodecijfertekens |
isdecimal() | Alleen decimale cijfertekens |
isspace() | Alleen witruimte |
Alle vijf geven False terug voor "". Letters hoeven niet Engels te zijn: "café".isalpha() is True. Door de spatie in "hello world" is isalpha() onwaar.
isupper() en islower() kijken naar tekens met een hoofdletter- en kleinelettervariant en vereisen er minstens één. "ABC1".isupper() is True; het cijfer verandert niets aan de hoofdletters. "123" heeft geen tekens met een hoofdletter- en kleinelettervariant, dus beide controles zijn onwaar.
Valideer vóór conversie
Een cijfercontrole beschrijft niet elk getal dat Python kan lezen. "-5".isdigit(), "3.5".isdigit() en " 42".isdigit() zijn onwaar omdat een plus- of minteken, punt of spatie geen cijfer is. Ook "²".isdigit() is waar, hoewel int("²") mislukt. isdecimal() wijst dat bovenschrift af en is geschikt voor invoer van een gewoon niet-negatief geheel getal.
text = input("Tickets: ").strip()
if text.isdecimal() and int(text) > 0:
print("Accepted")
else:
print("Enter a positive whole number")
De stringcontrole wordt eerst uitgevoerd. Als die onwaar is, slaat and de conversie over, zodat lege of niet-numerieke invoer veilig wordt afgehandeld. " 12 " wordt "12" en voldoet; "0" wordt veilig omgezet, maar voldoet niet aan de controle op een positieve waarde. Deze regel wijst invoer met een plus- of minteken of decimale punt bewust af.
Een regel voor gebruikersnamen kan lengte- en tekencontroles combineren: 3 <= len(name) <= 12 and name.isalnum(). "ada99" voldoet, "ada 99" voldoet niet aan de tekencontrole en "ad" voldoet niet aan de lengtecontrole.
Vergelijk opgeschoonde tekst
Voor gelijkheid zijn dezelfde tekens in dezelfde volgorde nodig. "Yes" == "yes" en "yes " == "yes" zijn onwaar. Voor antwoorden waarbij hoofdletters, kleine letters en witruimte aan de uiteinden geen rol mogen spelen, vergelijk je typed.strip().casefold() met expected.strip().casefold().
Ordening werkt teken voor teken. Het eerste verschillende Unicodecodepunt is beslissend. ord("A") is 65, ord("Z") is 90 en ord("a") is 97; chr(97) geeft "a". Dus "Zebra" < "apple" is waar. Als de ene string een voorvoegsel van de andere is, komt de kortere eerst: "app" < "apple".
Strings met cijfers gebruiken ook tekenvolgorde: "10" < "9" is waar omdat "1" vóór "9" komt. Zet ze om in getallen wanneer je hoeveelheden vergelijkt. Ook bij letters met een accent moet je opletten: ord("é") is 233, dus "école" > "zoo" is waar. Deze ingebouwde volgorde volgt codepunten, niet de woordenboekvolgorde van een taal.
Belangrijkste punten
- Stringcontroles geven booleaanse waarden terug; tekencontroles controleren ook of de string niet leeg is.
isdecimal()is strenger danisdigit()voor invoer die bedoeld is voorint().- Gebruik een tekencontrole vóór een beschermde numerieke conversie.
- Schoon beide strings op dezelfde manier op als hoofdletters, kleine letters en spaties aan de uiteinden geen rol mogen spelen.
- De ordening van strings gebruikt het eerste verschillende codepunt; voor numerieke volgorde zijn numerieke waarden nodig.
4Splits tekst in delen en voeg delen samen tot tekst
Een tekstregel bevat vaak meerdere nuttige delen: woorden in een bericht, velden in een record of delen van een code. Door te splitsen maak je van die regel een geordende collectie die je kunt bekijken, tellen en omzetten. Door samen te voegen maak je van delen één string met zelfgekozen scheidingstekst. De regels voor scheidingstekst bepalen of lege velden en de oorspronkelijke spatiëring behouden blijven. Die keuze is dus belangrijk wanneer je tekst opschoont of precies moet reconstrueren.
4.1 Splits een string in een lijst met delen
split() zet één string om in een lijst met strings. Een lijst is een geordende collectie tussen vierkante haakjes. Je kunt een element via een index lezen, de elementen met een lus doorlopen of ze tellen met len().
Kies witruimte of een exacte scheidingstekst
Zonder argument behandelt split() een reeks witruimte als één grens en negeert het witruimte aan beide uiteinden:
words = " the quick brown fox ".split()
print(words) # ['the', 'quick', 'brown', 'fox']
print(len(words)) # 4
print(words[0]) # the
Met expliciete scheidingstekst wordt bij elk exact voorkomen gesplitst. Opeenvolgende scheidingsteksten behouden een leeg veld:
fields = "red,green,,blue".split(",")
# ["red", "green", "", "blue"]
Het lege derde element kan een waarde voorstellen die is opengelaten. Het telt nog steeds als een element in de lijst.
| Expressie | Resultaat |
|---|---|
"a b".split() | ["a", "b"] |
"a b".split(" ") | ["a", "", "b"] |
"a,b".split(", ") | ["a,b"] |
Scheidingstekst kan meerdere tekens bevatten, maar die moeten allemaal overeenkomen. Als er geen scheidingstekst voorkomt, bevat het resultaat de volledige oorspronkelijke string als één element. Splitsen op een komma met spatie verschilt daarom van splitsen op een komma.
Beperk hoeveel tekst wordt gesplitst
Het tweede argument, maxsplit, beperkt het aantal splitsingen, niet het aantal elementen dat ontstaat:
print("key=value=more".split("=", 1))
# ["key", "value=more"]
print("archive.tar.gz".rsplit(".", 1))
# ["archive.tar", "gz"]
split() begint links; rsplit() begint rechts. Eén splitsing vanaf rechts scheidt de laatste bestandsextensie zonder bij eerdere punten te splitsen.
Lees velden en zet hoeveelheden om
line = "Lovelace,Ada,1815"
parts = line.split(",")
if len(parts) == 3:
last = parts[0]
first = parts[1]
year = int(parts[2])
print(f"{first} {last} was born in {year}.")
De uitvoer is "Ada Lovelace was born in 1815.". De lengtecontrole voorkomt dat een ontbrekend element een IndexError veroorzaakt. Ze controleert niet of het jaar numeriek is; daarvoor is een aparte invoerregel nodig als de gegevens ongeldig kunnen zijn.
Elk afgesplitst deel is aanvankelijk een string. Om "3 14 15" op te tellen, initialiseer je total = 0, doorloop je line.split() met een lus en tel je int(part) erbij op. Het resultaat is 32; als je de niet-omgezette delen aaneenvoegt, worden de cijfers samengevoegd.
Expliciete scheidingstekst behoudt omringende spaties. "a, b".split(",") geeft ["a", " b"]. Roep strip() aan op elk deel als die spaties ongewenst zijn.
Herken twee verwante resultaten
splitlines() splitst bij regelafbrekingen: "line one\nline two".splitlines() geeft twee strings. partition("=") geeft altijd een tuple met drie delen terug: de tekst vóór de eerste scheidingstekst, de scheidingstekst en de tekst erna. "user=ada".partition("=") geeft ("user", "=", "ada"); met "user" geeft het ("user", "", "").
Belangrijkste punten
split()geeft een geordende lijst met strings terug.- Splitsen op witruimte behandelt reeksen als één grens; expliciete scheidingstekst behoudt lege velden.
maxsplitbeperkt het aantal splitsingen enrsplit()begint rechts.- Controleer het aantal velden vóór indexering en zet numerieke velden om voordat je ermee rekent.
splitlines()scheidt regels;partition()geeft de tekst ervoor, de scheidingstekst en de tekst erna terug.
4.2 Voeg strings samen met scheidingstekst
join() bouwt één string op uit een sequentie van strings. De string vóór de punt levert de scheidingstekst, die tussen aangrenzende elementen verschijnt.
Zet de scheidingstekst vooraan
colors = ["red", "green", "blue"]
text = ", ".join(colors)
print(text) # red, green, blue
Lees dit als “gebruik een komma en spatie om de kleuren samen te voegen”. Er staat geen scheidingstekst vóór het eerste element of na het laatste. Je kunt de indeling van de uitvoer wijzigen door alleen de scheidingstekst te wijzigen:
| Expressie | Resultaat |
|---|---|
"".join(["a", "b", "c"]) | "abc" |
"-".join(["a", "b", "c"]) | "a-b-c" |
"\n".join(["a", "b", "c"]) | Eén element op elke regel |
join() hoort bij de string met scheidingstekst. Als je ["a", "b"].join(",") schrijft, krijg je een AttributeError, omdat de lijst geen methode join heeft. Eén aanroep past zich ook aan het aantal delen aan; je hoeft niet voor elke andere lijstlengte een nieuwe keten van +-bewerkingen te schrijven.
Zet delen die geen string zijn eerst om
Alle delen moeten al strings zijn. ", ".join([1, 2, 3]) werpt een TypeError op. map(str, items) past str() op elk element toe, dus dit werkt:
items = [1, 2, 3]
text = " ".join(map(str, items))
print(text) # 1 2 3
De str die aan map() wordt doorgegeven, is de conversiefunctie. join() ontvangt de omgezette delen en geeft één string terug.
Een string is zelf een sequentie van strings van één teken, dus " ".join("ABC") geeft "A B C". Dit kan handig zijn, maar als je één woord doorgeeft terwijl je een lijst met woorden bedoelde, komen er scheidingstekens tussen de tekens.
Pas spatiëring en scheidingstekst aan
text = "too many spaces"
cleaned = " ".join(text.split())
print(cleaned) # too many spaces
Eerst levert splitsen op witruimte de drie woorden op. Door ze met één spatie samen te voegen, kies je een vaste tussenruimte en blijven er geen spaties aan de uiteinden over. De oorspronkelijke spatiëring gaat bij het splitsen verloren.
Met expliciete scheidingstekst bewaren de lege velden genoeg informatie om de exacte tekst weer op te bouwen. Als s = "a,,b,", geeft s.split(",") de lijst ["a", "", "b", ""] en geeft ",".join(...) weer "a,,b,". Voor die exacte reconstructie moet de scheidingstekst dezelfde zijn.
Als je de scheidingstekst verandert, verandert de indeling: "-".join("2026/07/04".split("/")) geeft "2026-07-04". Hier is replace("/", "-") ook een directe oplossing.
Verzamel een kort resultaat uit woorden
Voor een letterwoord splits je "portable network graphics", begin je met acronym = "" en voeg je voor elk woord word[0].upper() toe. Splitsen op witruimte levert niet-lege woorden op, dus hun eerste tekens bestaan. Zo bouw je "PNG" op. Als de letters al in een lijst staan, bouwt ".".join(["P", "N", "G"]) de string "P.N.G" op, zonder afsluitende punt.
Belangrijkste punten
- Roep
join()aan op de scheidingstekst en geef de delen als argument door. - Scheidingstekst verschijnt alleen tussen delen en elk deel moet een string zijn.
- Splitsen op witruimte en samenvoegen met één spatie maakt de spatiëring gelijkmatig.
- Samenvoegen met dezelfde expliciete scheidingstekst kan tekst met inbegrip van lege velden reconstrueren.
5Maak uitvoer op met f-strings
Bruikbare uitvoer combineert een correcte waarde met een leesbare indeling. Een f-string plaatst waarden en expressies rechtstreeks in tekst en laat je vervolgens kiezen hoe elk veld eruitziet: decimalen, groepering, plus- en mintekens, datums of uitgelijnde kolommen. Houd de berekening en de weergave gescheiden. Een veld kan twee decimalen of een ingekorte naam tonen terwijl de oorspronkelijke variabele haar volledige waarde behoudt, klaar voor latere berekeningen of een andere weergave.
5.1 Voeg waarden in tekst in met f-strings
Een f-string is een stringliteral met f of F vóór het openingsaanhalingsteken. Daarin bevatten accolades expressies waarvan de waarden in de tekst worden ingevoegd.
Voeg variabelen en expressies in
name = "Ada"
age = 36
message = f"{name} is {age} years old."
print(message) # Ada is 36 years old.
Getallen worden binnen een veld automatisch tekst. Hetzelfde bericht zou concatenatie en str(age) kunnen gebruiken, maar de f-string houdt de uiteindelijke indeling op één plaats zichtbaar.
De accolades kunnen rekenkundige expressies, methodeaanroepen of functieaanroepen bevatten:
price = 4.5
qty = 3
print(f"Cost: {price * qty}") # Cost: 13.5
print(f"Name: {name.upper()}") # Name: ADA
word = "Python"
print(f"{len(word)} letters") # 6 letters
Python evalueert elke expressie wanneer de regel wordt uitgevoerd. Een opgeslagen string blijft niet verbonden met de variabelen waarmee die is opgebouwd. Als qty verandert nadat message is opgebouwd, behoudt die string zijn bestaande tekens.
Maak onderscheid tussen gewone tekst en velden
Zonder het voorvoegsel is "Hello {name}" gewone tekst en behoudt die de accolades. Een ontbrekende f is een veelvoorkomende reden dat een programma de variabelenaam afdrukt in plaats van de waarde. Met het voorvoegsel werpt een naam waaraan geen waarde is toegekend een NameError op wanneer de expressie wordt uitgevoerd.
Om een letterlijke accolade weer te geven, verdubbel je die:
x = 5
print(f"{{x}} = {x}") # {x} = 5
De dubbele accolades leveren de letterlijke tekst {x}. Het enkele paar rond de laatste x levert de waarde ervan.
Houd expressies met aanhalingstekens goed leesbaar
Gebruik binnen een veld de andere soort aanhalingstekens:
print(f"Shout: {'hi'.upper()}") # Shout: HI
Deze stijl werkt in alle Pythonversies met f-strings, die in 3.6 werden ingevoerd. Python 3.12 en later staan ook toe om binnen het veld de buitenste soort aanhalingstekens opnieuw te gebruiken. Escapesequenties blijven werken in f-strings: f"Name: {name}\nAge: {age}" drukt af op twee regels.
Voor een snelle weergave tijdens het debuggen accepteren Python 3.8 en later = achter een expressie. Met x = 5 geeft f"{x=}" de string "x=5"; met total = 12 geeft f"{total = }" de string "total = 12". Getypte spaties rond de expressie en het gelijkteken verschijnen in de weergave.
Lees oudere opmaakstijlen
Bestaande Pythoncode kan dezelfde tekst op andere manieren opbouwen:
| Stijl | Voorbeeld | Resultaat |
|---|---|---|
| F-string | f"{name} is {age}" | "Ada is 36" |
| Stringmethode | "{} is {}".format(name, age) | "Ada is 36" |
| Procentopmaak | "%s is %d" % (name, age) | "Ada is 36" |
str.format() vult velden tussen accolades met de argumenten. Genummerde velden kunnen een argument opnieuw gebruiken: "{0} {1} {0}".format("a", "b") geeft "a b a". Bij procentopmaak voegt %s tekst in en %d een geheel getal. Als je die velden herkent, kun je een programma ook lezen wanneer het is geschreven voordat f-strings gebruikelijk waren.
Belangrijkste punten
- Een f-string heeft een voorvoegsel
fnodig en accolades rond elke expressie. - Velden worden geëvalueerd wanneer de f-string wordt uitgevoerd; opgeslagen tekst wordt later niet bijgewerkt.
- Dubbele accolades geven letterlijke accolades weer.
str.format()en procentopmaak zijn oudere manieren om waarden in te voegen.
5.2 Maak getallen, datums en tijden leesbaar op
Een opmaakspecificatie bepaalt hoe een waarde wordt weergegeven. Zet een dubbele punt achter de expressie, gevolgd door de aanwijzingen: f"{value:spec}". Opmaak geeft tekst terug en laat de oorspronkelijke numerieke waarde ongewijzigd.
Stel decimalen in en begrijp afronding
.Nf toont precies N cijfers na de decimale punt. f"{3.14159:.2f}" geeft "3.14", f"{2/3:.3f}" geeft "0.667" en f"{5:.2f}" geeft "5.00". .0f toont geen decimale punt: f"{7.6:.0f}" geeft "8".
Bij afronding wordt de daadwerkelijk opgeslagen waarde gebruikt. De meeste decimale breuken zijn zeer nauwkeurige binaire benaderingen. Het zwevendekommagetal 2.675 ligt iets onder die exacte decimale waarde, dus f"{2.675:.2f}" geeft "2.67". Waarden die precies halverwege liggen, worden afgerond op een even laatste cijfer: 0.125 wordt met twee decimalen weergegeven als "0.12", terwijl 0.375 wordt weergegeven als "0.38". f"{2.5:.0f}" geeft "2". Programma’s die exact met geld moeten rekenen, slaan hele centen vaak op als gehele getallen.
Voeg groepering en percentages toe
| Specificatie | Voorbeeldresultaat |
|---|---|
f"{1234567:,}" | "1,234,567" |
f"{1234567:_}" | "1_234_567" |
f"{1234567.891:,.2f}" | "1,234,567.89" |
f"{0.256:.1%}" | "25.6%" |
Een komma groepeert duizendtallen; de punt leidt de precisie voor decimalen in. Houd voor een bedrag in dollars het dollarteken buiten het veld: met amount = 1250.5 geeft f"${amount:,.2f}" de string "$1,250.50".
Het type % vermenigvuldigt met 100 en voegt % toe. Gebruik een breuk zoals 0.256 om 25.6% weer te geven. Als je 25.6 opgeeft, wordt het weergegeven percentage opnieuw vermenigvuldigd. Zonder expliciete precisie toont % zes decimalen.
Maak gehele getallen en datumdelen op
d is voor gehele getallen. f"{42:d}" werkt, maar f"{3.0:d}" werpt een ValueError op omdat een zwevendekommagetal geen geheel getal is. Een voorloopnul vóór een breedte vult op met nullen; een plusteken vraagt om een zichtbaar plus- of minteken:
print(f"{7:03d}") # 007
print(f"{5:+d}") # +5
print(f"{-5:+d}") # -5
Voor maand 7, dag 4 en jaar 2026 bouwt f"{month:02d}/{day:02d}/{year}" de string "07/04/2026" op. Voor uur 9 en minuut 5 bouwt f"{hour}:{minute:02d}" de string "9:05" op. De voorloopnul voorkomt dat een minuut van één cijfer verschijnt als "9:5".
Combineer aanwijzingen in de juiste volgorde
De volgorde is opvulteken, uitlijning, plus- of minteken, nul, breedte, groepering, precisie, type. Je kunt onderdelen die je niet nodig hebt weglaten. f"{12345.678:>12,.2f}" gebruikt uitlijning rechts, breedte 12, groepering met een komma en twee decimalen, en geeft " 12,345.68".
De precisie kan uit een andere variabele komen: met places = 3 geeft f"{3.14159:.{places}f}" de string "3.142". Dezelfde specificaties werken in velden van format(value, spec) en str.format(). Bewaar het oorspronkelijke getal voor berekeningen; round(value, 2) geeft een afgerond getal terug wanneer de berekening dat nodig heeft.
Belangrijkste punten
- Een dubbele punt leidt de weergaveaanwijzingen in; de opgeslagen waarde verandert niet.
- De precisie in vastekommanotatie bepaalt het aantal decimalen en de afronding volgt de opgeslagen waarde.
- Een komma groepeert duizendtallen;
%vermenigvuldigt een breuk met 100. dvereist een geheel getal; voorloopnullen houden datum- en tijddelen leesbaar.- Bewaar getallen om mee te rekenen en maak ze op bij de weergave.
5.3 Lijn uitvoer uit in kolommen
Een veldbreedte reserveert een minimaal aantal tekenposities voor een waarde. Door breedtes te combineren maak je korte tabellen en kassabonnen leesbaar in een terminal.
Kies breedte en uitlijning
Strings worden standaard links uitgelijnd en getallen rechts. f"{'cat':6}" geeft "cat ", terwijl f"{42:6}" de string " 42" geeft. Gebruik een uitlijningsteken om expliciet te kiezen:
| Teken | Betekenis | Voorbeeld |
|---|---|---|
< | Links | f"{'hi':<6}" geeft "hi " |
> | Rechts | f"{'hi':>6}" geeft " hi" |
^ | Gecentreerd | f"{'hi':^6}" geeft " hi " |
Wanneer centreren een oneven aantal spaties overlaat, plaatst de uitlijning van f-strings de extra spatie rechts: f"{'hi':^7}" geeft " hi ".
De breedte is een minimum. f"{'elephant':4}" geeft nog steeds "elephant"; het woord wordt niet afgekapt. Een lang element kan daardoor latere kolommen uit de lijn duwen.
Voeg een opvulteken toe of beperk tekst
Een opvulteken staat direct vóór de uitlijning. f"{'hi':*^10}" geeft "****hi****" en f"{7:0>3}" geeft "007". Opvulling vereist een uitlijningsteken. f"{'':-^20}" vult een leeg veld met twintig streepjes.
De precisie van een string beperkt het aantal weergegeven tekens:
place = "Washington"
print(f"{place:.4}") # Wash
print(f"|{place:10.4}|") # |Wash |
De precisie beperkt de weergegeven tekst eerst tot vier tekens; de breedte vult die vervolgens op tot tien. Gebruik een passende breedte en precisie als tekst binnen een vaste kolom moet blijven. De oorspronkelijke place is nog steeds "Washington".
Bouw één regel van een kassabon op
item = "Apples"
qty = 3
price = 4.50
row = f"{item:<8}{qty:>4}{qty * price:>9.2f}"
print(row)
Het resultaat is "Apples 3 13.50". Het artikelveld heeft zes letters en twee spaties. Het hoeveelheidsveld voegt drie spaties toe vóór 3. Het kostenveld voegt vier spaties toe vóór 13.50, dat vijf tekens heeft. Samen nemen de velden 21 tekens in.
Gebruik die breedtes opnieuw voor brood (1 à 2,25) en koffie (2 à 11,00). Hun regels zijn "Bread 1 2.25" en "Coffee 2 22.00". Een totaalregel kan de eerste twee velden combineren:
print(f"{'Total':<12}{37.75:>9.2f}")
# "Total 37.75"
Het kostenveld begint op dezelfde positie en heeft dezelfde precisie voor decimalen, zodat de bedragen onder elkaar staan.
Stem de indeling af op de weergave
Kies breedtes die ruimte laten voor de langste elementen en tussenruimte, of kort tekst bewust in. Een variabele kan een breedte leveren: met w = 10 vult f"{name:<{w}}" name op tot tien tekens.
Kolommen op basis van tekens hebben een lettertype met vaste tekenbreedte nodig, zoals een terminal gebruikt. Voor gewone opvulling buiten een f-string gedragen ljust() en rjust() zich als < en >. center() en ^ centreren allebei tekst, maar kunnen oneven opvulling anders verdelen: "hi".center(7) geeft " hi ", terwijl f"{'hi':^7}" de string " hi " geeft.
Belangrijkste punten
- De breedte bepaalt een minimum; de uitlijning bepaalt waar de opvulling komt.
- Het opvulteken gaat vóór de uitlijning en de precisie van een string beperkt het aantal weergegeven tekens.
- Gebruik op elke regel dezelfde veldbreedtes en precisie voor decimalen.
- Kies een weergave met vaste tekenbreedte voor kolommen op basis van tekens.
center()en centreren met een f-string kunnen oneven opvulling verschillend plaatsen.
Strings in Python: voorbeelden
1Haal een code teken voor teken uit elkaar
14 stappen
- 1IntroductieLees een opslaglabel
Een opslaglabel bevat letters, een koppelteken en cijfers:
"Box-482". Dit is een string en elk teken heeft een index. Een programma heeft mogelijk de eerste letter, het laatste cijfer of het volledige getalgedeelte (een slice) nodig.Je gaat het label opbouwen, de posities tekenen en de delen selecteren. Volg bij elke stap de exacte tekens; een spatie of scheidingsteken beïnvloedt posities net als een letter.
- 2UitlegScheid syntaxis van opgeslagen tekst
Een string is een geordende sequentie van tekens. De buitenste aanhalingstekens vertellen Python waar een literal begint en eindigt; ze komen niet in de waarde terecht.
label = "Box-482" print(len(label)) # 7Het koppelteken is een van de zeven tekens. Enkele aanhalingstekens zouden dezelfde waarde kunnen aangeven. Je kunt ook lege tekst opslaan met
"", die lengte nul heeft. - 3VoorbeeldBouw het label op uit delen
Begin met het woord en een numerieke code:
kind = "Box" number = 482 label = kind + "-" + str(number)str(number)maakt"482", waarna de twee concatenaties"Box-482"opbouwen. Het koppelteken verschijnt omdat het als deel is opgegeven. Als jestr()weglaat, wordt geprobeerd een string en een geheel getal samen te voegen, wat eenTypeErroropwerpt. - 4UitdagingTel de tekens van de waarde met een escapesequentie
Een korte melding is opgeslagen als
notice = "A\nB!". Wat is de lengte ervan en hoeveel regels geeftprint(notice)weer?---reveal---
De lengte is
4:A, één regeleinde,Ben!. Afdrukken geeft twee regels weer, metAop de eerste enB!op de tweede. De escapesequentie wordt verwerkt wanneer de literal wordt gelezen; bij het afdrukken zie je het regeleinde dat al in de waarde zit. - 5AnalogieGeef elke positie een nummer
Zie het label als zeven genummerde plaatsen op een rij. De nummering begint bij nul:
Character: B o x - 4 8 2 Index: 0 1 2 3 4 5 6label[0]geeft"B"enlabel[4]geeft"4". Het resultaat is een string van één teken, ook als het op een getal lijkt. Positie7zou de achtste plaats zijn, die in dit label niet bestaat. - 6UitlegTel terug vanaf het laatste teken
Negatieve indexen gebruiken het einde als referentiepunt. Voor
"Box-482"islabel[-1]gelijk aan"2"enlabel[-3]aan"4".De niet-negatieve tegenhanger van
-3islen(label) - 3, oftewel4. Beide selecteren hetzelfde teken. Er is geen negatieve nulpositie aan het einde:-0is gewoon0, dus die selecteert nog steeds het eerste teken. - 7UitdagingSelecteer een teken zonder code uit te voeren
Wat is voor
code = "Tin-739"de waarde vancode[-2]? Zoucode[len(code)]het laatste teken selecteren?---reveal---
code[-2]is"3", het teken direct vóór de laatste9.code[len(code)]werpt eenIndexErrorop: lengte zeven betekent indexen nul tot en met zes. De expressie voor het laatste teken iscode[len(code) - 1], ofcode[-1]. - 8TipBescherm het lezen van een teken
Lege invoer heeft geen teken op index nul. Zet de lengtecontrole vóór het lezen van het teken:
if len(label) > 0 and label[0] == "B": print("Begins with B")Als de eerste controle onwaar is, slaat
andde tweede over. Deze volgorde is van belang: alslabel[0]eerst zou staan, zou dat bij lege invoer al mislukken voordat Python de lengtecontrole kan bereiken. - 9UitlegSelecteer het volledige getalgedeelte
Een uitsnede bevat de startpositie maar niet de eindpositie:
label = "Box-482" number_text = label[4:7] print(number_text) # 482De posities
4,5en6leveren de cijfers. Eindgrens7is de grens na het laatste teken. Omdat de selectie tot het einde loopt, geeftlabel[4:]hetzelfde resultaat. Er vindt geen conversie plaats; de uitsnede is nog steeds tekst. - 10VoorbeeldLaat de twee uitsneden op elkaar aansluiten
Het linkerdeel eindigt bij de grens waar het getalgedeelte begint:
left = label[:4] # "Box-" right = label[4:] # "482" print(left + right) # Box-482De gemeenschappelijke grens
4laat de delen zonder tussenruimte of overlap op elkaar aansluiten. Daarom bouwts[:k] + s[k:]een string weer op. Metlabel[:3]zou het koppelteken in het gereconstrueerde resultaat ontbreken. - 11KernpuntEen uitsnedegrens kan voorbij het einde liggen
Vergelijk
label[99]metlabel[4:99]. De enkele index werpt eenIndexErrorop, maar de uitsnede geeft"482".Een uitsnede brengt een grens voorbij de string terug tot het beschikbare einde.
label[99:]geeft daarom lege tekst. Dit is handig om maximaal een bepaalde hoeveelheid tekst te nemen, maar het betekent ook dat een onjuiste uitsnede ongemerkt minder tekens kan teruggeven dan je verwachtte. - 12VoorbeeldKeer alleen de geselecteerde cijfers om
Haal eerst de cijfers eruit en keer dan die nieuwe string om:
digits = label[4:] backward = digits[::-1] print(backward) # 284Een negatieve stapgrootte loopt achteruit. Als beide grenzen zijn weggelaten, doorloopt de uitsnede alle tekens van het laatste tot het eerste. Een positieve stapgrootte van twee zou daarentegen om en om posities overslaan. Een stapgrootte van nul is ongeldig en werpt een
ValueErrorop. - 13UitdagingMaak een gewijzigd label
Wat is voor
label = "Jar-916"de waarde vanlabel[:4] + label[4:][::-1]? Leg uit welk deel zijn volgorde behoudt.---reveal---
Het resultaat is
"Jar-619". De eerste uitsnede houdt"Jar-"ongewijzigd. De tweede selecteert eerst"916", waarna[::-1]alleen die cijfers omkeert tot"619". Concatenatie voegt de twee resultaten samen zonder nog een scheidingsteken toe te voegen. - 14SamenvattingHoud posities en grenzen uit elkaar
Gebruik een index voor één teken en een uitsnede voor een deel. Posities beginnen bij nul; negatieve indexen tellen vanaf het einde. Een uitsnede laat de eindpositie weg en de stapgrootte bepaalt de richting en tussenafstand.
Volg eerst de opgeslagen tekens en evalueer dan elke selectie voordat je de resultaten combineert.
2Maak een gemaskeerde code met een lus
12 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieBehoud cijfers en verberg letters
- 2UitlegStel de lopende resultaten in
- 3VoorbeeldNeem voor elk teken een beslissing
- 4VoorbeeldVolg de overige iteraties
- 5UitdagingVolg een andere invoer stap voor stap
- 6VerbandVoeg alleen posities toe wanneer dat nodig is
- 7TipLaat ruimte voor een volgend teken
- 8KernpuntDe oude string is niet gewijzigd
- 9VoorbeeldBewaar een andere naam voor de oude waarde
- 10VoorbeeldVervang één positie met uitsneden
- 11UitdagingVolg zowel de waarde als de bewaarde kopie
- 12SamenvattingVolg elke variabele door de lus
3Lees en valideer een bericht met markeringen
16 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieVerwerk een kort verzoek
- 2VoorbeeldVerwijder witruimte aan de uiteinden
- 3UitlegRoep methoden aan en schakel ze aaneen
- 4UitdagingKies een bewerking voor een exact einde
- 5VerbandVergelijk tekst met hoofdletternormalisatie
- 6UitlegVraag of, waar of hoe vaak
- 7VoorbeeldZoek het begin van de naam
- 8VoorbeeldZoek het einde na het begin
- 9TipBehandel een positie niet als aanwezigheid
- 10UitdagingHaal een veld tussen markeringen uit
- 11VoorbeeldHaal de tekst met het aantal plaatsen eruit
- 12UitlegControleer vóór de conversie
- 13UitdagingPas dezelfde invoerregel toe
- 14KernpuntEen tekstvergelijking vergelijkt geen hoeveelheden
- 15UitdagingVerwerk een opgeschoond veld en een mislukte zoekactie
- 16SamenvattingGebruik elk resultaat voor de bedoelde taak
4Zet een record om in velden en leesbare tekst
12 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieLees een eenvoudig record
- 2UitlegSplits op een exact scheidingsteken
- 3VoorbeeldControleer de velden voordat je ze leest
- 4VoorbeeldReken met omgezette waarden
- 5UitdagingBehoud een ontbrekende waarde
- 6KernpuntSplitsen op witruimte kiest andere delen
- 7TipStop na de splitsing die je nodig hebt
- 8VoorbeeldVoeg delen voor de weergave samen met scheidingstekst
- 9UitdagingVoorspel een samenvoeging met lege delen
- 10VerbandKies tussen opschonen en exacte reconstructie
- 11UitdagingHerstel een recordweergave
- 12SamenvattingVolg de typen door het record
5Maak een kleine kassabon op
16 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieGeef een berekening een leesbare indeling
- 2VoorbeeldVoeg het regelbedrag in
- 3UitdagingLet op wanneer de expressie wordt uitgevoerd
- 4TipHoud de veldsyntaxis zichtbaar
- 5UitlegKies twee decimalen
- 6KernpuntRond de daadwerkelijk opgeslagen waarde af
- 7VoorbeeldGeef een percentage weer
- 8UitdagingCombineer groepering en decimalen
- 9VerbandVul datum- en tijddelen op
- 10UitlegReserveer de velden van de kassabon
- 11VoorbeeldTel de spaties in één regel
- 12TipBreedte kort een lang artikel niet in
- 13UitdagingLees een opgevuld en gecentreerd veld
- 14UitdagingBouw een tweede regel van de kassabon
- 15VerbandStem het lettertype af op de indeling
- 16SamenvattingHoud berekening en presentatie gescheiden
Strings in Python: oefenvragen
Set 1: Schoon tekst op, doorzoek en valideer die10 Oefenvragen
Vraag 1 van 10
"abababa".count("aba")?Toon antwoordVerberg antwoord
0–2 en de volgende niet-overlappende overeenkomst gebruikt 4–6, wat twee oplevert. Er is ook een mogelijke overeenkomst op 2–4, maar die overlapt een getelde overeenkomst. count() telt niet elke mogelijke startpositie wanneer de overeenkomende deelstrings tekens delen.Vraag 2 van 10
" Go Home ".strip().lower() terug?Toon antwoordVerberg antwoord
strip() verwijdert de spaties aan de uiteinden en behoudt de spatie tussen de woorden. lower() verandert vervolgens de letters, wat "go home" geeft. Voor het resultaat "gohome" zouden ook spaties binnen de tekst moeten worden verwijderd, maar het verwijderen van randtekens werkt alleen aan de uiteinden van de string.Vraag 3 van 10
"test.txt".rstrip(".txt") terug?Toon antwoordVerberg antwoord
t en x. De methode verwijdert het achtervoegsel en daarna de laatste t van "test", en stopt bij s, dus het resultaat is "tes". Om precies het einde ".txt" te verwijderen, is removesuffix() nodig.Vraag 4 van 10
"A-a-a".replace("a", "x", 1).lower()?Toon antwoordVerberg antwoord
a en laat de eerste hoofdletter A ongemoeid. Als je het resultaat daarna omzet naar kleine letters, krijg je "a-x-a". Als je eerst naar kleine letters zou omzetten, zou een ander voorkomen worden vervangen en krijg je een ander resultaat.Vraag 5 van 10
"cocoa".rfind("co")?Toon antwoordVerberg antwoord
"co" begint op de indexen 0 en 2 en rfind() geeft de laatste startindex terug, 2. De methode telt posities nog steeds vanaf de linkerkant van de volledige string. Een resultaat 3 zou het laatste teken van die overeenkomst aanwijzen in plaats van het begin.Vraag 6 van 10
Wat wordt afgedrukt?
s = "label"
p = s.find(":")
print(s[p:])
Toon antwoordVerberg antwoord
find() geeft -1 terug. Als startwaarde van een uitsnede selecteert dat het laatste teken, "l", dat zonder aanhalingstekens wordt afgedrukt. Een ontbrekende overeenkomst werpt bij find() geen ValueError op; dat zou het gedrag van index() zijn.Vraag 7 van 10
Welke tekst wordt geselecteerd?
s = "Item [K9] ready [Q2]"
a = s.find("[")
b = s.find("]", a)
result = s[a + 1:b]
Toon antwoordVerberg antwoord
a te beginnen en vóór b te stoppen, blijft alleen "K9" over. Als je het laatste sluitingshaakje zou gebruiken, zouden de tussenliggende tekst en het tweede openingshaakje worden meegenomen.Vraag 8 van 10
s = raw.strip() en daarna s.isdecimal() and int(s) > 0. Voldoet de onbewerkte invoer " 08 " en welk geheel getal stelt die voor?Toon antwoordVerberg antwoord
"08", waarvan de tekens decimale cijfers zijn, en int("08") is het positieve gehele getal 8. De omringende spaties doen niet meer mee aan de controle. De voorloopnul laat de conversie niet mislukken en de aanroep van int() levert een getal op in plaats van een string te behouden.Vraag 9 van 10
a == b en a.strip().casefold() == b.strip().casefold() op voor a = " Cedar " en b = "cedar"?Toon antwoordVerberg antwoord
"cedar", dus de tweede vergelijking is waar. Gelijkheid negeert verschillen in presentatie niet tenzij het programma ze expliciet verwijdert.Vraag 10 van 10
"24" < "7" en int("24") < int("7") op?Toon antwoordVerberg antwoord
"2" vóór "7" komt. Na conversie zijn de hoeveelheden 24 en 7, dus de numerieke vergelijking is onwaar. De tekstvergelijking wordt beslist bij het eerste verschillende teken; ze zet strings met cijfers niet automatisch om.Set 2: Lees literals, indexen en uitsneden10 Oefenvragen
Sla deze les op om elk antwoord te zien en elke set te oefenen.
Vraag 1 van 10
"notebook"[2:5]?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
"map"[1:50]?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
"0123456789"[1:8:3] terug?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
s[-4:][::-1] + s[:3] bij s = "red-blue"?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
len("x\ty!")?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
"Tag: " + str(8 * 2) op?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
r"D:\temp" op na de dubbele punt?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
code[-2] bij code = "R7K2"?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
word[len(word) // 2] terug bij word = "orbit"?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
Wat gebeurt er als deze code wordt uitgevoerd met line = ""?
if len(line) > 0 and line[0] == ";":
print("Skip")
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Set 3: Volg lussen en nieuwe stringwaarden10 Oefenvragen
Sla deze les op om elk antwoord te zien en elke set te oefenen.
Vraag 1 van 10
for ch in "a b!": uitgevoerd?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
Wat wordt afgedrukt?
total = 0
for ch in "Route 68":
if ch.isdecimal():
total += int(ch)
print(total)
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
Wat wordt afgedrukt?
for ch in "Cab 53A":
if ch.isdigit():
print(ch)
break
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
Wat wordt afgedrukt?
for i, ch in enumerate("lamp"):
if i % 2 == 1:
print(ch, end="")
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
Welke waarde wordt afgedrukt?
s = "aaabb"
pairs = 0
for i in range(len(s) - 1):
if s[i] == s[i + 1]:
pairs += 1
print(pairs)
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
Welke tekst wordt afgedrukt?
s = "north"
i = len(s) - 1
result = ""
while i >= 0:
result += s[i]
i -= 2
print(result)
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
Wat bevat b na deze code?
a = "pine"
b = a
a = a.upper()
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
s[:2] + "X" + s[3:] op bij s = "stone"?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
Welk paar waarden wordt afgedrukt?
word = "muse"
result = ""
for ch in word:
if ch in "aeiou":
result = ch.upper() + result
else:
result = ch + result
print(word, result)
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
Wat drukt deze code af?
s = " west "
s.strip()
s = s + "!"
print(len(s))
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Set 4: Splits records en bouw tekst opnieuw op10 Oefenvragen
Sla deze les op om elk antwoord te zien en elke set te oefenen.
Vraag 1 van 10
len(" one\ttwo three ".split())?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
"A||C|".split("|") terug?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
"red;blue".split("; ")?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
Wat wordt afgedrukt?
parts = "Mina;4;6".split(";")
total = int(parts[1]) + int(parts[2])
print(f"{parts[0]}:{total}")
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
"mode=fast=quiet".split("=", 1)[1]?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
"status".partition(":") terug?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
" / ".join("ab") op?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
"-".join("x::z:".split(":"))?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
result = " ".join(" bright\n blue sky ".split())?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
": ".join(map(str, [6, 11])) op?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Set 5: Maak leesbare waarden en kolommen10 Oefenvragen
Sla deze les op om elk antwoord te zien en elke set te oefenen.
Vraag 1 van 10
f"{'otter':3}" op?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
f"Hi, {name.upper()}!" op bij name = "Luca"?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
Welke tekst wordt afgedrukt?
n = 4
label = f"{{n}}={n + 2}"
n = 9
print(label)
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
f"{4826.5:,.2f}"?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
f"{0.0375:.1%}"?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
f"{n:.2f}" en n == 0.125 op bij n = 0.125?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
f"{month:02d}/{day:02d}/{year} {hour}:{minute:02d}" op bij month = 11, day = 6, year = 2028, hour = 7 en minute = 3?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
f"|{'owl':>5}|" op?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
f"{name:6.4}" bij name = "seahorse"?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
f"{item:<5}{qty:>2}{qty * price:>7.2f}" voor item = "Tea", qty = 2 en price = 3.75?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Kom je niet uit je eigen opgave? Huiswerkhulp
Kernbegrippen
A
Aaneenschakelen van methoden
" OK ".strip().lower() wordt eerst "OK" teruggegeven en dat resultaat daarna omgezet in "ok".Accumulator
"" begint, kan alleen tekens verzamelen die geen spatie zijn om van "a b c" de string "abc" te maken.Afronden naar even
0.125 en 0.375 met twee decimalen weergegeven als "0.12" en "0.38".B
Binaire benadering
2.675 is iets te laag, dus opmaak met twee decimalen geeft "2.67".break
break verlaat de huidige lus onmiddellijk, zodat een zoekactie naar tekens kan stoppen na het verwerken van het eerste teken dat aan de voorwaarde voldoet."Zone 81" kan 8 afdrukken en break uitvoeren, waardoor de latere 1 niet wordt verwerkt.C
Codepuntconversie
ord() om het Unicodegetal van een teken te verkrijgen en chr() om het teken bij zo’n getal te verkrijgen.ord("A") geeft 65 en de omgekeerde conversie met chr(65) geeft "A".Concatenatie
"rain" + "coat" geeft "raincoat"; om een spatie toe te voegen is een deel nodig dat een spatie bevat.Controle op decimale cijfers
isdecimal(), accepteert niet-lege strings met decimale cijfertekens en wijst plus- en mintekens, decimale punten en spaties af."007", dat wordt omgezet in het gehele getal zeven.Conversie met map()
map() past een functie toe op elk invoerelement, zodat str de stringdelen kan leveren die join() vereist.map() in ", ".join(map(str, [3, 8])) levert strings voordat die worden samengevoegd tot "3, 8".D
Deelstring
"light" is een deelstring van "daylight", maar "dyl" niet, omdat die letters niet aaneengesloten zijn.Doorlopen van een string
for-lus of een while-lus met een index."go!" bezoek je eerst g, dan o en dan !, zodat je voor elk teken een aparte beslissing kunt nemen.E
Eén-ernaast-fout
text[len(text)] leest voorbij het einde; door één af te trekken krijg je de index van het laatste teken.Elementtoekenning
word[1] = "x" werpt bij een string een TypeError op, ook als index één een geldige positie is.enumerate()
enumerate() levert elk element van een sequentie samen met de index, zodat een lus beide kan gebruiken zonder afzonderlijk opzoeken.enumerate("sun") ontvangt paren van index en teken, beginnend met 0, "s" en eindigend met 2, "n".Escapesequentie
"up\ndown" slaat de escapesequentie \n één regeleinde op, zodat de woorden bij het afdrukken op twee regels komen.Expressieveld
f"Total: {3 * 4}" berekent twaalf voordat het resultaat na het label wordt ingevoegd.F
F-string
f die expressies binnen velden tussen accolades evalueert en hun waarden in de resulterende tekst invoegt.count = 7 bouwt de f-string f"Found {count}" de tekst "Found 7" op zonder expliciete conversie van getal naar tekst.find()
find() geeft de startindex van de eerste overeenkomende deelstring terug, of -1 als de gezochte tekst niet voorkomt."lemon".find("mo") geeft twee terug, terwijl "lemon".find("xy") bij geen overeenkomst min één teruggeeft.G
Groepering in duizendtallen
f"{7654321:,}" geeft "7,654,321" weer en scheidt elke groep van drie cijfers.H
Hernieuwde toekenning
a "red" bevat, laat de hernieuwde toekenning met a += "!" a naar "red!" verwijzen, terwijl een andere variabele nog steeds "red" kan bevatten.Hoofdlettergevoelige vergelijking
"Ready" == "ready" onwaar totdat beide waarden dezelfde hoofdletters en kleine letters gebruiken.Hoofdletternormalisatie
"Straße" als "STRASSE" om in "strasse", zodat de schrijfwijzen als gelijk kunnen worden vergeleken.I
Index
label = "desk" selecteert index 2 de waarde "s", omdat de posities beginnen met d op nul.IndexError
"cup"[3] werpt een IndexError op, omdat de drie tekens de posities nul tot en met twee innemen.K
Kortsluitevaluatie
s.isdecimal() and int(s) > 0 slaat de conversie over wanneer de tekencontrole niet slaagt.L
Leeg veld
"a;;c" op ";" te splitsen, blijft op de tweede positie een leeg veld behouden, waardoor een ontbrekende recordwaarde zichtbaar blijft.Lege scheidingstekst
join() gebruikt om delen samen te voegen zonder extra tekens ertussen."".join(["a", "b", "c"]) geeft "abc" en behoudt de volgorde van de delen.Letterlijke accolade
f"{{open}}" wordt een letterlijke openingsaccolade { vóór open weergegeven zonder Python te vragen die naam te evalueren.Lettertype met vaste tekenbreedte
Lexicografische volgorde
"19" vóór "3", omdat de eerste verschillende tekens de vergelijking beslissen.Lidmaatschapscontrole
in of not in om te controleren of een deelstring voorkomt en geeft een booleaanse waarde terug zonder de positie te geven."ice" in "spice" is waar, terwijl "Ice" met een hoofdletter niet overeenkomt met dezelfde tekst.Lijst
"oak,elm" op een komma bevat de lijst twee elementen en selecteert index één de string "elm".M
Maximaal aantal splitsingen
split() of rsplit() maakt, zodat de rest samen in een niet-gesplitst deel blijft."a=b=c" vanaf links gesplitst in "a" en "b=c", waarbij latere gelijktekens behouden blijven.Maximaal weergegeven stringlengte
f"{'sunshine':6.3}" toont "sun" en drie spaties zonder het oorspronkelijke woord te veranderen.N
Negatieve index
-1 het laatste en -len(text) het eerste teken is."cloud" selecteert de negatieve index -1 de waarde "d", terwijl -2 het voorafgaande teken "u" selecteert.Niet-overlappende overeenkomsten
count() gebruikt."aaaa".count("aa") gebruiken verschillende tekenposities, dus de telling is twee.O
Onwijzigbaarheid
name[0] = "B", terwijl name = "B" + name[1:] wel nieuwe tekst opbouwt.Opmaakspecificatie
f"{8.5:.2f}" kiest de opmaakspecificatie .2f twee decimalen en levert voor de weergave "8.50" op.Opvullen
"5".zfill(3) levert "005" op, terwijl de al langere "1234" bij breedte drie ongewijzigd blijft.Opvullen met voorloopnullen
f"{4:02d}" geeft "04" weer, zodat een minuut van één cijfer een veld van twee cijfers vult.Opvulteken
f"{'ok':*^6}" geeft "**ok**" en vult ongebruikte posities rond de tekst op.P
Palindroom
"radar" voldoet aan word == word[::-1]; bij gemengde hoofdletters en kleine letters is opschonen nodig als dat onderscheid niet moet meetellen.Percentageopmaak
% om een breuk voor de weergave met 100 te vermenigvuldigen en een procentteken toe te voegen, met optionele precisie voor decimalen..0% toont 0.18 als "18%"; als je achttien opgeeft, wordt de waarde een tweede keer geschaald.R
Randtekens verwijderen
"..hello!!" met de tekenverzameling ".!" blijft "hello" over en blijft de tekst binnen de randen onaangeroerd.removeprefix()
removeprefix() verwijdert één exact overeenkomend begin van een string en geeft de oorspronkelijke tekst terug als dat begin ontbreekt."pretest".removeprefix("pre") geeft "test"; als het voorvoegsel ontbreekt, blijft de tekst ongewijzigd.removesuffix()
removesuffix() verwijdert één exact overeenkomend einde van een string en behoudt andere tekens die bij het verwijderen van randtekens zouden kunnen verdwijnen."report.txt".removesuffix(".txt") behoudt "report", inclusief de laatste t in de basisnaam.Retourwaarde
text.upper() is tekst in hoofdletters; door die aan text toe te kennen, bewaar je haar voor later gebruik.rfind()
rfind() geeft de startindex van de laatste overeenkomende deelstring terug en gebruikt de posities van de volledige string, hoewel ze vanaf rechts zoekt."a-b-c".rfind("-") geeft drie terug en vindt zo het laatste koppelteken met een positie die vanaf links is geteld.Ruwe stringliteral
r dat backslashes als letterlijke tekens behoudt in plaats van gewone escapesequenties te verwerken.r"C:\new" behoudt de backslash vóór new, zodat die combinatie geen regeleinde wordt.S
Samenvoegen
["home", "nora"] met de scheidingstekst "/" levert "home/nora" op, met één schuine streep tussen de delen.Scheidingstekst
", " komt overeen met een komma gevolgd door een spatie en splitst de string "oak,elm" daarom niet.Splitsing rond scheidingstekst
"color=blue" rond "=" is ("color", "=", "blue"), waarbij de scheidingstekst in het midden behouden blijft.Stapgrootte van een uitsnede
"abcdef"[::2] selecteert de indexen nul, twee en vier, wat "ace" oplevert.Startpositie van een zoekactie
"cocoa".find("co", 1) slaat de overeenkomst op nul over en vindt die op twee.str.format()
str.format() vult velden tussen accolades in een string met haar argumenten, waarbij velden op volgorde of met een expliciete argumentindex worden gekozen."{1}, {0}".format("Ada", "Lovelace") gebruikt str.format() om het tweede argument vóór het eerste te plaatsen.String
str, die wordt gebruikt om tekst zoals namen, berichten en codes op te slaan."Hello, Nora" bevat de begroeting, de komma en de spatie als delen van één geordende tekstwaarde.Stringliteral
"open" en 'open' gebruiken verschillende buitenste aanhalingstekens, maar slaan dezelfde vier tekens op.Stringmethode
"hello".upper() geeft "HELLO" terug; zonder de ronde haakjes wordt de methode niet aangeroepen.T
Tekencontrole
isalpha() wijzen ook lege strings af."lake9".isalnum() is waar, terwijl de spatie in "lake 9" ervoor zorgt dat die versie niet voldoet.Teller
"Bay 27" wordt verhoogd bij 2 en 7 en eindigt na de lus met twee overeenkomsten.U
Uitlijning
< plaatst haar links, > rechts en ^ in het midden.f"{'hi':>5}" plaatst drie spaties vóór het woord; uitlijning links plaatst ze erachter.Uitsnede
"window"[1:4] geeft "ind" terug: posities één tot en met drie worden geselecteerd en positie vier niet.Uitsnedegrens
"garden"[:3] is uitsnedegrens drie de exclusieve eindgrens, dus d wordt weggelaten en het resultaat is "gar".Unicodecodepunt
len() telt ze."👍🏽" bevat twee Unicodecodepunten, dus de lengte van de Pythonstring is ondanks het uiterlijk twee.V
Vastekommanotatie
f om een getal met een gekozen aantal decimalen weer te geven, waarbij zo nodig wordt afgerond en afsluitende nullen worden toegevoegd..3f toont het gehele getal vijf als "5.000", met precies drie decimalen.Veldbreedte
"cat" twee afsluitende spaties, maar breedte twee behoudt nog steeds het volledige woord.Veldconversie
int() omzetten vóór een optelling."12" om in een geheel getal voordat die numeriek bij vijf kan worden opgeteld.W
Witruimte
" \t" bevat alleen witruimte; door randtekens te verwijderen verdwijnen beide tekens en blijft lege tekst over.Witruimte opschonen
" ".join(text.split()) verwijdert witruimte aan de uiteinden en vervangt reeksen witruimte binnen de tekst door één gewone spatie." ".join(text.split()) verandert " blue\n sky " in "blue sky" met gelijkmatige spatiëring.Over deze les
Door StudeliFout melden
Maak je eigen Studiemateriaal
Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.