#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))