Kochbuch
@nono191: Die Frage ist irgendwie nicht eindeutig: Willst Du jetzt wissen wie man das machen kann das am Ende alle Daten gelöscht sind, oder ist genau das Dein Problem?
Wie speicherst Du die Daten denn?
Wie speicherst Du die Daten denn?
@nono191: Was denn jetzt *genau*? Was für Daten hast Du? Typen, Struktur, …? Würde JSON als Format ausreichen?
Code: Alles auswählen
import easygui
antwort = easygui.buttonbox("Ich schenke dir ein Kochbuch. Willst du es jetzt nutzen?",
choices = ["Ja", "Nein"] )
if antwort == "Nein":
antwort2 = easygui.buttonbox("Schade, ein andermal?",
choices = ["Ja", "Nein", "Vieleicht"] )
if antwort2 == "Ja":
easygui.enterbox("Wann?")
easygui.msgbox("Okay, ich freu mich")
if antwort2 == "Nein":
easygui.msgbox("Schade")
if antwort2 == "Vieleicht":
easygui.msgbox("Okay, vieleicht bis später")
else:
aktuelleantwort1 = easygui.buttonbox("In welcher Kategorie willst du nachschauen oder etwas einspeichern?",
choices = ["Snacks", "Vorspeise", "Hauptgang", "Dessert"] )
abrufen_einspeichern = easygui.buttonbox(title = aktuelleantwort1, msg = "Willst du etwas einspeichern oder etwas abrufen?",
choices = ["Einspeichern", "Abrufen"] )
if abrufen_einspeichern == "Einspeichern":
if aktuelleantwort1 == "Snacks":
hinzufuegen = easygui.enterbox ("Gib den Namen des Rezeptes ein, das du bei Snacks hinzufügen willst.")
Snacks = list(hinzufuegen)
for i in hinzufuegen:
del Snacks[0]
Snacks.append(hinzufuegen)
Zuletzt geändert von Anonymous am Dienstag 6. Oktober 2015, 14:32, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Grund: Quelltext in Python-Code-Tags gesetzt.
@nono191: Na dann: Nimm JSON. Da gibt's ein Modul in der Standardbibliothek. Denk Dir eine sinnvolle Datenstruktur aus. Ein Wörterbuch das die Kategorien auf Listen mit den Rezepten abbildet wäre passend. Dann braucht man auch keine Vergleiche mit ``if`` auf die Kategorie.
Die Zeilen ab 23 machen nicht wirklich Sinn.
Die Namen sind teilweise nicht gut. Wenn man anfängt Namen durchzunummerieren macht man etwas falsch. Entweder man war zu faul sich einen richtigen Namen auszudenken, oder man hat zu viele Namen, oder man möchte eigentlich eine Datenstruktur verwenden. Meistens eine Liste.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Funktionen ist dann auch das Stichwort: Schreibe welche. Und trenne dabei die Programmlogik von der Benutzerinteraktion.
Die Zeilen ab 23 machen nicht wirklich Sinn.
Die Namen sind teilweise nicht gut. Wenn man anfängt Namen durchzunummerieren macht man etwas falsch. Entweder man war zu faul sich einen richtigen Namen auszudenken, oder man hat zu viele Namen, oder man möchte eigentlich eine Datenstruktur verwenden. Meistens eine Liste.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Funktionen ist dann auch das Stichwort: Schreibe welche. Und trenne dabei die Programmlogik von der Benutzerinteraktion.
@nono191: Man übergibt der entsprechenden Funktion eine Datenstruktur die sich als JSON serialisieren lässt, also zum Beispiel ein Wörterbuch das Kategorien auf Listen mit Rezepten (die auch wieder aus JSON-serialisierbaren Werten bestehen müssen), und ein zum schreiben geöffnetes Dateiobjekt. Hast Du Dir die Dokumentation mal durchgelesen?
Die offizielle Dokumentation zu json.nono191 hat geschrieben:@BlackJack: Welche Dokumentation?
@nono191: Ich hab' mal was gebastelt, das unter anderem json und defaultdict nutzt. Vielleicht hilft's Dir ein wenig beim Verständnis...
mutetella
P.S. Mein Code ist Python 2 konform, falls Du Python 3 nutzt, musst Du ``raw_input()`` durch ``input()`` ersetzen und ``print`` als Funktion verwenden...
Code: Alles auswählen
from collections import defaultdict as DefaultDict
import json
def load():
try:
with open('recipes.txt') 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(
'Unter welche Kategorie faellt Rezept? ', 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)
]
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 gueltige Nummer eingeben...',
except KeyboardInterrupt:
break
print
menu[choice][1](recipes)
save(recipes)
P.S. Mein Code ist Python 2 konform, falls Du Python 3 nutzt, musst Du ``raw_input()`` durch ``input()`` ersetzen und ``print`` als Funktion verwenden...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
@all: Ich muss mich erstmal bedanken: Auf dieser Seite wird man mega nett behandelt und so... Aber ich bin erst 11 (und finde es ist bisschen kompliziert geschrieben) und nutze Phyton erst seit 2 Monaten... Könntet ihr mir bitte anweisungen zum Kochbuch geben :K . Das wär mega nett.
@nono191
Grundsätzlich solltest Du einfach bei allem, das Du nicht verstehst, erstmal in der Dokumentation bzw. dem Tutorial nachschlagen. Auch wenn es auf den ersten Blick nicht so scheint, die fundiertesten Infos findest Du dort!
Zu meinem Beispiel: Zuerst einmal habe ich versucht, währenddem ich programmiere darauf zu achten, das zu trennen, was irgendwie nicht zusammengehört. Zum Beispiel waren die beiden Funktionen `get_category` und `add` ursprünglich zusammengefasst, bis ich dann bemerkte, dass der Teil, der jetzt in `get_category` steht, auch an anderer Stelle gebraucht wird (nämlich in `add` und `show`). Also habe ich den Code entsprechend getrennt, um Doppeltes zu vermeiden. Somit hatte ich irgendwann verschiedenste Funktionen, die jeweils für sich genommen soweit als möglich immer nur eine Sache erledigen. Ok, das könnte man sicher noch weiter verfeinern, aber zum jetzigen Zeitpunkt ist das sicher mal ok so. Ich hab' also jetzt eine "Hauptfunktion", die ich `run` genannt habe, könnte man auch `main` nennen. Von dort aus springe ich in die einzelnen "Unterfunktionen", je nachdem, was der Anwender auswählt.
Ich würde Dir also empfehlen, die Funktion `run` einfach mal Zeile für Zeile durchzugehen und anhand der Dokumentation und weiterführenden Infos zu verstehen, was da im Einzelnen geschieht. Also, was bedeutet ``def run():``, welchen Sinn hatwas man doch auch in eine Zeile schreiben könnte, aber warum dann in 4? und so weiter...
Und wenn Dir dann etwas einfach nicht in den Kopf will, dann frag' hier nach...
mutetella
Grundsätzlich solltest Du einfach bei allem, das Du nicht verstehst, erstmal in der Dokumentation bzw. dem Tutorial nachschlagen. Auch wenn es auf den ersten Blick nicht so scheint, die fundiertesten Infos findest Du dort!
Zu meinem Beispiel: Zuerst einmal habe ich versucht, währenddem ich programmiere darauf zu achten, das zu trennen, was irgendwie nicht zusammengehört. Zum Beispiel waren die beiden Funktionen `get_category` und `add` ursprünglich zusammengefasst, bis ich dann bemerkte, dass der Teil, der jetzt in `get_category` steht, auch an anderer Stelle gebraucht wird (nämlich in `add` und `show`). Also habe ich den Code entsprechend getrennt, um Doppeltes zu vermeiden. Somit hatte ich irgendwann verschiedenste Funktionen, die jeweils für sich genommen soweit als möglich immer nur eine Sache erledigen. Ok, das könnte man sicher noch weiter verfeinern, aber zum jetzigen Zeitpunkt ist das sicher mal ok so. Ich hab' also jetzt eine "Hauptfunktion", die ich `run` genannt habe, könnte man auch `main` nennen. Von dort aus springe ich in die einzelnen "Unterfunktionen", je nachdem, was der Anwender auswählt.
Ich würde Dir also empfehlen, die Funktion `run` einfach mal Zeile für Zeile durchzugehen und anhand der Dokumentation und weiterführenden Infos zu verstehen, was da im Einzelnen geschieht. Also, was bedeutet ``def run():``, welchen Sinn hat
Code: Alles auswählen
menu = [
('Neues Rezept', add),
('Zeige Rezepte', show)
]
Und wenn Dir dann etwas einfach nicht in den Kopf will, dann frag' hier nach...
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
@non191
Wenn Du mal zeigst, was Du bisher hast, kann man Dir hier auch gerne helfen. Einfach Deinen Code innerhalb code-tags posten...
mutetella
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
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
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 )