Kochbuch

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

@all: Vielen Dank habs geschafft nur noch löschen ist das Problem... Könntet ihr mir nochmal helfen :oops: ?
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@non191
Wenn Du mal zeigst, was Du bisher hast, kann man Dir hier auch gerne helfen. Einfach Deinen Code innerhalb code-tags posten...

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

@mutetela: Hab mal deins übernommen.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@nono191
Und auch verstanden, was da im Einzelnen passiert? Sonst macht das kaum Sinn, schon gleich neue Funktionalität einzubauen.
Ansonsten nochmal der Hinweis, die Dokumentation zu bemühen. Auch wenn einen das erstmal erschlagen will... ohne Dokumentation lesen geht's einfach nicht. Jedenfalls wirst Du dort eine Methode finden, mit der Du Elemente aus einem dictionary bzw. aus einer Liste entfernen kannst. Und dann noch der Hinweis: Zum Hinzufügen hab' ich eine Funktion ``add`` erstellt, zum Entfernen würde ich eine Funktion ``remove`` schreiben.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

@mutetella: Ich checke es im grossen und ganzen schon was ich nicht begreife: get_category, print "{:2d}: {}".format(item_number, item[0]), menu[choice][1](recipes).
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

@all: Ich kann kein \ schreiben bei Python und copy paste kann ich auch nicht machen. Weis jemand an was das liegen könnte?
BlackJack

@nono191: Beides müsstest Du eigentlich näher beschreiben damit wir nicht raten müssen. Gewöhn Dir mal an nicht einfach so zusammenhanglose knappe Fragen zu schreiben sondern beschreibe ausführlicher was Du machen möchtest, was Du tatsächlich machst, also *Quelltext*, und was dann nicht funktioniert. Also entweder eine konkrete Fehlermeldung/Ausnahme, am besten 1:1 in den Beitrag kopieren, oder beschreib was passiert und was Du stattdessen erwartet hättest. Am besten auch warum Du etwas anderes erwartet hast als dann letztendlich passiert ist.

Bei dem \ würde ich jetzt mal raten das Du Dir die Dokumentation bezüglich Zeichenkettenliteralen mal durchlesen solltest und was dort ein \ bedeutet. Das wird im Tutorial in der Python-Dokumentation zum Beispiel erklärt.
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

@BlackJack: Ich kopiere zum Beispiel einen Text aus der Dokumentation und will ihn mit -v eifügen dann steht aber das Programm still und ich muss es beenden...
Und wenn ich mit alt-shift-7 ein Backslash schreiben will schreibt es nichts.
Zuletzt geändert von nono191 am Mittwoch 7. Oktober 2015, 18:25, insgesamt 1-mal geändert.
BlackJack

@nono191: Wo willst Du einfügen? Welches Programm steht still? Was ist ”es” hier?
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

@BlackJack: Programm = IDLE = es
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

@all: Was habe ich hier falsch gemacht?

Code: Alles auswählen

from collections import defaultdict as DefaultDict
import json

def remove(recipes):
        if recipes:
                category = get_category(
                        "Aus welcher Kategorie sollen Rezepte gelöscht werden? ",recipes
                )
                for recipe in recipes[category]:
                        print "\n{}\n***\n"
        else:
                print "Keine Rezepte vorhanden!\n"
        
        recipes[category].remove(raw_input("Welches Rezept willst du löschen?"))
def load():
    try:
        with open("recipes.txt", "w") as file_:
            recipes = DefaultDict(list, json.load(file_))
    except IOError:
        recipes = DefaultDict(list)
    return recipes

def save(recipes):
    with open ("recipes.txt", "w") as file_:
        json.dump(recipes, file_)

def get_category(prompt, recipes):
    categories = recipes.keys()
    for number, name in enumerate(categories):
        print "{:2d}: {}".format(number, name)
    category = raw_input(prompt)
    try:
        category = categories[int(category)]
    except (ValueError, IndexError):
        pass
    return category

def add(recipes):
    try:
        recipe = raw_input("Ihr Rezepttext(Ctrl-C beendet):")
    except KeyboardInterrupt:
        return
    category = get_category(
        "In welche Kategorie soll das Rezept hizugefügt werden? ",recipes
    )
    recipes[category].append(recipe)

def show(recipes):
    if recipes:
        category = get_category(
            "Aus welcher Kategorie sollen Rezepte gezeigt werden? ", recipes
        )
        for recipe in recipes[category]:
            print "\n{}\n***\n".format(recipe)
    else:
        print "Keine Rezepte vorhanden!\n"

def run():
    menu = [
        ("Neues Rezept", add),
        ("Zeige Rezepte", show)
        ("Lösche Rezept", remove)
    ]
    recipes = load()
    while True:
        print
        for item_number, item in enumerate(menu):
            print "{:2d}: {}".format(item_number, item[0])
        try:
            choice = int(raw_input("Ihre Wahl (Ctrl-C beendet): "))
        except (ValueError, IndexError):
            print "Bitte gültige Nummer eingeben...",
        except KeyboardInterrupt:
            break
        print
        menu[choice][2](recipes)
    save(recipes)

run()
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

@all: Aha hab's gecheckt das "," fehlt.
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

@all: Was mache ich jetzt falsch?

Code: Alles auswählen

from collections import defaultdict as DefaultDict
import json

def remove(recipes):
        if recipes:
                category = get_category(
                        "Aus welcher Kategorie sollen Rezepte gelöscht werden? ",recipes
                )
                for recipe in recipes[category]:
                        print "\n{}\n***\n"
        else:
                print "Keine Rezepte vorhanden!\n"

        recipes[category].remove(raw_input("Welches Rezept willst du löschen?"))
def load():
    try:
        with open("recipes.txt", "w") as file_:
            recipes = DefaultDict(list, json.load(file_))
    except IOError:
        recipes = DefaultDict(list)
    return recipes

def save(recipes):
    with open ("recipes.txt", "w") as file_:
        json.dump(recipes, file_)

def get_category(prompt, recipes):
    categories = recipes.keys()
    for number, name in enumerate(categories):
        print "{:2d}: {}".format(number, name)
    category = raw_input(prompt)
    try:
        category = categories[int(category)]
    except (ValueError, IndexError):
        pass
    return category

def add(recipes):
    try:
        recipe = raw_input("Ihr Rezepttext(Ctrl-C beendet):")
    except KeyboardInterrupt:
        return
    category = get_category(
        "In welche Kategorie soll das Rezept hizugefügt werden? ",recipes
    )
    recipes[category].append(recipe)

def show(recipes):
    if recipes:
        category = get_category(
            "Aus welcher Kategorie sollen Rezepte gezeigt werden? ", recipes
        )
        for recipe in recipes[category]:
            print "\n{}\n***\n".format(recipe)
    else:
        print "Keine Rezepte vorhanden!\n"

def run():
    menu = [
        ("Neues Rezept", add),
        ("Zeige Rezepte", show),
        ("Lösche Rezept", remove)
    ]
    recipes = load()
    while True:
        print
        for item_number, item in enumerate(menu):
            print "{:2d}: {}".format(item_number, item[0])
        try:
            choice = int(raw_input("Ihre Wahl (Ctrl-C beendet): "))
        except (ValueError, IndexError):
            print "Bitte gültige Nummer eingeben...",
        except KeyboardInterrupt:
            break
        print
        menu[choice][2](recipes)
    save(recipes)

run()
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@nono191: die Fehlermeldung hilft Dir, den Fehler zu finden und die solltest Du auch immer mitposten, damit wir hier nicht raten müssen, was jetzt falsch ist.
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

@Sirius3:
0: Neues Rezept
1: Zeige Rezepte
2: Lösche Rezept
Ihre Wahl (Ctrl-C beendet): 2


Traceback (most recent call last):
File "/Python/easygui/Viel Glück.py", line 80, in <module>
run()
File "/Python/easygui/Viel Glück.py", line 77, in run
menu[choice][2](recipes)
IndexError: tuple index out of range
>>>
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@nono191: Der Fehler sagt, dass das Tuple menu[choice] weniger als drei Einträge hat, wie Du selbst schnell bei an der Definition sehen kannst.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@nono191

Code: Alles auswählen

>>> (1, 2, 3, 4, 5)[0]
1
>>> (1, 2, 3, 4, 5)[4]
5
>>> (1, 2, 3, 4, 5)[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

@all: Also was genau muss ich ändern?
BlackJack

@nono191: Den Quelltext. Deine Einstellung. Deine Art zu Fragen. Deinen Wissenstand über Python-Grundlagen.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@nono191
Wie Sirius3 schon sagte: Du versuchst auf ein Tupleelement zuzugreifen, das es nicht gibt. Den Teil musst Du ändern. Überleg' doch mal, was

Code: Alles auswählen

    menu = [
        ('Neues Rezept', add),
        ('Zeige Rezepte', show),
        ('Lösche Rezept', remove)
    ]
bedeutet und was

Code: Alles auswählen

        menu[choice][2](recipes)
macht.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten