#!/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?
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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
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.
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.
#!/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()
@nfehren: Du solltest Deine while-Schleifen noch in "while True:"-Schleifen umwandeln. So wie sie jetzt dastehen, ist der Aufbau relativ kompliziert zu durchschauen.
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.
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
>>> 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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
@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.
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
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..