#10-1
import re
markdown = open('linux.markdown','r').read().split('\n')
# wie in Blatt 8 Datei öffnen, auslesen und in eine Liste aus Zeilen umwandeln
überschrift_reg = re.compile(r'#+\s+[^#]+')
# matcht alles, das mit mindestens einer Raute beginnt, während danach keine Raute folgt
for line in markdown: # iteriert über die Zeilen der Datei
for match in re.findall(überschrift_reg, line):
#findet alle Matches innerhalb einer Zeile
print(match)
#gibt die Matches hintereinander aus
#10-2
import re
markdown = open('linux.markdown','r').read().split('\n')
# wie in Blatt 8 Datei öffnen, auslesen und in eine Liste aus Zeilen umwandeln
font_reg = re.compile(r'(\*\*|__)(.+)\1')
# mit \1 wird genau das wiederholt, auf das die erste Klammer gematcht hat, also entweder __ oder **, damit keine Mischformen auftreten. Die Klammerung von (.+) ist eine Gruppierung, die es ermöglicht im zweiten Teil der Aufgabe nur diesen Teil auszugeben
for line in markdown: # iteriert über die Zeilen der Datei
for fett in re.findall(font_reg,line):
# findet in der Zeile alle Matches, die dem Regex entsprechen und gibt sie als Liste zurück
print (fett[1])
# falls True, geben wir mit [1] den Inhalt der zweiten Klammer (.+) des Matches aus
#10-3
import re
markdown = open('linux.markdown','r').read().split('\n')
# wie in Blatt 8 Datei öffnen, auslesen und in eine Liste aus Zeilen umwandeln
link_reg = re.compile(r'')
# matcht alle Links, also alles was mit , also non-greedy (markiert mit dem ? nach dem *, bedeutet dass das kleinstmögliche für .* gematcht wird, also nur bis zum nächsten >)
for line in markdown: # iteriert über die Zeilen der Datei
for link in re.findall(link_reg,line):
# findet in der Zeile alle Matches, die dem Regex entsprechen und gibt sie als Liste zurück
print (link)
# falls True, geben wir den Link aus
#10-4
import re
markdown = open('linux.markdown','r').read().split('\n')
# wie in Blatt 8 Datei öffnen, auslesen und in eine Liste aus Zeilen umwandeln
linux_reg = re.compile(r'[L|l]inux')
# matched die Wörter "Linux" und "linux"
# es geht auch: linux_reg = re.compile(r'Linux', re.I)
for line in markdown: # iteriert über die Zeilen der Datei
if re.search(linux_reg,line):
# wenn re.seach True ist (also etwas findet)
print (line)
# falls True, geben wir die Zeile aus
#10-5
import re
markdown = open('linux.markdown','r').read().split('\n')
# wie in Blatt 8 Datei öffnen, auslesen und in eine Liste aus Zeilen umwandeln
split_reg = re.compile(r'\w+')
doppel_re = re.compile(r'(\w)\1')
# matcht erst einen Wordcharacter, und dann genau den gleichen direkt nochmal, also alle doppelten Vorkommen vom Buchstaben direkt nacheinander
for line in markdown: # iteriert über die Zeilen der Datei
for word in re.findall(split_reg,line):
# findall findet in line alle substrings, die dem Regex entsprechen (also Wörter), und gibt sie so zurück, dass wir darüber iterieren können.
if (re.search(doppel_re,word)):
# search gibt true zurück, falls irgendwo im String ein match gefunden wurde
print (word)
#10-6
#wget "http://de.wikipedia.org/wiki/Gerhard_Polt" -O polt.html
#10-7
#lynx -dump polt.html -assume_charset=UTF-8 -hiddenlinks=ignore -nolist -verbose > polt.txt
#10-8
#!/usr/bin/python3
import re
splitregex = re.compile(r'\w+')
# Regulären Ausdruck erstellen, der alle Wörter mit beginnendem großbuchstaben und min. 4 folgenden Buchstaben findet
# Dazu geben wir in den geschweiften Klammern die Untergrenze, aber keine Obergrenze an
pattern = re.compile(r'[A-ZÄÖÜ]\w{4,}')
# Frequenzliste erzeugen, dieses Mal mit Hilfe von re
polt = open('polt.txt','r')
freq = {}
# Über jede Zeile der Datei iterieren.
for line in polt:
# mit findall suchen wir alles in der Zeile, was dem splitregex entspricht, also alles was nur aus Buchstaben besteht
for word in re.findall(splitregex,line):
word = word.strip()
# Wir gucken, ob das Wort dem gesuchten Muster entspricht, falls Ja geben wir dies aus
if(re.match(pattern, word)):
# Wie üblich schauen, ob dieses Wort schon in Frequenzliste ist
if (word in freq):
freq[word] = freq[word] + 1
else:
freq[word] = 1
print("In der Datei kommen", str(len(freq)), "unterschiedliche großgeschriebene Wörter mit min. 5 Buchstaben vor.")
polt.close()
#10-9
# Neue Funktion definieren, die eine Variable annimmt.
def umkehren(eingabe):
neuer_text = ""
# Alle Buchstaben des Textes durchgehen
for buchstabe in eingabe:
# Den jeweiligen Buchstaben an den Anfang von neuer_text schreiben und den Rest hinten dran
neuer_text = buchstabe + neuer_text
# Die Variable neuer_text zurückgeben
return neuer_text
nutzer_eingabe = input("Bitte Text eingeben: ")
# Wir printen die Rückgabe von unserer Funktion
print(umkehren(nutzer_eingabe))
#10-10
def printposition(wortliste):
# variable, in der die jeweilige Position hochgezählt wird
position = 1
for wort in wortliste:
print(wort, "steht an Position", str(position))
# Position eins hochzählen
position+=1
# Liste anlegen und Funktion mit dieser Liste aufrufen
test_liste = ["spam","and","eggs"]
printposition(test_liste)
#10-11
# Wir legen eine Liste an, in der das jeweils unterschiedliche Wort gespeichert wird.
kardinalszahlen = ["vierter", "dritter", "zweiter", "nächster"]
# Für jedes Element in dieser Liste geben wir eine Strophe aus
for element in kardinalszahlen:
print("tür auf")
print("einer raus")
print("einer rein")
# Die variable Zeile hier ausgeben. Dann zusätzlichen Zeilen umbruch um Strophe zu kennzeichnen.
print(element+" sein\n")
# Danach die letzte Strophe ausgeben
print("tür auf")
print("einer raus")
print("selber rein")
print("tagherrdoktor")
#10-12
# Funktion definieren, die eine Liste von Zahlen bekommt.
def selber_sortieren(liste):
sortierte_liste = []
# Wir durchlaufen die Schleife für jedes Element der Liste
for i in range(0,len(liste)):
# Wir behaubten, das kleinste Element ist das aktuell erste Element
kleinstes_element = liste[0]
kleinster_index = 0
# Wir laufen jetzt durch jedes Element durch und vergleichen dieses mit dem aktuell kleinsten
for j in range(0,len(liste)):
# Wenn wir ein kleineres gefunden haben, speichern wir dieses in kleinstes_element
if liste[j] < kleinstes_element:
kleinstes_element = liste[j]
kleinster_index = j
# Nachdem wir durch alle Elemente durchgelaufen sind haben wir das kleinste Element der Liste gefunden
# Dieses hängen wir der Liste fortlaufend an
sortierte_liste.append(kleinstes_element)
# Aus unserer Ausgangsliste entfernen wir das zuvor gefundene kleinste Element
del liste[kleinster_index]
# Sortierte Liste zurückgeben
return sortierte_liste
test_liste = [1,5,2,9,8,3,11,3,3,3]
print(selber_sortieren(test_liste))