2 - Übungen - 27.10.17

Listen

Quadratzahlen korrigieren

Gegeben sei folgende Liste:

quadrat_zahlen = [1, 4, 9, 16, 26, 36, 49, 64, 81, 100]
  • Finden Sie die fehlerhafte Quadratzahl und ersetzen Sie sie mit der korrekten Zahl.

  • Fügen Sie noch eine weitere Quadratzahl hinzu

Noch mehr Listen

  • Gegeben ist eine Liste von Strings
string_liste = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]

Machen Sie daraus eine Liste von Integers!

Listen entpacken

Gegeben ist eine Liste von zwei Elementen

liste = ["erstes element", "zweites element"]

Was passiert wenn Sie folgendes schreiben:

a, b = liste

Funktioniert das auch für mehr Elemente?

Liste von Listen

Gegeben ist

liste = [[0, "a"], [1, "b"], [2, "c"]]

Iterieren Sie nun mit einer for-Schleife über die Liste:

for x in liste:
    ...

Was steht nun in x?

Entpacken Sie x, sodass Sie eine Variable i und eine Variable elem haben. Was enthält nun i, und was elem?

Entpacken Sie nun direkt in der Zeile der for-Schleife:

for i, elem in liste:
    ...

Enumerate

Sie haben eine Liste

liste = ["a", "b", "c"]

Wenden Sie die Funktion enumerate darauf an:

enum = enumerate(liste)

Um sich anzuschauen, was enum enthält, schreiben Sie:

print(list(enum))

Benutzen Sie nun enumerate, um parallel über den Index und die Elemente einer Liste zu iterieren.

zip

Diesmal haben Sie zwei Listen:

erste_liste = ["a", "b", "c"]
zweite_liste = ["x", "y", "z"]

Benutzen Sie zip (Reißverschluss):

gezippte_liste = zip(erste_liste, zweite_liste)
print(list(gezippte_liste))

Was ist passiert?

Nutzen Sie nun zip, um über folgende drei Listen zu iterieren:

liste1 = ["S", "i", "e", "ri"]
liste2 = ["o", "s", "s", "ch"]
liste3 = ["", "t", "", "tig"]

Lassen Sie sich in jedem Schleifendurchlauf die Summe der Elemente ausgeben mit print.

Einkaufliste:

  • Erstellen Sie eine Einkaufsliste bestehend aus (maximal) 10 Produkten, sowie eine Liste mit den dazugehörigen Preisen.

Oder benutzen Sie die hier:

einkaufs_liste = ["apfel", "milch", "banane", "joghurt", "käse"]
preise = [0.40, 0.59, 0.30, 1.20, 2.30]
  • Iterieren Sie mithilfe einer for-Schleife über alle Elemente in einkaufs_liste

  • Benutzen Sie enumerate, um die Elemente in einkaufs_liste durchzuzählen

  • Iterieren Sie nun über Gegenstand und Preis, so dass Sie als Ausgabe bekommen:

Gegenstand_1, Preis_1
Gegenstand_2, Preis_2
...
Gegenstand_10, Preis_10

(Hinweis: zip!)

  • Lassen Sie sich nun nur jeden zweiten Gegenstand ausgeben

Daten einlesen:

  • Schreiben Sie eine Datei "Daten", in die Sie ein paar numerische Werte eintragen (am einfachsten ist es, wenn Sie pro Zeile einen Wert schreiben)

  • Schreiben Sie nun ein Programm, das die Datei "Daten" öffnet und die Zahlen in einer Liste speichert

  • Berechnen Sie die Summe und den Mittelwert der Daten

Strings

  • Schreiben Sie ein Programm, das den User nach Input fragt, und das Geschriebene in Großbuchstaben zurückgibt. Bei Eingabe von "Hallo" sollte also "HALLO" ausgegeben werden

  • Finden Sie heraus, wie man aus einem String eine Liste von Strings erstellt

z.B: "Dies ist ein Satz" -> ["Dies", "ist", "ein", "Satz"]

  • Schreiben Sie ein Programm, das den User nach einem Satz fragt, und nur das erste und das letzte Wort zurückgibt

  • Finden Sie heraus, wie man die Reihenfolge der Elemente in einer Liste umdreht

  • Schreiben Sie ein Programm, das den User nach einem Satz fragt, und die Wörter in umgekehrter Reihenfolge ausgibt

Mengen (Sets)

Einkäufe

Sie und ein(e) Bekannte(r) waren shoppen. Sie haben gekauft:

meine_einkäufe = {"hose", "jacke", "schuhe", "schokoriegel", "schal", "flatscreen"}

Ihr Bekannter hat gekauft:

seine_einkäufe = {"buch", "schuhe", "mütze", "jacke", "softdrink"}

Benutzen Sie Mengenoperationen um herauszufinden:

  • Was ist die Gesamtmenge, die Sie beide eingekauft haben?

  • Was hat Ihr Bekannter gekauft, was Sie auch gekauft haben?

  • Was hat Ihr Bekannter gekauft, das Sie nicht gekauft haben?

  • Was haben Sie gekauft, das Ihr Bekannter nicht gekauft hat?

  • Welche Dinge haben Sie nicht beide gekauft?

Buchstaben in einem Wort

Benutzen Sie set, um herauszufinden, aus wieviel verschiedenen Buchstaben ein Wort besteht

Sieb des Eratosthenes

Das Sieb des Eratosthenes ist ein Algorithmus, mit dem man Primzahlen bestimmen kann. Er lässt sich in Python gut mit Mengen lösen.

Um die Primzahlen von 2 bis n_max zu bestimmen, tun Sie folgendes:

  • Erstellen Sie eine Menge numbers der Zahlen von 2 bis n_max

  • Erstellen Sie eine Variable next_prime = 2

  • Solange next_prime < n_max/2 ist (while-Schleife!), erstellen Sie eine weitere Menge not_prime, die alle Vielfachen von next_prime enthält. Ziehen Sie diese von numbers ab. Erhöhen Sie anschließend next_prime um 1

  • Wenn die while-Schleife beendet, sollten sich in numbers nur noch die Primzahlen zwischen 2 und n_max befinden

Schere, Stein, Papier

Schreiben Sie ein Programm, das mit Ihnen Schere, Stein, Papier spielt. Um den Computer dazu zu bringen, zufällig zwischen Schere, Stein und Papier zu wählen, schreiben Sie folgendes:

import random


computer_hand = random.choice(["Schere", "Stein", "Papier"])

Mit diesem Befehl wählt der Computer zufällig ein Element aus der Liste.

Galgenmännchen

Schreiben Sie ein Programm, in dem ein String mit dem Namen unbekanntes_wort gespeichert ist, sowie eine leere Menge mit dem Namen geratene_woerter. In einer ewigen while-Schleife (while True) soll nun folgendes geschehen:

  • Zuerst wird jeder Buchstabe von unbekanntes_wort durchlaufen, und, wenn er in geratene_woerter enthalten ist, ausgegeben. Ist er nicht enthalten, wird ein "-" ausgegeben.
    Beispiel:

    • Das geheime Wort ist wochenende
    • geratene_woerter enthält {"n", "e"}
    • Ausgabe ist dann: "- - - - e n e n - e"
  • Dann muss der User einen neuen Buchstaben eingeben (Achtung, genau einen!). Dieser wird in geratene_woerter gespeichert

  • Ergänzen Sie das Programm nun so, dass es mit einer Glückwunschsnachricht abbricht, sobald der User alle Buchstaben geraten hat.

  • Erlauben Sie nur maximal 11 Fehlversuche, bevor das Programm mit "Game Over" abbricht

  • Bonus: Anstatt das Wort in den Quellcode zu schreiben, lassen Sie es einen Mitspieler am Anfang eingeben. Wenn Sie folgendes zu Beginn schreiben:

from getpass import getpass

können Sie mittels

unbekanntes_wort = getpass("Bitte zu ratendes Wort eingeben\n")

das geheime Wort eingeben lassen, ohne dass es auf dem Bildschirm zu sehen ist.

  • Spielen Sie eine Runde Galgenmännchen mit Ihrem Nachbarn

Wortzähler

Schreiben Sie folgendes Python Programm:

import this

Speichern Sie den resultierenden Text in einer extra Datei.

Analysieren Sie den Text, indem Sie ein Programm schreiben, das die Häufigkeit jedes Wortes im obigen Text zählt.

Hilfestellungen:

  • Speichern Sie den Text entweder als String mit 3 Anführungszeichen am Anfang und am Ende (dann kann er sich auch über mehrere Zeilen erstrecken), oder lesen Sie ihn aus einer Datei aus, in die Sie ihn vorher geschrieben haben.

Beispiel:

text = """
Hier kann beliebiger Text
stehen, der sich über mehrere Zeilen erstreckt
"""
  • Angenommen, Sie haben den gesamten Text in der Variablen text gespeichert. Dann können Sie mit
wortliste = text.split()

eine Liste der einzelnen Wörter erstellen.

  • Um ungewünschte Zeichen aus dem Text zu entfernen, benutzen Sie:
text.replace(zu_ersetzendes_zeichen, "")
  • Zum Zählen der Wörter ist ein Dictionary sehr hilfreich!

  • Schreiben Sie das Programm nun so um, dass es die Häufigkeit der einzelnen Buchstaben zählt.

  • Benutzen Sie Sets (Mengen), um herauszufinden, welche Wörter in jeder der ersten 6 Zeilen vorkommen.

  • Erstellen Sie mithilfe von Sets eine Liste aller Buchstaben, die in dem Text vorkommen