Listen in Bezug zueinander stellen

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.
Antworten
Lena
User
Beiträge: 22
Registriert: Mittwoch 24. Juni 2015, 09:37

Hallo!

Ich bin noch neu hier und noch habe ein paar Probleme beim Programmieren :/
Ich habe mehrere Listen
Bsp.:

Code: Alles auswählen

# die Liste, als Oberkategorie
Blumen=["Rose","Tulpe", "Sonnenblume","Nelke","Grünplfanzen"]

#dann die einzelnen Listen mit den Farbeigenschaften
Rose=["rot","gelb","blau","rosa","weiß"]
Tulpe=["rot", "gelb","grün", "weiß", "rosa"
Sonnenblume=["gelb", "braun"]
Grünplanzen=["grün"]
Nelke=["weiß", "lila", "gelb", "rot"]
Nun das Problem: Ich möchte gerne, dass die beiden Listen in einem Bezug zueinander stehen, dass ich also die Option habe:

Code: Alles auswählen

erg=str(input("Bitte geben Sie die Blume (aus der Liste 'Blume') ein, bei der Sie Ergänzungen vornehmen möchten"))
Der User soll dann also eine Blumenkategorien nennen und dann in der Liste bei bspw. 'Nelke' eine weitere Farbe, bspw. "rosa" hinzufügen können. Viellciht geht das dan dann ja auch ganz einfach mit append....aber ich weiß halt nicht, wie ic die Listen so miteinander verknüpfen kann. Wichtig ist dabei auch, dass die Listen nicht gleichlang sind.

Ich würde mich über eine/mehrere Antwort/en riesig freuen!
LG
Zuletzt geändert von Anonymous am Mittwoch 24. Juni 2015, 10:01, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Was Du suchst, ist ein Wörterbuch:

Code: Alles auswählen

blumen_farben = {
    "Rose": ["rot","gelb","blau","rosa","weiß"],
    "Tulpe": ["rot", "gelb","grün", "weiß", "rosa"],
    "Sonnenblume": ["gelb", "braun"],
    "Nelke": ["weiß", "lila", "gelb", "rot"],
    "Grünplfanzen": ["grün"],
}
dann kannst Du mit blumen_farben[blumenname] auf die Farbenlisten zugreifen.
BlackJack

@Lena: Geh das am besten auch mal auf Rechtschreibfehler durch. ;-)
Lena
User
Beiträge: 22
Registriert: Mittwoch 24. Juni 2015, 09:37

@ sirius Danke für deine schnelle Antwort!

Aber es funktioniert nicht richtig bei mir, ich weiß nicht wo mein Denkfehler ist:/

ich habe also das Dictionary erstellt, wie du gezeigt hast.. nun habe ich folgenden code

Code: Alles auswählen

erg=str(input("Ergänzungen sind möglich. tipp dafür 'ja'"))
if erg=="ja" or erg=="JA" or erg=="Ja":
    moegl=str(input("Angabe: Welche Blume soll erweitert werden:")) 
        if moegl in Blumen:
            print (Blumen_farben[moegl]) # also hier soll der erstmal anzeigen, zu welchen Inhalten etwas zugefügt wird.
# Weißt du auch wie man dann ein Element hinzufügen kann? Geht das auch mit .append()?

LG :)
Zuletzt geändert von cofi am Mittwoch 24. Juni 2015, 11:19, insgesamt 1-mal geändert.
Grund: Code Tags ergaenzt
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Was funktioniert denn nicht? Der gezeigte Code zeigt ja eben alle Farben für die jeweilige Blume - vorrausgesetzt es gibt die Liste `Blumen` noch.

Kleine Verbesserung, damit man `Blumen` nicht mehr braucht (und alle Moeglichkeiten "Ja" zu schreiben):

Code: Alles auswählen

erg = str(input("Ergänzungen sind möglich. tipp dafür 'ja'"))
if erg.lower() =="ja":
    moegl = str(input("Angabe: Welche Blume soll erweitert werden:"))
        if moegl in Blumen_farben:
            print(Blumen_farben[moegl])
Eine Farbe kannst du dann mit `Blumen_farben[moegl].append(neue_farbe)` hinzufuegen.
Lena
User
Beiträge: 22
Registriert: Mittwoch 24. Juni 2015, 09:37

Also es funktioniert, bis man Eingeben kann, bei welcher Blume man ergänzen möchte. Danach wird aber nichts mehr ausgegebn, also auch

print(Blumen_farben[moegl])

wird gar nicht mehr geprintet. Und man kann eben auch keine Farbe eingeben, die eben zugefügt werden soll...:/
Lena
User
Beiträge: 22
Registriert: Mittwoch 24. Juni 2015, 09:37

Ich hab den Fehler gefunden! Vielen Dank nochmal! :)
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Vielleicht verrätst du deine Lösung, falls noch jemand Interesse hat, der hier im Thread mitliest? :wink:
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Lena
User
Beiträge: 22
Registriert: Mittwoch 24. Juni 2015, 09:37

Achso^^...

Code: Alles auswählen

blumen_farben = {"Rose": ["rot","gelb","blau","rosa","weiß"],"Tulpe": ["rot", "gelb","grün", "weiß", "rosa"],"Sonnenblume": ["gelb", "braun"],"Nelke": ["weiß", "lila", "gelb", "rot"],"Grünplfanzen": ["grün"]}
erg=str(input("Ergänzungen sind möglich. tipp dafür 'ja'"))
if erg=="ja" or erg=="JA" or erg=="Ja":
    moegl=str(input("Angabe: Welche Blume soll erweitert werden:"))
    if moegl in blumen_farben:
        print (blumen_farben[moegl]) # also hier soll der erstmal anzeigen, zu welchen Inhalten etwas zugefügt wird.
        neue_farbe=str(input("Farbe!?"))
        blumen_farben[moegl].append(neue_farbe)
        print (blumen_farben)
#also das ist der vollständige Code gewesen, teilweise war es glaub ich nur wegen Groß- und Kleinschreibung ^^...

#Vielen Danke für die Hilfe!
Zuletzt geändert von Anonymous am Mittwoch 24. Juni 2015, 15:45, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@Lena: Die `str()`-Aufrufe mit dem Rückgabewert von `input()` sind überflüssig. Was denkst Du denn was die machen sollen?
Lena
User
Beiträge: 22
Registriert: Mittwoch 24. Juni 2015, 09:37

na dadurch wird doch gekennzeichnet, dass lediglich strings akzeptiert werden!?...also integer oder floats würden ja keinen Sinn machen...?
BlackJack

@Lena: Die `input()`-Funktion ”akzeptiert” von Haus aus nur Zeichenketten, das heisst der Benutzer tippt etwas ein und das wird dann von der `input()`-Funktion als Zeichenkette geliefert. Der `str()`-Aufruf hat auf Zeichenketten gar keinen Effekt, kann also hier einfach wegfallen.
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Nein. str(x) "kennzeichnet" nichts. Hierbei handelt es sich um eine Funktion, welches für ein Objekt eine Zeichenkette zurück liefert. Bsp.: str(1) -> "1"

Die input-Funktion liefert als Ergebnis (Rückgabewert) eine Zeichenkette. In Deinem Fall würde versucht aus einer Zeichenkette eine Zeichenkette zur erstellen. Ergo: Überflüssig.

Der Hinweis in einem anderen Thema von Dir, ein vernünftiges Tutorial/Buch durchzuarbeiten gilt auch hier (Stichworte: Funktionen, Parameter, Rückgabewerte)
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Antworten