Python-Onlinetest
Der Onlinetest in Python liegt schon etwas zurück und die Bekanntgabe der Noten liegt noch etwas in der Zukunft. Die Punkteverteilung war für alle Aufgaben gleich. Und es war der letzte. Keine Onlinetests mehr dieses Semester.
1. Da die Leerzeichen weltweit knapp werden, sollen von der Standardeingabe gelesene Zeilen auf das Nötigste an Leerzeichen reduziert werden. Zu entfernen sind Leerzeichen am Anfang und Ende der Zeile und Wörter werden maximal mit 1 Leerzeichen getrennt. Zusätzlich werden Wörter, die mit einem Großbuchstaben anfangen, komplett groß geschrieben.
def entleerzeiche(line): line = line.strip() line = line.split() result = [] for wort in line: if str.isupper(wort[0]): wort = str.upper(wort) result.append(wort) line = " ".join(result) return line if __name__ == "__main__": line = raw_input() while(line != ""): line = entleerzeiche(line) print line line = raw_input()
2. In der Datei „belegung.lst“ sind die Kursbelegungen aller Studenten gespeichert. Die Zeilen sehen so aus: lvname;matrikelnr;lvnr;lvtyp
. Anhand dieser Datei soll eine neue Datei „ausgabe2.lst“ angelegt werden, die dies beinhaltet: lvnr,belegungen,lvname lvtyp
.
Edit 2010-03-07: Das Eingabeformat in der Datei war vermutlich lvname;matrikelnr;lvnr;lvtyp
anstatt lvnr;matrikelnr;lvnanme;lvtyp
. Sonst wäre der eigene Vergleichsalgorithmus unnötig und falsch.
def lvnrsort(x,y): "Eigener Sort anhand den Lehrveranstaltungsnummern" x = x.split(";") y = y.split(";") return int(x[2]) - int(y[2]) def belegung(filename): "Liest Belegungsdatei und schreibt ausgabe2.lst" # Belegungen zählen countfile = fopen(filename, "r") countdict = {} for ele in countfile: line = ele.split(";") if countdict.get(line[0], 0) == 0: countdict[ line[0] ] = 1 else: countdict[ line[0] ] += 1 countfile.close() # Dateinhalt zurechtbasteln inputfile = fopen(filename, "r") schondrin = [] inhalt = "" for ele in sorted(inputfile, cmp=lvnrsort): line = line.split(";") if line[0] in schondrin: continue schondrin.append(line[0]) belegungen = str( countdict.get(line[0], 0) ) inhalt += ",".join( [ line[0], belegungen, line[2] ] ) inhalt += line[3] inputfile.close() # Ergebnis in Datei schreiben ausgabe = file("ausgabe2.lst", "w") ausgabe.write(inhalt) ausgabe.close() if __name__ == "__main__": filename = "belegung.lst" belegung(filename)
3. Schreibe einen sprachlichen Taschenrechner. Eine gültige Rechenaufgabe wäre: 17 plus 4 mal 2 gleich
mit dem Ergebnis 42
. Punkt-vor-Strich-Rechnung soll ignoriert werden. Die Rechnung wird als Parameter beim Aufruf übergeben.
import sys def rechnen(command): command = command[1:] # Dateipfad wegfallen lassen zahl = int(command[0]) # Startwert for i in range( 0, len(command)-1 )[1::2]: if command[i] == "plus": zahl += int(command[i+1]) elif command[i] == "minus": zahl -= int(command[i+1]) elif command[i] == "mal": zahl *= int(command[i+1]) elif command[i] == "durch": zahl /= int(command[i+1]) return zahl if __name__ == "__main__": print rechnen(sys.argv)