Skip to content
Snippets Groups Projects
seminar08.ipynb 59.6 KiB
Newer Older
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
schwabmi's avatar
schwabmi committed
    "# 8 Zeichenketten\n",
Miriam Brauer's avatar
Miriam Brauer committed
    "[Chapter 8: Strings](http://greenteapress.com/thinkpython2/html/thinkpython2009.html)\n",
    "\n",
Miriam Brauer's avatar
Miriam Brauer committed
    "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",
    "![VIM](https://photos.smugmug.com/Weekly-Comic-About-Programmers/i-fkJRphx/1/35afaf94/L/vim-hires-L.png)\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "[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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</span>Debugging</a></span></li><li><span><a href=\"#Glossar\" data-toc-modified-id=\"Glossar-13\"><span class=\"toc-item-num\">13&nbsp;&nbsp;</span>Glossar</a></span></li><li><span><a href=\"#Übung\" data-toc-modified-id=\"Übung-14\"><span class=\"toc-item-num\">14&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</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&nbsp;&nbsp;</span>Aufgabe 6</a></span></li></ul></li></ul></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Ihre Lernziele:\n",
    "\n",
Miriam Brauer's avatar
Miriam Brauer committed
    "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": [
schwabmi's avatar
schwabmi committed
    "## Eine Zeichenkette ist eine Folge\n",
    "\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": [
Miriam Brauer's avatar
Miriam Brauer committed
    "Die zweite Anweisung wählt das Zeichen mit Nummer 1 aus der Zeichenkette `fruit` und weist dieses der Variablen `letter` zu.\n",
    "\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": [
Miriam Brauer's avatar
Miriam Brauer committed
    "Somit ist `b` der 0. Buchstabe von `banana`, `a` ist der 1. Buchstabe und `n` der 2.\n",
    "\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": [
Miriam Brauer's avatar
Miriam Brauer committed
    "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": [
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "![Banane](https://upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Banana-Single.jpg/272px-Banana-Single.jpg)\n",
    "\n",
    "([Evan-Amos](https://commons.wikimedia.org/wiki/File:Banana-Single.jpg))\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "##  `len`\n",
    "\n",
Miriam Brauer's avatar
Miriam Brauer committed
    "`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"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "fruit = \"banana\"\n",
    "len(fruit)"
Loading
Loading full blame...