FizzBuzz: Einstieg in Python
for k in range (1,100,1): if k%3 == 0 or k%5 == 0: if k%5 !=0: print("fizz"" ", end="") if k%3 !=0: print("buzz"" ", end="") if k%3 == 0 and k%5 == 0: print("fizzbuzz"" ", end="") else: print (k," ", end="")
Linear Search: mit Zufallslisten-Generator und Zeitmessung für die Zeitkomplexität
import random import time meineliste=[] for i in range(0,20): zufall = random.randint(1,100) meineliste.append(zufall) print(meineliste) startzeit = time.monotonic_ns() maximum = meineliste[0] for i in range(1, len(meineliste)): time.sleep(0.01) if maximum<meineliste[i]: maximum = meineliste[i] print("vorläufiges Maximum: ", maximum) time.sleep(0.01) print("-------------------------------------------") dauer = (time.monotonic_ns()-startzeit)/1000000 print("zeitdauer in milli-Sekunden: ", dauer) print("endgültiges Maximum: ", maximum)
BubbleSort: mit Zufallslisten-Generator und Zeitmessung für die Zeitkomplexität
import random import time mliste = [] for k in range (0,20): mliste.append(random.randint(1,100)) print(mliste) startzeit = time.monotonic_ns() # bubblesort for m in range(0,len(mliste)-1): time.sleep(0.01) for i in range(0,len(mliste)-1-m): time.sleep(0.01) if mliste[i]>mliste[i+1]: time.sleep(0.01) temp = mliste[i+1] mliste[i+1]= mliste[i] mliste[i]=temp print(mliste) endzeit = time.monotonic_ns() zeitdifferenz= (endzeit - startzeit)/1000000 print("vergangene Zeit: ", zeitdifferenz)
Quicksort-Simulation: Die Simulation aus dem Unterricht:
https://www.hackerearth.com/practice/algorithms/sorting/quick-sort/visualize/
Prinzip von Funktionen: mit Parameterübergabe, Returnwert und globaler Variable für die Rückgabe
import random import time def macheZufallsliste(listenlaenge, obergrenze): print("übergebener Parameter: " + str(listenlaenge)) meineListe = [] for i in range(0,listenlaenge): meineListe.append(random.randint(1,obergrenze)) print ("noch im Stack: ", meineListe) return meineListe auffangVariable= macheZufallsliste(10,10) print("aufgefangen über Return: ", auffangVariable) time.sleep(2) print("aufgefangen über Return: ", auffangVariable)
Selection-Sort: mit Linear-Search-Funktion und Python „append()“ bzw. „insert()“
import random def sucheLinear(testliste, modus): if modus=="max": maximum = testliste[0] for num in testliste: if num>maximum: maximum = num return maximum if modus=="min": minimum = testliste[0] for num in testliste: if num<minimum: minimum = num return minimum mliste = [] for k in range (20): mliste.append(random.randint(1, 100)) for j in range (0, len(mliste)): groesstesElement = sucheLinear(mliste[0:len(mliste)-j], "max") print("aktuell grösstes Element:", groesstesElement) mliste.remove(groesstesElement) mliste.append(groesstesElement) print("Sortier-Schritt ",j+1, ": ", mliste) print("endgültig sortierte Liste: ", mliste)
Stack-Simulation: Wie Funktionen im Speicher verwaltet werden, wichtig für Rekursion
https://visualgo.net/en/list
Rekursion: Skripte für das grundlegende Verständnis. Stack Auf- und Abbau.
def rek1(n): if n>1: print("lokales n: ", n) n-= 1 rek1(n) else: print("lokales n: ", n, ", fertig: Basisfall, bzw. Abbruchbedingung") n-= 1 print("lokales n: ", n) rek1(4) print("------------------------------------------------------") summe=0 def rek2(n): global summe if n>1: summe=summe+n print("Hin ... lokales n: ", n, "summe: ", summe) n-= 1 rek2(n) else: summe=summe+n print("fertig. lokales n: ", n, "summe: ", summe) n-= 1 print("...& zurück lokales n: ", n, "summe: ", summe) rek2(4) print("------------------------------------------------------") prod=1 def rek3(n): global prod if n>1: prod=prod*n print("Hin ... lokales n: ", n, "prod: ", prod) n-=1 rek3(n) else: prod = prod * n print("fertig. lokales n: ", n, "prod: ", prod) n -= 1 print("...& zurück lokales n: ", n, "prod: ", prod) rek3(5) print("------------------------------------------------------") def rek4(n): if n>1: print("vorher, lokales n: ", n) prod = n * rek4(n-1) print("danach, lokales n: ", n, "zwischenergebnis: ", prod) return prod else: print("fertig. Lokales n: ", n) return 1 print("...& zurück lokales n: ", n) rek4(5) print("------------------------------------------------------") def rek5(n): if n>1: print("vorher, lokales n: ", n) knoten = rek5(n-1) + rek5(n-1) print("Ast. Lokales n: ", n, "zwischenknoten: ", knoten) return knoten else: print("Blatt. Lokales n: ", n) return 1 print("...& zurück lokales n: ", n) rek5(3) print("------------------------------------------------------")
Programm von F.S.: Quicksort-Implementierung
import random laenge=10 list=[] for i in range (0,laenge): list.append(random.randint(1,100)) print("Die zufällig ausgewählte Liste ist: ") print(list) def quicksort(list): rekursion(list,0,len(list)-1) def rekursion (list,first,last): if first<last: #Abbruchbedingung splitpoint=sortieren(list,first,last) rekursion(list,first,splitpoint-1) #Rekursion für erste Listenhälfte! rekursion(list,splitpoint+1,last) #Rekursionfür zweite Listenhälfte! def sortieren(list,first,last): pivot=list[last] leftmark=first rightmark=last-1 done=False while not done: while leftmark<=rightmark and list[leftmark]<= pivot: leftmark=leftmark+1 while leftmark<=rightmark and list[rightmark]>= pivot: rightmark=rightmark-1 if rightmark<leftmark: done=True else: temp=list[rightmark] list[rightmark]=list[leftmark] list[leftmark]=temp temp=list[leftmark] list[leftmark]=list[last] list[last]=temp return leftmark quicksort(list) print("--------------------------------------------------------------------------------------") print("Die Liste ist nun sortiert.") print(list) print("--------------------------------------------------------------------------------------")
Programm von M.D.: Palindromprüfung
string_list = input() def palyndrom2(stringarr_): if len(stringarr_) > 1: return stringarr_[0] == stringarr_[len(stringarr_)-1] and palyndrom2(stringarr_[1:len(stringarr_)-1]) else: return True x = palyndrom2(string_list) print(x);
Binärer Baum: Turtle-Grafik „ohne Schnörkel“
import turtle def binbaum(maxtiefe, tiefe): turtle.forward(100*pow(0.618,tiefe)) if tiefe < maxtiefe: turtle.left(60) binbaum(maxtiefe, tiefe+1) turtle.right(120) binbaum(maxtiefe, tiefe+1) turtle.left(60) turtle.backward(100*pow(0.618,tiefe)) binbaum(6,0) turtle.exitonclick()
Programm von M.M.: Binärer Baum mit Turtle-Grafik
import turtle def tree(x_): if x_<=rek: turtle.down() turtle.forward(int(200/(x_*1.675))) leftfunk(x_) rightfunk(x_) turtle.up() turtle.backward(int(200/(x_*1.675))) def leftfunk(x_): if x_ <=rek: turtle.left(winkel) tree(x_+1) turtle.right(winkel) def rightfunk(x_): if x_ <=rek: turtle.right(winkel) tree(x_+1) turtle.left(winkel) global rek global winkel winkel=30 rek=8 turtle.up() turtle.goto(0,-200) turtle.left(90) turtle.down() tree(1) turtle.exitonclick()
Mini-Datenbank: für die Binäre Suche
dbListe = [["Staat", "Lebenserwartung", "MioEinwohner", "Fertilitaet"] ,["aegypten", 72.7, 97, 3.4] ,["aequatorialguinea", 64.2, 1.2, 4.9] ,["aethiopien", 62.2, 107.5, 4.4] ,["afghanistan", 51.3, 36.5, 4.8] ,["albanien", 78.3, 2.9, 1.7] ,["algerien", 76.8, 42.7, 3.1] ,["andorra", 82.8, 0.07, 1.3] ,["angola", 56.0, 25.8, 6.0] ,["antigua", 76.5, 0.09, 2.3] ,["argentinien", 77.1, 44.5, 2.3] ,["armenien", 74.6, 3, 1.6] ,["aserbaidschan", 72.5, 9.8, 2.1] ,["australien", 82.2, 24.3, 1.8] ,["bahamas", 72.4, 0.3, 2.0] ,["bahrain", 78.9, 1.3, 2.1] ,["bangladesch", 73.2, 166.4, 2.1] ,["barbados", 75.3, 0.2, 1.5] ,["belgien", 81, 11.3, 1.7] ,["belize", 68.7, 0.3, 2.5] ,["benin", 61.9, 11.1, 5.3] ,["bhutan", 70.1, 0.8, 2.1] ,["bolivien", 69.2, 10.8, 3] ,["bosnien", 76.7, 3.8, 1.3] ,["botswana", 54.5, 2.3, 2.8] ,["brasilien", 73.8, 209.4, 1.7] ,["brunei", 77.2, 0.4, 1.9] ,["bulgarien", 74.5, 7, 1.5] ,["burkinafaso", 55.5, 18.6, 5.7] ,["burundi", 60.5, 10.5, 6.1] ,["chile", 78.8, 18.1, 1.9] ,["china", 75.5, 1393.8, 1.8] ,["costarica", 78.6, 4.8, 1.8] ,["daenemark", 79.4, 5.6, 1.7] ,["deutschland", 80.7, 82.8, 1.6] ,["dominica", 77, 0.07, 3] ,["dominikanische", 78.1, 10.6, 2.4] ,["dschibuti", 63.2, 0.9, 3.2] ,["ecuador", 76.8, 16.3, 2.5] ,["elfenbeinkueste", 58.7, 23.2, 4.9] ,["elsalvador", 74.7, 6.1, 2] ,["emirate", 77.5, 9.2, 1.8] ,["eritrea", 64.9, 5.3, 4.2] ,["estland", 76.7, 1.3, 1.7] ,["fidschi", 72.7, 0.8, 2.7] ,["finnland", 80.9, 5.5, 1.6] ,["frankreich", 81.9, 65.1, 1.9] ,["gabun", 52.1, 2, 4.1] ,["gambia", 64.9, 2, 5.6] ,["georgien", 76.2, 3.9, 1.7] ,["ghana", 66.6, 28, 4.2] ,["grenada", 74.3, 0.1, 2.1] ,["grenadinen", 75.3, 0.1, 2] ,["griechenland", 80.5, 10.9, 1.3] ,["grossbritannien", 80.7, 66.4, 1.8] ,["guatemala", 72.3, 16.6, 3.1] ,["guinea", 60.6, 12.4, 5.1] ,["guineabissau", 50.6, 1.8, 5.6] ,["guyana", 68.4, 0.7, 2.3] ,["haiti", 63.8, 10.8, 3.2] ,["honduras", 71.1, 8.1, 2.5] ,["hongkong", 82.9, 7.3, 1.2] ,["indien", 68.5, 1371.3, 2.3] ,["indonesien", 72.7, 265.2, 2.4] ,["irak", 74.9, 40.2, 4.1] ,["iran", 71.4, 81.6, 2] ,["irland", 80.8, 4.7, 1.9] ,["island", 83, 0.3, 1.8] ,["israel", 82.4, 8.1, 3.1] ,["italien", 82.2, 60.6, 1.3] ,["jamaika", 73.6, 2.8, 2] ,["japan", 85, 126.5, 1.4] ,["jemen", 65.5, 27.4, 4.2] ,["jordanien", 74.6, 7.7, 3.5] ,["kambodscha", 64.5, 15.8, 2.6] ,["kamerun", 58.5, 23.9, 4.9] ,["kanada", 81.9, 37.2, 1.5] ,["kapverde", 72.1, 0.5, 2.3] ,["kasachstan", 70.8, 17.8, 2.6] ,["katar", 78.7, 2.2, 2] ,["kenia", 64, 51, 3.9] ,["kirgisistan", 70.7, 6, 2.5] ,["kiribati", 66.2, 0.1, 4.2] ,["kolumbien", 75.7, 49.8, 2] ,["komoren", 64.2, 0.8, 3.8] ,["kongo", 57.3, 84.3, 6.3] ,["kroatien", 75.9, 4.2, 1.5] ,["kuba", 78.7, 11.5, 1.5] ,["kuwait", 78, 4, 2.1] ,["laos", 64.3, 6.9, 3] ,["lesotho", 53, 2.1, 3.2] ,["lettland", 74.5, 1.9, 1.6] ,["libanon", 77.6, 6, 1.7] ,["liberia", 59, 4.6, 4.9] ,["libyen", 76.5, 6.3, 2.6] ,["liechtenstein", 81.9, 0.03, 1.4] ,["litauen", 74.9, 2.8, 1.6] ,["lucia", 77.8, 0.1, 1.7] ,["luxemburg", 82.3, 0.5, 1.7] ,["macau", 84.5, 0.5, 0.9] ,["madagaskar", 65.9, 24.9, 4.3] ,["malawi", 61.2, 17.7, 6.3] ,["malaysia", 75, 32.5, 1.9] ,["malediven", 75.6, 0.3, 2] ,["mali", 55.8, 18.1, 6] ,["malta", 80.4, 0.4, 1.3] ,["marokko", 76.9, 35.2, 2.2] ,["marshallinseln", 73.1, 0.05, 4.9] ,["mauretanien", 63, 4.1, 4.3] ,["mauritius", 75.6, 1.2, 1.4] ,["mazedonien", 76.2, 2, 1.5] ,["mexiko", 75.9, 130.8, 2.2] ,["mikronesien", 72.9, 0.5, 2.4] ,["moldau", 70.7, 4, 1.3] ,["mongolei", 69.6, 3, 3.1] ,["mosambik", 53.3, 28.7, 5.9] ,["myanmar", 66.6, 53.9, 2.3] ,["namibia", 63.6, 2.5, 3.6] ,["nauru", 67.1, 0.01, 3.4] ,["nepal", 70.7, 29.7, 2.3] ,["neuguinea", 67.2, 7.7, 4] ,["neuseeland", 81.2, 4.5, 2] ,["nevis", 75.7, 0.05, 2.3] ,["nicaragua", 73.2, 6.1, 2.4] ,["niederlande", 81.3, 16.9, 1.7] ,["niger", 55.5, 20.7, 7.6] ,["nigeria", 53.4, 195.9, 5.5] ,["nordkorea", 70.4, 25.2, 2.1] ,["norwegen", 81.8, 5.2, 1.7] ,["oesterreich", 81.5, 8.5, 1.5] ,["oman", 75.5, 4.6, 2.9] ,["osttimor", 68.1, 1.2, 5.7] ,["pakistan", 67.7, 200.6, 3.1] ,["palaestina", 73.9, 4.7, 4.1] ,["palau", 73.1, 0.02, 2.1] ,["panama", 78.6, 3.9, 2.5] ,["paraguay", 77.2, 6.7, 2.6] ,["peru", 73.7, 32.2, 2.4] ,["philippinen", 69.2, 107, 2.7] ,["polen", 77.6, 38.4, 1.4] ,["polynesien", 77.2, 0.2, 2.2] ,["portugal", 79.3, 10.3, 1.4] ,["principe", 64.9, 0.1, 4.4] ,["ruanda", 60.1, 11.9, 4.2] ,["rumaenien", 75.1, 19.3, 1.3] ,["russland", 70.3, 147.3, 1.6] ,["salomonen ", 75.3, 0.5, 3.7] ,["sambia", 52.5, 16.7, 5.3] ,["samoa", 73.7, 0.1, 3.8] ,["sanmarino", 83.3, 0.03, 1.2] ,["saudiarabien", 75.3, 33.4, 2.4] ,["schweden", 82.1, 9.8, 1.8] ,["schweiz", 82.6, 8.3, 1.5] ,["senegal", 61.7, 15.5, 5] ,["serbien", 75.5, 8.8, 1.6] ,["seychellen", 74.7, 0.09, 2.1] ,["sierraleone", 58.2, 7.4, 5.1] ,["simbabwe", 58, 15.9, 4] ,["singapur", 85, 5.6, 1.2] ,["slowakei", 77.1, 5.4, 1.4] ,["slowenien", 78.1, 2, 1.6] ,["somalia", 52.4, 14.3, 6.4] ,["spanien", 81.7, 46.7, 1.3] ,["srilanka", 76.8, 20.8, 2.1] ,["sudan", 64.1, 41.7, 4.7] ,["suedafrika", 63.1, 57.7, 2.4] ,["suedkorea", 82.4, 51.8, 1.1] ,["suriname", 72.2, 0.5, 2.4] ,["swasiland", 51.6, 1.3, 3.3] ,["syrien", 68.4, 18.5, 2.7] ,["tadschikistan", 67.7, 8.6, 3.3] ,["taiwan", 80.1, 23.3, 1.1] ,["tansania", 62.2, 59.1, 5.2] ,["thailand", 74.7, 66.2, 1.5] ,["togo", 65, 7.4, 4.1] ,["tonga", 76.2, 0.1, 3.6] ,["trinidad", 72.9, 1.3, 1.7] ,["tschad", 50.2, 14.4, 6.4] ,["tschechien", 78.6, 10.5, 1.6] ,["tuerkei", 74.8, 81.3, 2.1] ,["tunesien", 76.1, 11.3, 2] ,["turkmenistan", 70.1, 5.4, 2.4] ,["tuvalu", 66.5, 0.01, 3.7] ,["uganda", 55.4, 44.1, 5.4] ,["ukraine", 71.8, 42.3, 1.3] ,["ungarn", 75.9, 9.8, 1.4] ,["uruguay", 77.2, 3.4, 1.9] ,["usa", 79.8, 328, 1.8] ,["usbekistan", 73.8, 32.9, 2.5] ,["vanuatu", 73.4, 0.2, 3.8] ,["venezuela", 75.8, 31.8, 2.4] ,["vietnam", 73.4, 94.7, 2.1] ,["weissrussland", 72.7, 9.4, 1.8] ,["westsahara", 63, 0.5, 2.9] ,["zentralafrika", 52.3, 4.9, 4.4] ,["zypern", 78.7, 1.1, 1.5]]
Binary Search auf der MiniDB:
import MiniDB cL = MiniDB.dbListe suchstring = "ruanda" startindex = 0 endindex = len(cL)-1 while startindex < endindex: mitte_index = round((endindex+startindex)/2) if cL[mitte_index][0] < suchstring: startindex = mitte_index if cL[mitte_index][0] > suchstring: endindex = mitte_index if cL[mitte_index][0] == suchstring: print(mitte_index) break
Binary-Tree Klasse:
import turtle class Node: def __init__(self, data, tiefe, xwert, parent): self.links = None self.rechts = None self.wert = data self.tiefe = tiefe self.xwert = xwert self.parent = parent # ------------------------------------------------------ def printNode(self): print(self.wert) print(self.tiefe) print(self.xwert) # ------------------------------------------------------ def printBaum(self): if self.links: self.links.printBaum() print("wert: ", self.wert, "tiefe: ", self.tiefe, "xwert: ", self.xwert ) turtle.penup() turtle.setpos(self.xwert*900/pow(2,self.tiefe), -200 + self.tiefe*50) if self.parent is not None: turtle.pendown() turtle.goto(self.parent.xwert*900/pow(2,self.parent.tiefe), -200 + self.parent.tiefe*50) turtle.setpos(self.xwert * 900 / pow(2, self.tiefe), -200 + self.tiefe * 50) turtle.dot(24, (0,255,0)) turtle.setpos(self.xwert * 900 / pow(2, self.tiefe), -208 + self.tiefe * 50) turtle.write(str(self.wert), False, align="center") turtle.penup() if self.rechts: self.rechts.printBaum() # ------------------------------------------------------ def insert(self, einfuegewert): if self.wert is not None: if einfuegewert<self.wert : if self.links is None: self.links = Node(einfuegewert, self.tiefe + 1, 2*self.xwert-1, self) else: self.links.insert(einfuegewert) if einfuegewert>=self.wert: if self.rechts is None: self.rechts = Node(einfuegewert, self.tiefe + 1, 2*self.xwert+1, self) else: self.rechts.insert(einfuegewert) if self.wert is None: self.wert = einfuegewert # ------------------------------------------------------ def findeWert(self, suchwert): if suchwert < self.wert: if self.links is None: print("hier is nix") return self.links.findeWert(suchwert) if suchwert > self.wert: if self.rechts is None: print("hier is nix") return self.links.findeWert(suchwert) if suchwert == self.wert: print("gefunden! ", self.wert) # ------------------------------------------------------ import random root = Node(random.randint(1,100),1, 0, None) templist = [] for i in range(0,21): templist.append(i) for i in range(20): tempindex = random.randint(0,len(templist)-1) root.insert(templist[tempindex]) del(templist[tempindex]) turtle.setup(1000,500) turtle.colormode(255) turtle.speed(100) turtle.hideturtle() root.printBaum() turtle.exitonclick()