Seite 1 von 1
To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 10:41
von nfehren
Servus,
ich möchte in Python 3 eine To-do-list erstellen in die man Aufgaben einschreiben, entfehrnen und anzeigen lassen kann.
Soweit mein Code:
Code: Alles auswählen
#!/usr/bin/python3
import sys
def print_header():
print("Wilkommen zu der Python 3 To-Do-List!")
print("1 Aufgabe hinzufügen\n2 Aufgabe entfernen\n3 To-Do-Liste ansehen\n4 Exit")
def get_selection():
auswahl = ""
while auswahl == "":
print_header()
try:
auswahl = int(input("\nWas wollen sie tun?\n"))
except:
print("Das ist keine Ganzzahl!")
continue
if auswahl < 1 or auswahl > 3:
print("Dieser Menüpunkt steht nicht zur Auswahl!")
auswahl = ""
else:
return auswahl
auswahl = get_selection()
todolist = {}
if auswahl == 1:
name = input("Geben sie ihrem Task einen Namen: ")
todolist[name] = input("Beschreiben sie ihren Task: ")
get_selection()
if auswahl == 2:
print("Dieser Menüpunkt ist noch nicht ausgebaut.")
get_selection()
if auswahl == 3:
print(todolist)
get_selection()
if auswahl == 4:
sys.exit(1)
Ich bin jetzt gerade erst am Anfang.. Wieso zeigt er mir die aber die Tasks die ich eingetragen habe nicht an?
Re: To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 10:49
von mutetella
nfehren hat geschrieben:Wieso zeigt er mir die aber die Tasks die ich eingetragen habe nicht an?
Weil keine eingetragen sind...
Du verwendest für Deine Daten ein Dictionary, das nach jedem Aufruf von `get_selection` neu angelegt wird. Egal was Du da reinschreibst, es wird ja danach immer wieder neu angelegt...
Besser wäre es, wenn Du `todolist` nicht auf Modulebene vorhältst, sondern die Daten zwischen den Funktionen (die es so noch nicht gibt) weiterreichst.
mutetella
Re: To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 10:58
von nfehren
mutetella hat geschrieben:nfehren hat geschrieben:Wieso zeigt er mir die aber die Tasks die ich eingetragen habe nicht an?
Weil keine eingetragen sind...
Du verwendest für Deine Daten ein Dictionary, das nach jedem Aufruf von `get_selection` neu angelegt wird. Egal was Du da reinschreibst, es wird ja danach immer wieder neu angelegt...
Besser wäre es, wenn Du `todolist` nicht auf Modulebene vorhältst, sondern die Daten zwischen den Funktionen (die es so noch nicht gibt) weiterreichst.
mutetella
Danke werde ich gleich probieren

Re: To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 13:43
von nfehren
Soooooo das Ding funktioniert jetzt!
Jedoch will ich das Python die Aufgaben der To-Do-List in einem File abspeichert, dass diese nicht verloren gehen.
Könntet ihr mir da etwas helfen? Bin leider noch ein ziemlicher Anfänger.
Code: Alles auswählen
#!/usr/bin/python3
import sys
def print_header():
print("\n\n###########################################")
print("# Willkommen zu Navid's To-Do-List! #")
print("###########################################\n\n\n")
print("##########################\n\n 1 Aufgabe hinzufügen \n 2 Aufgabe entfernen ")
print(" 3 To-Do-Liste ansehen \n 4 Exit ")
print("\n##########################")
def get_selection():
auswahl = ""
while auswahl == "":
print_header()
try:
auswahl = int(input("\nWas wollen sie tun?\n"))
except:
print("Das ist keine Ganzzahl!")
continue
if auswahl < 1 or auswahl > 4:
print("Dieser Menüpunkt steht nicht zur Auswahl!")
auswahl = ""
else:
return auswahl
auswahl = get_selection()
todolist = {}
while auswahl != 4:
if auswahl == 1:
name = input("Geben sie ihrem Task einen Namen: ")
todolist[name] = input("Beschreiben sie ihren Task: ")
if auswahl == 2:
print("Dieser Menüpunkt ist noch nicht ausgebaut.")
if auswahl == 3:
for k in todolist.keys():
print("{0}: {1}".format(k,todolist[k]))
auswahl = get_selection()
Re: To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 14:12
von Sirius3
@nfehren: Du solltest Deine while-Schleifen noch in "while True:"-Schleifen umwandeln. So wie sie jetzt dastehen, ist der Aufbau relativ kompliziert zu durchschauen.
Re: To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 15:07
von mutetella
@nfehren: Schau' Dir mal das
json Modul an.
Noch als Anregung: In Deiner `get_selection` fängst Du ausnahmslos alle Fehler ab, was man so nicht machen sollte. Wenn Du einen Fehler wie in diesem Fall einen `ValueError` behandeln möchtest, dann solltest Du auch nur diesen Fehler behandeln. Versuche z. B. einmal, die Eingabe durch Ctrl-C (das auch einen Fehler provoziert) zu unterbrechen, das wird nicht gehen. Das `continue` statement kannst Du an dieser Stelle ganz weglassen.
Vielleicht so:
Code: Alles auswählen
def get_selection(smallest, biggest):
auswahl = None
while True:
try:
auswahl = int(input('\nWas wollen sie tun?\n'))
except ValueError:
pass
if not auswahl is None and not smallest <= auswahl <= biggest:
print('Bitte geben Sie eine Zahl '
'zwischen {0} und {1} ein!'.format(smallest, biggest))
else:
return auswahl
Code: Alles auswählen
>>> get_selection(1, 4)
Was wollen sie tun?
0
Bitte geben Sie eine Zahl zwischen 1 und 4 ein!
Was wollen sie tun?
5
Bitte geben Sie eine Zahl zwischen 1 und 4 ein!
Was wollen sie tun?
3
3
mutetella
Re: To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 15:23
von BlackJack
@mutetella: Da kann man noch das `None` für `auswahl` rausnehmen, sowohl die Zuweisung ganz am Anfang als auch den Test darauf. Ausnahmebehandlung kennt auch einen ``else``-Zweig nach ``except``. Da ist dann sichergestellt das es keine Ausnahme gab und dann ist sichergestellt, dass `auswahl` an eine ganze Zahl gebunden ist.
Re: To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 15:37
von snafu
Hier mal eine Alternative, die ebenfalls ``None`` für die Kennzeichnung einer Ausnahme verwendet, aber IMHO eine etwas bessere Struktur hat:
Code: Alles auswählen
def get_selection(min_value, max_value):
error_msg = (
'Bitte geben Sie eine Zahl '
'zwischen {} und {} ein.'.format(min_value, max_value)
)
while True:
try:
selection = int(input('\nWas wollen sie tun?\n'))
except ValueError:
selection = None
if selection is None or not min_value <= selection <= max_value:
print(error_msg)
else:
return selection
Re: To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 15:59
von nfehren
Prima danke!
Aber wie kann ich die eingetragenen "todo's" auf einem file abspeichern, dass sie nach dem schließen noch da sind?
EDIT:
Beides klappt bei mir nicht..
Traceback (most recent call last):
File "/data/home/nfehren/bin/python/To-Do-List.py", line 28, in <module>
auswahl = get_selection()
TypeError: get_selection() takes exactly 2 arguments (0 given)
Re: To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 16:13
von BlackJack
@nfehren: Die Fehlermeldung sagt doch ziemlich exakt was das Problem ist.
Re: To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 16:15
von Hyperion
nfehren hat geschrieben:
Aber wie kann ich die eingetragenen "todo's" auf einem file abspeichern, dass sie nach dem schließen noch da sind?
mutetella hat geschrieben:
@nfehren: Schau' Dir mal das json Modul an.
nfehren hat geschrieben:
EDIT:
Beides klappt bei mir nicht..
Steht doch in der Fehlermeldung lesbar drin:
Traceback (most recent call last):
File "/data/home/nfehren/bin/python/To-Do-List.py", line 28, in <module>
auswahl = get_selection()
TypeError: get_selection() takes exactly 2 arguments (0 given)
Re: To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 16:50
von Sirius3
Ich such mir auch mal meine Lieblingsschreibweise raus:
Code: Alles auswählen
def get_selection(min_value, max_value):
while True:
try:
selection = int(input('\nWas wollen sie tun?\n'))
assert min_value <= selection <= max_value
return selection
except (ValueError, AssertionError):
print(
'Bitte geben Sie eine Zahl '
'zwischen {} und {} ein.'.format(min_value, max_value)
)
Re: To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 17:04
von EyDu
@Sirius3: Habe ich etwas übersehen oder soll dein Programm mit Absicht fehlerhaft sein? Eine Ausführung mit -O oder -OO wird irgendwie schwierig ...
Re: To-do-list erstellen
Verfasst: Mittwoch 18. Dezember 2013, 17:18
von mutetella
@Sirius: Wie's der Zufall wohl will, bin ich über G+ heute auf
diesen Eintrag gestoßen. Ich trau' mir da jetzt keine Meinung zu...
mutetella