Newer
Older
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Chapter 8: Strings](http://greenteapress.com/thinkpython2/html/thinkpython2009.html)\n",
"Zeichenketten sind anders als ganze Zahlen, Gleitkommazahlen und Boolesche Werte. Eine Zeichenkette ist eine **Folge** (*sequence*), d.h. eine geordnete Menge einzelner Werte. In diesem Kapitel lernen wir, wie wir auf die Zeichen zugreifen können, aus denen eine Zeichenkette besteht und lernen einige der Funktionen kennen, die für Zeichenketten bereitgestellt werden.\n",
"\n",
"\n",
"[VIM](https://browserling.smugmug.com/Weekly-Comic-About-Programmers/i-fkJRphx/L), comic.browserling.com"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h1>Inhaltsverzeichnis<span class=\"tocSkip\"></span></h1>\n",
"<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Ihre-Lernziele:\" data-toc-modified-id=\"Ihre-Lernziele:-1\"><span class=\"toc-item-num\">1 </span>Ihre Lernziele:</a></span></li><li><span><a href=\"#Exkurs:-Was-mir-an-Python-gefällt\" data-toc-modified-id=\"Exkurs:-Was-mir-an-Python-gefällt-2\"><span class=\"toc-item-num\">2 </span>Exkurs: Was mir an Python gefällt</a></span></li><li><span><a href=\"#Eine-Zeichenkette-ist-eine-Folge\" data-toc-modified-id=\"Eine-Zeichenkette-ist-eine-Folge-3\"><span class=\"toc-item-num\">3 </span>Eine Zeichenkette ist eine Folge</a></span></li><li><span><a href=\"#len\" data-toc-modified-id=\"len-4\"><span class=\"toc-item-num\">4 </span><code>len</code></a></span></li><li><span><a href=\"#Durchlauf-mit-einer-for-Schleife\" data-toc-modified-id=\"Durchlauf-mit-einer-for-Schleife-5\"><span class=\"toc-item-num\">5 </span>Durchlauf mit einer <code>for</code>-Schleife</a></span></li><li><span><a href=\"#Zeichenketten-Segmente\" data-toc-modified-id=\"Zeichenketten-Segmente-6\"><span class=\"toc-item-num\">6 </span>Zeichenketten-Segmente</a></span></li><li><span><a href=\"#Zeichenketten-sind-unveränderbar\" data-toc-modified-id=\"Zeichenketten-sind-unveränderbar-7\"><span class=\"toc-item-num\">7 </span>Zeichenketten sind unveränderbar</a></span></li><li><span><a href=\"#Suche\" data-toc-modified-id=\"Suche-8\"><span class=\"toc-item-num\">8 </span>Suche</a></span></li><li><span><a href=\"#Schleifen-ausführen-und-zählen\" data-toc-modified-id=\"Schleifen-ausführen-und-zählen-9\"><span class=\"toc-item-num\">9 </span>Schleifen ausführen und zählen</a></span></li><li><span><a href=\"#Methoden-für-Zeichenketten\" data-toc-modified-id=\"Methoden-für-Zeichenketten-10\"><span class=\"toc-item-num\">10 </span>Methoden für Zeichenketten</a></span></li><li><span><a href=\"#Der-in-Operator\" data-toc-modified-id=\"Der-in-Operator-11\"><span class=\"toc-item-num\">11 </span>Der <code>in</code>-Operator</a></span><ul class=\"toc-item\"><li><span><a href=\"#8.10-Zeichenketten-vergleichen\" data-toc-modified-id=\"8.10-Zeichenketten-vergleichen-11.1\"><span class=\"toc-item-num\">11.1 </span>8.10 Zeichenketten vergleichen</a></span></li></ul></li><li><span><a href=\"#Debugging\" data-toc-modified-id=\"Debugging-12\"><span class=\"toc-item-num\">12 </span>Debugging</a></span></li><li><span><a href=\"#Glossar\" data-toc-modified-id=\"Glossar-13\"><span class=\"toc-item-num\">13 </span>Glossar</a></span></li><li><span><a href=\"#Übung\" data-toc-modified-id=\"Übung-14\"><span class=\"toc-item-num\">14 </span>Übung</a></span><ul class=\"toc-item\"><li><span><a href=\"#Aufgabe-1\" data-toc-modified-id=\"Aufgabe-1-14.1\"><span class=\"toc-item-num\">14.1 </span>Aufgabe 1</a></span></li><li><span><a href=\"#Aufgabe-2\" data-toc-modified-id=\"Aufgabe-2-14.2\"><span class=\"toc-item-num\">14.2 </span>Aufgabe 2</a></span></li><li><span><a href=\"#Aufgabe-3\" data-toc-modified-id=\"Aufgabe-3-14.3\"><span class=\"toc-item-num\">14.3 </span>Aufgabe 3</a></span></li><li><span><a href=\"#Aufgabe-4\" data-toc-modified-id=\"Aufgabe-4-14.4\"><span class=\"toc-item-num\">14.4 </span>Aufgabe 4</a></span></li><li><span><a href=\"#Aufgabe-6\" data-toc-modified-id=\"Aufgabe-6-14.5\"><span class=\"toc-item-num\">14.5 </span>Aufgabe 6</a></span></li></ul></li></ul></div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Ihre Lernziele:\n",
"Beschreiben Sie in 2-3 Stichpunkten kurz was Sie im Seminar heute lernen wollen. Klicken Sie dazu doppelt auf diesen Text und bearbeiten Sie dann den Text:\n",
"\n",
"- \n",
"- \n",
"- "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exkurs: Was mir an Python gefällt\n",
"\n",
"Text-Statistik ist ganz einfach machbar – mit dem Wissen aus diesem Kapitel können wir z.B. n-Gramme berechnen. Vielleicht kommen Sie ja am Ende dieses Notebooks zu diesem Exkurs zurück. Hier ein Beispiel, welches automatisch eine Webseite herunterlädt und die häufigsten 6-Gramme berechnet. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# klappt nur, wenn das Python-Modul BeautifulSoup installiert ist\n",
"from collections import Counter\n",
"import requests\n",
"from bs4 import BeautifulSoup\n",
"\n",
"# wir wollen häufige n-Gramme finden - hier n anpassen \n",
"n = 6\n",
"\n",
"# sollte für jede beliebige Webseite funktionieren - hier anpassen\n",
"link = \"https://de.wikipedia.org/w/index.php?title=Berlin&printable=yes\"\n",
"\n",
"# Webseite herunterladen und Text extrahieren\n",
"text = BeautifulSoup(requests.get(link).text, \"lxml\").get_text()\n",
"\n",
"# n-Gramme zählen\n",
"ctr = Counter()\n",
"for i in range(0, len(text) - n + 1):\n",
" ngram = text[i:i+n]\n",
" # Zeichenketten mit Leerzeichen ignorieren\n",
" if ' ' not in ngram:\n",
" ctr[ngram] += 1\n",
"\n",
"# die Top-10 ausgeben\n",
"for ngram, frequ in ctr.most_common(10):\n",
" print(frequ, ngram, sep='\\t')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Eine Zeichenkette ist eine Folge von Zeichen. Wir können auf die einzelnen Zeichen mit Hilfe des Klammer-Operators zugreifen:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fruit = 'banana'\n",
"letter = fruit[1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Die zweite Anweisung wählt das Zeichen mit Nummer 1 aus der Zeichenkette `fruit` und weist dieses der Variablen `letter` zu.\n",
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
"\n",
"Der Ausdruck in eckigen Klammern wird **Index** genannt. Der Index gibt an, welches Zeichen der Folge wir haben möchten.\n",
"\n",
"Allerdings entspricht das Ergebnis vielleicht nicht ganz dem, was wir erwartet hätten: "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"letter"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Für die meisten Menschen ist der erste Buchstabe von `banana` das `b` und nicht das `a`. Aber in der Informatik wird oft beginnend mit der Null gezählt und somit hat das erste Zeichen einer Zeichenkette den Index 0:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"letter = fruit[0]\n",
"letter"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Somit ist `b` der 0. Buchstabe von `banana`, `a` ist der 1. Buchstabe und `n` der 2.\n",
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
"\n",
"Als Index können wir einen Ausdruck verwenden, der Variablen und Operatoren enthält:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"i = 1\n",
"fruit[i]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fruit[i + 1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Der Wert des Index muss eine ganze Zahl sein. Ansonsten erhalten wir eine Fehlermeldung:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"letter = fruit[1.5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"([Evan-Amos](https://commons.wikimedia.org/wiki/File:Banana-Single.jpg))\n",
"\n",
"`len` ist eine eingebaute Funktion, die die Anzahl der Zeichen einer Zeichenkette zurückgibt; sie haben die `len`-Funktion bereits im 3. Seminar kennengelernt und für die erste Hausaufgabe verwendet:\n"
Loading
Loading full blame...