ich fange gerade erst an mit Python und stehe jetzt vor einem Problem da ich seid drei Tagen nicht lösen kann ich hoffe mir kann hier jemand weiterhelfen.
ich schreibe in Pycharm einen code der in Streamlit ausgeführt werden soll.
Es handelt sich um eine App für Rezepte.
Ich habe einem die Auswahl Rezept Eigene Rezeptauswahl und Zufallsauswahl das Problem besteht in der Zufallsauswahl ich habe 7 Zufällige Rezepte unter jedem ist ein Button mit Rezept Anzeigen da wird , dann aus der .txt Datei das Rezept angezeigt und ein Button mit Rezept Wechseln beim betätigen darf sich nur das dazugehörige Rezept ändern die anderen 6 müssen gleich bleiben und das bekomme ich nicht hin. Kann mir da jemand helfen?
das ist der Bisherige Code:
import os
import random
import streamlit as st
# Logo in der Seitenleiste anzeigen
st.sidebar.image("Rezepte/Tasty and Quick.jpd.png", width=200)
st.title("Willkommen bei Tasty and Quick")
st.markdown("___")
# Seitenleiste für die Auswahl der Funktion
auswahl = st.sidebar.radio("Was möchtest du diese Woche kochen?", ("Eigene Rezeptauswahl", "Zufallsauswahl"))
# Pfad zum Ordner mit den Rezepten
REZEPTE_ORDNER = "Rezepte"
# Liste zum Speichern der ausgewählten Rezepte
ausgewaehlte_rezepte = []
# Funktion zum Laden der Rezepte aus dem Ordner
def lade_rezepte():
rezepte = []
for datei in os.listdir(REZEPTE_ORDNER):
if datei.endswith('.txt'):
rezeptname = get_rezeptname(datei)
bildpfad = os.path.join(REZEPTE_ORDNER, f'#{rezeptname}.jpg')
rezept_details = lade_rezept_details(rezeptname)
rezepte.append({'name': rezeptname, 'bildpfad': bildpfad, 'details': rezept_details})
return rezepte
# Funktion zum Laden der Rezeptdetails aus der .txt-Datei
def lade_rezept_details(rezeptname):
rezeptdatei = os.path.join(REZEPTE_ORDNER, f"#{rezeptname}.txt")
with open(rezeptdatei, "r", encoding="utf-8") as file:
rezept_details = file.read()
return rezept_details
# Funktion zum Anzeigen der ausgewählten Rezepte
def zeige_ausgewaehlte_rezepte(rezepte):
for rezept in rezepte:
st.write(rezept['name'])
st.image(rezept['bildpfad'], caption="", width=150)
if st.button(f"Rezept anzeigen: {rezept['name']}"):
st.write(rezept['details'])
# Funktion zum Zufälligen Auswählen von Rezepten
def zufaellige_auswahl(rezepte):
random.shuffle(rezepte)
return rezepte[:7] # Geändert auf zwei Rezepte
# Funktion zum Erstellen des Rezeptplans
def erstelle_rezeptplan(rezepte):
st.write('Rezeptplan für eine Woche')
for index, rezept in enumerate(rezepte, start=1):
st.write(f'Tag {index}')
st.write(rezept['name'])
st.image(rezept['bildpfad'], caption="", width=150)
st.write('---')
# Funktion für die Auswahl eigener Rezepte
def eigene_rezeptauswahl(rezepte):
st.write('Wähle 7 Rezepte aus')
for rezept in rezepte:
if st.checkbox(rezept['name']):
ausgewaehlte_rezepte.append(rezept)
if len(ausgewaehlte_rezepte) == 7:
break
# Funktion zum Extrahieren des Rezeptnamens aus dem Dateinamen
def get_rezeptname(file_name):
return file_name.lstrip("#").replace(".txt", "")
# Hauptprogramm
def main():
st.title('Rezeptplaner')
rezepte = lade_rezepte()
if auswahl == "Eigene Rezeptauswahl":
eigene_rezeptauswahl(rezepte)
if len(ausgewaehlte_rezepte) == 7:
erstelle_rezeptplan(ausgewaehlte_rezepte)
elif auswahl == "Zufallsauswahl":
rezeptplan = zufaellige_auswahl(rezepte)
if len(rezeptplan) > 0:
st.write('Rezepte für diese Woche:')
for rezept in rezeptplan:
st.write(rezept['name'])
st.image(rezept['bildpfad'], caption="", width=150)
if st.button(f"Rezept anzeigen: {rezept['name']}"):
st.write(rezept['details'])
if st.button(f"Rezept wechseln: {rezept['name']}"):
rezeptplan.remove(rezept)
if len(rezeptplan) > 0:
st.write('Neues Rezept:')
st.write(rezeptplan[0]['name'])
st.image(rezeptplan[0]['bildpfad'], caption="", width=150)
if st.button(f"Rezept anzeigen: {rezeptplan[0]['name']}"):
st.write(rezeptplan[0]['details'])
if st.button(f"Rezept wechseln: {rezeptplan[0]['name']}"):
rezeptplan = rezeptplan[1:]
erstelle_rezeptplan(rezeptplan)
if len(ausgewaehlte_rezepte) > 0:
st.write('Ausgewählte Rezepte')
zeige_ausgewaehlte_rezepte(ausgewaehlte_rezepte)
if __name__ == '__main__':
main()
Gruß Alice
