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 Vergleichs­algorithmus 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)