Onlinetest Python
von Kai um 20:37 am Montag, 11. Januar 2010 in Klausuren, Programmiersprachen, Studium | 0 Kommentare
Heute war es wieder mal soweit: Onlinetest. Dieses mal in Python. Nachdem ich erfolgreich meine Maschine (iMac mit Debian, Windowmanager war glaub ich FVWM) zweimal abgeschossen hatte, bin ich in der vorgegebenen Zeit von 90 Minuten knapp fertig geworden. Eigentlich sind die gestellten Aufgaben in den bisherigen Onlinetests, die ich so mitgeschrieben habe, nicht extrem schwer, trotzdem finde ich es aber schwierig auf Kommando kreativen (und möglichst cleveren) Code zu schreiben.
Es sind eben diese typischen Prüfungssituationen bei denen man unter erschwerten Bedingungen klaren Kopf behalten muss ![]()
Das waren die Aufgaben:
Aufgabe 1:
Man soll von der Standardeingabe eine Zeile einlesen und unnötige Leerzeichen entfernen. Außerdem soll jedes Wort mit einem großen Anfangsbuchstaben in Großbuchstaben umgewandelt wieder ausgegeben werden.
while True:
line = raw_input()
line = line.split()
for word in line:
if(str.isupper(word[0])):
print str.upper(word),
else:
print word,
print # Zeilenumbruch für schönere Ausgabe
Aufgabe 2:
Die zweite Aufgabe bestand darin, eine Datei belegung.dat einzulesen, die folgendes Format hatte: <VL-Nr>; <matrikelNr>; <VL-Name>; <VL-Typ>.
Danach sollte die so eingelesene Datei in folgendem Format in eine Datei ausgabe.dat geschrieben werden:
<VL-Nr>,<AnzahlBelegungen>, <VL-Name> <VL-Typ>
Momentan sind in der Ausgabe noch doppelte Einträge drin, das müsste noch geändert werden.
dict = {}
belegung = []
input = open('belegung.dat','r')
for line in input:
line = line.split(';')
belegung.append(line)
input.close()
for line in belegung:
if dict.has_key(line[0]):
dict[line[0]] += 1
else:
dict[line[0]] = 1
ausgabe = file('ausgabe.dat','w')
for nummer, anzahl in dict.iteritems():
for line in belegung:
tmp = ""
if nummer==line[0]:
try:
tmp = str(nummer) + ',' + str(anzahl) + ',' + line[2] + '\n'
ausgabe.write(tmp)
except:
pass
ausgabe.close()
Aufgabe 3:
Die dritte Aufgabe bestand darin, einen “sprach-begabten” Taschenrechner zu programmieren, der beim Aufruf des Programms Argumente wie “17 plus 4 minus 3 gleich” übernimmt und korrekt auswertet. Es soll bewusst auf Punkt-vor-Strich Rechnung verzichtet werden (also fällt eval() flach). Außerdem kann man der Einfachheit davon ausgehen, dass nur korrekte Argumente übergeben werden.
Ich hab ungefähr so etwas hingeschrieben:
import sys
i = 0
result = 0
input = sys.argv[1:]
while i < len(input):
if input[1]=="gleich":
result = int(input[0])
break
elif input[i]=="plus":
result = int(input[i-1]) + int(input[i+1])
input[i+1] = result
elif input[i]=="minus":
result = int(input[i-1]) - int(input[i+1])
input[i+1] = result
elif input[i]=="mal":
result = int(input[i-1]) * int(input[i+1])
input[i+1] = result
elif input[i]=="durch":
result = int(input[i-1]) / int(input[i+1])
input[i+1] = result
i += 1
print "Ergebnis:",str(result)


