Kurs Python richtig lernen/Aufgabe 1: Shakespeare: Unterschied zwischen den Versionen

Aus Geoinformation HSR
Wechseln zu: Navigation, Suche
K
K (autopreise.py)
 
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Zurück zu [[Kurs_Python_richtig_lernen]]  
+
Zurück zum [[Kurs Python richtig lernen#Uebungen]].
  
 
== anteil_hamlet.py ==
 
== anteil_hamlet.py ==
  
Siehe Kap. 2.6.3:
+
Aus Kap. 2.6.3 (16.1.2013).
 
* Einlesen von Hamlet und gesammelte Werke von Shakespeare (enthalten in [[Media:Musterloesungen.zip|Musterloesungen.zip]])
 
* Einlesen von Hamlet und gesammelte Werke von Shakespeare (enthalten in [[Media:Musterloesungen.zip|Musterloesungen.zip]])
 
* Ausrechnen des Hamlet-Anteils an den gesammelten Werken, basierend auf der Anzahl Buchstaben
 
* Ausrechnen des Hamlet-Anteils an den gesammelten Werken, basierend auf der Anzahl Buchstaben
Zeile 40: Zeile 40:
  
 
== geister.py ==
 
== geister.py ==
 +
 +
Aus Kap. 2.6.3 (16.1.2013):
  
 
Zählt wie viele Male Shakespeare das Wort 'ghost', 'Ghost', 'GHOST' oder ähnlich verwendet hat in seinem Leben.
 
Zählt wie viele Male Shakespeare das Wort 'ghost', 'Ghost', 'GHOST' oder ähnlich verwendet hat in seinem Leben.
Zeile 148: Zeile 150:
  
 
print "Das haeufigste Wort mit mindestens 5 Buchstaben ist '%s' mit %i Vorkommen." % (haeufigstes_wort, anzahl_vorkommen)
 
print "Das haeufigste Wort mit mindestens 5 Buchstaben ist '%s' mit %i Vorkommen." % (haeufigstes_wort, anzahl_vorkommen)
 +
</nowiki>
 +
 +
 +
== autopreise.py ==
 +
 +
Aus Kap. 2.6.4 (16.1.2013).
 +
 +
Verwandle einen Text in eine Liste von Autopreisen. Jedes Element soll ein Dictionnaire sein; der Key soll der Autoname sein und der Value der Preis (als Integer).
 +
 +
<nowiki>
 +
# -*- coding: utf-8 -*-
 +
 +
f = open('pg100.txt')
 +
shakespeare = f.read()
 +
 +
d={}
 +
 +
...
 +
 
  </nowiki>
 
  </nowiki>

Aktuelle Version vom 23. Januar 2013, 02:09 Uhr

Zurück zum Kurs Python richtig lernen#Uebungen.

anteil_hamlet.py

Aus Kap. 2.6.3 (16.1.2013).

  • Einlesen von Hamlet und gesammelte Werke von Shakespeare (enthalten in Musterloesungen.zip)
  • Ausrechnen des Hamlet-Anteils an den gesammelten Werken, basierend auf der Anzahl Buchstaben
  • Ausrechnen des Hamlet-Anteils an den gesammelten Werken, basierend auf der Anzahl Wörter
  • Herausfinden wieviele Male Shakespeare das Wort 'ghost', 'Ghost', 'GHOST' oder ähnlich in seinem Leben benutzt hat
  • Das häufigste Wort in Shakespeare's gesammelten Werken herausfinden
  • Das häufigste Wort mit mindestens 5 Buchstaben in Shakespeare's gesammelten Werken herausfinden

Rechnet den Hamlet-Anteil an den gesammelten Werken Shakespeare's aus, basierend auf der Anzahl Buchstaben und Wörter

# -*- coding: utf-8 -*-

# Einlesen von Hamlet und den gesammelten Werken Shakepeare's:
hamlet_file = open('pg1524.txt')
hamlet = hamlet_file.read()
shakespeare_file = open('pg100.txt')
shakespeare = shakespeare_file.read()

# Der Anteil von Hamlet an den gesammelten Werken basierend auf der Anzahl
# Buchstaben ist ganz einfach zu erhalten. Aufpassen nur mit dem Float...:
anteil_hamlet_buchstaben = float(len(hamlet)) / len(shakespeare) * 100.

# Nun müssen wir die Anzahl Wörter bestimmen. Dafür trennen wir ganz einfach
# den Text in eine Liste auf basierend auf den Leerschlägen:
hamlet_woerter = hamlet.split(' ')
shakespeare_woerter = shakespeare.split(' ')
anteil_hamlet_woerter = float(len(hamlet_woerter)) / len(shakespeare_woerter) * 100.

# Nun können wir das Resultat ausgeben:
print "Anteil von Hamlet an Shakespeare's Werken, basierend auf der Anzahl Buchstaben: %f Prozent" % anteil_hamlet_buchstaben
print "Anteil von Hamlet an Shakespeare's Werken, basierend auf der Anzahl Woerter: %f Prozent" % anteil_hamlet_woerter
 

Hinweis: im Kap. 2.6.3 unten gibt es ein Code-Fragment für eine Variante mit direktem Web-Zugriff.

geister.py

Aus Kap. 2.6.3 (16.1.2013):

Zählt wie viele Male Shakespeare das Wort 'ghost', 'Ghost', 'GHOST' oder ähnlich verwendet hat in seinem Leben.

# -*- coding: utf-8 -*-

import time

# Einlesen von Shakepeare's gesammelten Werken:
f = open('pg100.txt')
shakespeare = f.read()

# Zuerst mal alles in Kleinbuchstaben umwandeln, damit wir alle Varianten von
# 'ghost' abfangen:
shakespeare = shakespeare.lower()

# Nun haben wir zwei Möglichkeiten:
# 1. Den Text in eine Liste Wörter auftrennen, und die Wörter zählen wo 'ghost'
#    vorkommt.
# 2. Die Funktion find() gibt uns ja den Index zurück wo das Wort gefunden 
#    wurde. find() hat auch ein optionales Argument 'start', wo man sagen kann
#    von welcher Stelle im String an gesucht werden soll. Durch intelligentes
#    Definieren einer Variablen können wir so die Geister auch zählen.
# Hier folgen beide Möglichkeiten... Damit wir wissen, welche Methode schneller
# ist haben wir noch die Zeit für beide Möglichkeiten gemessen. Das geht ganz
# einfach mit dem time-Modul. Die Funktion time im time-Modul gibt die Anzahl
# Sekunden (mit ein paar Dezimalstellen) die seit dem Anfang der Computer-Epoche
# vergangen sind (normalerweise der 1.1.1970 auf Linux-Systemen)

# Möglichkeit 1 mit Wörter auftrennen
start_zeit_1 = time.time()
woerter = shakespeare.split(' ')
anzahl_geister = 0
for wort in woerter:
    if wort.find('ghost') > -1:
        anzahl_geister += 1

end_zeit_1 = time.time()

# Möglichkeit 2 mit String durchlaufen
start_zeit_2 = time.time()
anzahl_geister_2 = 0
string_index = 0    # Das ist diese 'intelligente' Variable
while True:
    geist = shakespeare.find('ghost', string_index)
    if geist < 0:   # Falls keinen Geist mehr, brechen wir aus der Schlaufe aus
        break
    anzahl_geister_2 += 1
    string_index = geist + 1    # String Index vorwärts schieben

end_zeit_2 = time.time()


# Nun sind wir fertig, also Resultat ausgeben
print "Shakepeare brauchte %i Geister in seinem Leben" % anzahl_geister
print "Shakepeare brauchte wirklich %i Geister" % anzahl_geister_2

print "Die 1. Moeglichkeit Geister zu zaehlen (Woerter auftrennen) brauchte %f Sekunden" % (end_zeit_1 - start_zeit_1, )
print "Die 2. Moeglichkeit Geister zu zaehlen (String durchlaufen) brauchte %f Sekunden" % (end_zeit_2 - start_zeit_2, )
print "Moeglichkeit 2 ist um ein Faktor %f schneller!" % ((end_zeit_1 - start_zeit_1) / (end_zeit_2 - start_zeit_2), )

print '''"Die ich rief, die Geister,\nWerd' ich nun nicht los."\n(Nein, das ist nicht von Shakespeare!)'''
 

haeufigste_woerter.py

Findet das häufigste Wort in Shakespeare's gesammelten Werken. Findet auch das häufigste Wort das länger ist als 5 Buchstaben.

# -*- coding: utf-8 -*-

# Einlesen von Shakepeare's gesammelten Werken:
f = open('pg100.txt')
shakespeare = f.read()

# Alles in Kleinbuchstaben umwandeln, da dies ja dasselbe Wort bleibt...
shakespeare = shakespeare.lower()

# In Wörter auftrennen
woerter = shakespeare.split(' ')

# Einzelne Wörter zählen mit Hilfe eines Dictionnaires
word_count = {}
for wort in woerter:
    w = wort.strip()    # Leerzeichen um das Wort entfernen
    if len(w) > 0:
        word_count[w] = word_count.get(w, 0) + 1

# Nun haben wir alle Wörter gezählt und wir können nochmals durch den
# Dictionnaire gehen und schauen was das häufigste Wort ist.
haeufigstes_wort = ''
anzahl_vorkommen = 0
for wort in word_count:
    if word_count[wort] > anzahl_vorkommen:
        haeufigstes_wort = wort
        anzahl_vorkommen = word_count[wort]

print "Das haeufigste Wort ist '%s' mit %i Vorkommen." % (haeufigstes_wort, anzahl_vorkommen)

# Und nun noch alle Wörter mit mindestens 5 Buchstaben: sehr ähnlich!
haeufigstes_wort = ''
anzahl_vorkommen = 0
for wort in word_count:
    if len(wort) >= 5 and word_count[wort] > anzahl_vorkommen:
        haeufigstes_wort = wort
        anzahl_vorkommen = word_count[wort]

print "Das haeufigste Wort mit mindestens 5 Buchstaben ist '%s' mit %i Vorkommen." % (haeufigstes_wort, anzahl_vorkommen)
 


autopreise.py

Aus Kap. 2.6.4 (16.1.2013).

Verwandle einen Text in eine Liste von Autopreisen. Jedes Element soll ein Dictionnaire sein; der Key soll der Autoname sein und der Value der Preis (als Integer).

# -*- coding: utf-8 -*-

f = open('pg100.txt')
shakespeare = f.read()

d={}

...