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... :wink:
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... :wink:
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! :lol:
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