Ein sehr gutes Pendant zu Project Euler ist die Seite "Sphere Online Judge".
Auch hier ist es mölich vorher definierte Programmierprobleme zu lösen, diese einzusenden und in diesem Falle ganz besonders, mit einem in die Seite integrierten Compiler überprüfen zu lassen.
Sollte also die Laufzeit nicht stimmen, oder treten kleine Fehler auf, welche auf den ersten Blick nicht sichtbar sind, so muss man sich an die Arbeit machen und den Code optimieren.
Sphere Online Judge
Posts mit dem Label Python werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Python werden angezeigt. Alle Posts anzeigen
Mittwoch, 28. Januar 2009
Samstag, 13. Dezember 2008
Project Euler - Programmierübungen der Extraklasse!
Ständig steht man vor dem Problem, dass man nicht weiss was man programmieren soll. Entweder sind Programme einfach nicht realisierbar oder es sind so einfache Programme, dass man selber den Nutzen der ganzen Sache nicht erkennt.
Wenn man jetzt noch einen kleinen Hang zu mathematischen Problemen hat, dann ist Project Euler das absolut passende Programm für viele Stunden von Programmierarbeit.
Mehrere auf Programmiersprachen bzw. Lösungen durch Programmiersprachen zugeschnittene Probleme fordern und lehren ungemein. Das beste daran ist die Möglichkeit nach einer eigenen Lösung sich in einem Forum mit anderen auszutauschen und den eigenen Code immer weiter zu optimieren.
Project Euler
Wenn man jetzt noch einen kleinen Hang zu mathematischen Problemen hat, dann ist Project Euler das absolut passende Programm für viele Stunden von Programmierarbeit.
Mehrere auf Programmiersprachen bzw. Lösungen durch Programmiersprachen zugeschnittene Probleme fordern und lehren ungemein. Das beste daran ist die Möglichkeit nach einer eigenen Lösung sich in einem Forum mit anderen auszutauschen und den eigenen Code immer weiter zu optimieren.
Project Euler
Mittwoch, 10. September 2008
Ein Adressbuch mit "pickle"
Nach meinem erstem Projekt, welches mich in der Lernkurve doch sehr vorangebracht habe ich nun ein weiteres aus dem Projektideenfundus des Pythonwikis angestrebt und mich daran versucht.
Zunächst möchte ich ein Adressbuch auf Dateiebene, also ohne eine SQL-Datenbank realisieren bis ich so weit bin, dass ich auch das ohne Probleme hinbekommen würde. Für die Speicherung benutze ich "pickle", ein Modul, welches Daten sequentiell in eine normale Textdatei schreibt, damit es möglich ist nach dem Auslesen dieser Objekte, Variablen etc. in der gleichen Form wieder zu erhalten, ohne diese noch einmal neu deklarieren, oder füllen zu müssen.
Der erste Entwurf ist ein Versuch OOP zu schreiben. Ich hoffe es ist mir "banal" gelungen :) Die überarbeitete Version wird natürlich folgen.
Zunächst möchte ich ein Adressbuch auf Dateiebene, also ohne eine SQL-Datenbank realisieren bis ich so weit bin, dass ich auch das ohne Probleme hinbekommen würde. Für die Speicherung benutze ich "pickle", ein Modul, welches Daten sequentiell in eine normale Textdatei schreibt, damit es möglich ist nach dem Auslesen dieser Objekte, Variablen etc. in der gleichen Form wieder zu erhalten, ohne diese noch einmal neu deklarieren, oder füllen zu müssen.
Der erste Entwurf ist ein Versuch OOP zu schreiben. Ich hoffe es ist mir "banal" gelungen :) Die überarbeitete Version wird natürlich folgen.
import pickle
from sys import exit
class Person(object):
def __init__(self):
pass
def person_new():
person = Person()
person.vorname = raw_input('Vorname: ')
person.name = raw_input('Nachname: ')
person.geburtsort = raw_input('Geburtsort: ')
person.strasse = raw_input('Strasse: ')
person.hausnummer = raw_input('Hausnummer: ')
person.plz = raw_input('PLZ: ')
person.stadt = raw_input('Stadt: ')
return person
def person_add():
print personen
def person_show():
x = 0
for i in personen:
x+=1
print str(x) + ') ' + i
def dump_dict():
file = open('personen/daten.pk1', 'wb')
pickle.dump(personen, file)
file.close()
def load_dict():
file = open('personen/daten.pk1', 'rb')
personen = pickle.load(file)
file.close()
return personen
def menue_haupt():
print '1) Personen listen'
print '2) Person hinzufuegen'
print '3) Person loeschen'
print '4) Programm beenden'
i = int(raw_input('\nWaehlen Sie eine Option: '));print ''
return i
def menue_list():
i = raw_input('\nWelche Person?\n')
person = personen[i]
print 'Vorname: ' + person.vorname
print 'Nachname: ' + person.name
print 'Gebursort: ' + person.geburtsort
print 'Strasse: ' + person.strasse
print 'Hausnummer: ' + str(person.hausnummer)
print 'PLZ: ' + str(person.plz)
print 'Stadt: ' + person.stadt
def menue_delete():
i = raw_input('\nWelche Person moechten Sie loeschen?\n')
del personen[i]
dump_dict()
## Wieso kann `break` nicht ausgelagert werden?
def main():
while True:
i = menue_haupt()
if i == 1:
while True:
person_show()
menue_list()
i = int(raw_input('\n1) Menue\n2) Nochmal\n'))
if i == 1:
break
elif i == 2:
person_add()
i = int(raw_input('\n1) Menue\n2) Nochmal\n'))
if i == 1:
break
elif i == 3:
while True:
person_show()
menue_delete()
i = int(raw_input('\n1) Menue\n2) Nochmal\n'))
if i == 1:
break
elif i == 4:
exit()
personen = load_dict()
main()
Dienstag, 2. September 2008
"Hangman" - Mein erstes Python-Projekt
Nachdem mein erster, nur auf Modulbasis bestehender Versuch ein Hangman-Spiel zu schreiben zwar funktioniert hat, in programmiertechnischer Hinsicht allerdings ein Fiasko war habe ich diesen mit Hilfe des deutschen Python-Forums (nur zu empfehlen!) neu geschrieben bzw. so viel geändert, dass im Grunde genommen ein neuer Code daraus entstanden ist :)
Die wichtigsten zusammenhängenden Funktionen sind in Hauptfunktionen unterteilt, um eine bessere Übersicht und Funktionalität gewährleisten zu können. Zur etwas besseren visuellen Darstellung wird auch eine Funktion ausgeführt, welche in kleines Hangman'chen anzeigt.
Der Code ist mit Sicherheit nicht "gut" oder "perfekt", aber vielleicht hilft es ja dem ein oder anderen. Verbesserungsvorschläge sind natürlich auch gerne gesehen :)
Den Code gibts hier
Die wichtigsten zusammenhängenden Funktionen sind in Hauptfunktionen unterteilt, um eine bessere Übersicht und Funktionalität gewährleisten zu können. Zur etwas besseren visuellen Darstellung wird auch eine Funktion ausgeführt, welche in kleines Hangman'chen anzeigt.
Der Code ist mit Sicherheit nicht "gut" oder "perfekt", aber vielleicht hilft es ja dem ein oder anderen. Verbesserungsvorschläge sind natürlich auch gerne gesehen :)
Den Code gibts hier
from random import shuffle
datei = open('wort.txt', 'r')
var = datei.read()
words = var.split(" ")
datei.close()
def hangman_show(a, b):
hangman = ["-----", "|/ |", "| o ", "| \O/ ", "| / \ "]
for i in range(a, b):
print hangman[i]
def input_char():
char = raw_input('\nBitte geben Sie einen Buchstaben ein:')
while len(char) > 1 or char == '':
char = raw_input('Bitte geben Sie einen EINZELNEN Buchstaben ein:')
char = char.upper()
return char.swapcase()
def output_word(wort, buchstaben):
daneben = 0
for stelle in wort:
if stelle in buchstaben:
print stelle,
else:
print "_",
daneben += 1
return daneben
def guess_chars(versuche, words):
shuffle(words)
wort = words.pop()
fehler = 0
buchstaben = ''
while fehler < versuche:
char = input_char()
if char in wort:
print 'Dieser Buchstabe ist richtig!'
if char not in buchstaben:
buchstaben += char
if output_word(wort, buchstaben) == 0:
print '\nSie haben das Wort erraten!'
break
else:
print 'Dieser Buchstabe ist schon vorhanden!'
else:
print 'Dieser Buchstabe ist falsch!'
hangman_show(0,fehler+1)
fehler += 1
if fehler == versuche:
print '\nSie haben verloren!'
nochmal = ''
while nochmal == 'j':
guess_chars(5, words)
nochmal = raw_input('Wollen Sie noch einmal spielen? (j/n)')
Abonnieren
Posts (Atom)