Liste durchsuchen

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
Dexter1997
User
Beiträge: 92
Registriert: Sonntag 2. Dezember 2012, 21:13

ich moechte einen code programmieren, der folgendes tut, ich kriege das selber nicht hin:

Wenn die Indexnummer existiert wird der darann gebundene Wert auf dem Bildschirm ausgegeben.

(Ich muss ein Inventar programmieren)

Ich danke für eure Lösungsvorschläge
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

was hast Du denn bisher?
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Wenn du noch nichts von Dictionaries gehört hast, dann wiederhol mal das offizielle Pythontutorial.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Dexter1997 hat geschrieben:ich moechte einen code programmieren, der folgendes tut, ich kriege das selber nicht hin:

Wenn die Indexnummer existiert wird der darann gebundene Wert auf dem Bildschirm ausgegeben.

Code: Alles auswählen

data = {}
index = 42
if index in data:
    print data[index]
Dexter1997
User
Beiträge: 92
Registriert: Sonntag 2. Dezember 2012, 21:13

Code: Alles auswählen

def Inventar_oeffnen(self):
    Wert = 0
    while self.Inventar[Wert] in self.Inventar:
        print self.Inventar[Wert]
        Wert = Wert + 1
    print self.Geld
(Das ist nicht der komplette Code)

Beim aufrufen der Funktion erscheint folgende Fehlermeldung:
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Gastkonto\Desktop\Python\Programme\Eigenes\RPG 2.py", line 25, in <module>
Spieler.Inventar_oeffnen()
File "C:\Dokumente und Einstellungen\Gastkonto\Desktop\Python\Programme\Eigenes\RPG 2.py", line 18, in Inventar_oeffnen
while self.Inventar[Wert] in self.Inventar:
IndexError: list index out of range

Aber genau dann soll er ja aufhören... wie löse ich das Problem?
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Das liegt daran, dass das Krump ist.
Man könnte dir jetzt sagen, dass du den Fehler abfangen könntest, aber die Art wie du da ins Inventar schaust scheint ein wenig seltsam.

1. Benennung von Variablen: Funktionen und Variablen werden klein geschrieben, es sei denn, dass es sich um einen Klassennamen handelt.
2. Die While-Schleife ist etwas krude. Normalerweise ist dann eine Schleife, die so lange läuft wie eine Bedingung erfüllt ist. Das scheint hier nicht ganz zu passen. Mit einer for-Schleife kann man über den Inhalt von Listen iterieren, das ist wahrscheinlich eher das was du suchst.
Dexter1997
User
Beiträge: 92
Registriert: Sonntag 2. Dezember 2012, 21:13

Das Problem ist fast gelöst. Jetzt muss ich nur noch wissen wie man die Indexnummer des letzten Wertes in einer Liste herausfindet, dann ist das Inventar fertig programmiert:)

Code: Alles auswählen

def Inventar_oeffnen(self):
    Wert = 0
    for i in range (2):
        if self.Inventar[Wert] in self.Inventar:
            print self.Inventar[Wert]
            Wert += 1
    else:
        print self.Geld
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

In [1]: [5, 4, 3, 4, 5].index(5, -1)
Out[1]: 4
Andere Pythonistas werden dir aber trotzdem dankbar sein, wenn du PEP8 befolgst. Das gibt es sogar in einer Uebersetzung, siehe meine Signatur.
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Was genau macht denn "i" in deinem Script, Dexter1997?
BlackJack

@Dexter1997: Wenn `self.Inventar` eine Liste sein sollte, wie der Betreff dieses Themas vermuten lässt, dann ist die ``if``-Bedingung doch völlig unsinnig, da trivialerweise *immer* wahr. Beschreibe doch mal unter welchen Umständen dieser Test Deiner Meinung nach jemals falsch sein kann‽

Das ``else`` ist wahrscheinlich falsch eingerückt, oder? Man kann zu ``for``-Schleifen zwar einen ``else``-Zweig schreiben, das macht hier aber absolut keinen Sinn.
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Ich suchte gerade nach einer kleinen Aufgabe - habe sie gefunden:

Code: Alles auswählen

inventar = ["Keule","Heiltrank","Münzen"]
inventar_groesse = 8
geld = 100

for i,item in enumerate(inventar):
    print(i+1,item)
    
print("Sie haben {} Taler.".format(geld))
Das i und enumerate(Liste) ist mein Beiwerk, braucht man nicht. Du kannst mit item über das Inventar iterieren. Ich habe noch keine Praxis mit Objektorientierung, daher mal ganz billig umgesetzt.
BlackJack

@pixewakb: Die `enumerate()`-Funktion nimmt als zweites Argument einen Startwert für die Zählung. Damit kann man sich das ``+ 1`` sparen.
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Wobei die Frage ist, ob der Threadstarter wirklich eine solche Datenstruktur verwendet, denn aus seinem Quelltext geht das nicht hervor.
Antworten