Anfängerfrage, strings

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
19mareut
User
Beiträge: 35
Registriert: Freitag 21. Februar 2020, 19:40

hallo @all die das lesen

ich wollte mal so ne cardbase für mtg (wers kennt) machen. wie dem auch sei, ich möchte, dass wenn ich z.b. ne karte, kethis, habe und als eingabe ket habe, dass er mir alles ausgibt was ket irgendwo im namen hat. also genau ket nich ke t. also ne eingabe testen in schon in nem ordener vorgegebne strings wo das vorkommt
wenn ihrs versteht. weiteres beispiel:
der ordner enthält eine, mein, klei, hoche, maie. ich gebe 'ein' ein und bekomme dann eine, mein ausgegeben.

es wäre echt nett wenn ihr mir helft danke
Benutzeravatar
sparrow
User
Beiträge: 4198
Registriert: Freitag 17. April 2009, 10:28

Mit dem "in" Operator kann man testen, ob ein Teilstring in einem String enthalten ist.

Code: Alles auswählen

>>> "al" in "Hallo"
True
Du musst also deine Datenstruktur durchlaufen und für die einzelnen Elemente prüfen ob das zutrifft.
19mareut
User
Beiträge: 35
Registriert: Freitag 21. Februar 2020, 19:40

oh danke nett
19mareut
User
Beiträge: 35
Registriert: Freitag 21. Februar 2020, 19:40

nochmal ne frage:
ich hab jz nen dokument das heißt karten.py
da steht
cards = kethis,kenrith,ulamorg
also die karten, die ich in der database haben möchte.
wie importiere und nutze ich das?
gibts nen konkretes beispiel?
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Was verbirgt sich denn hinter den drei Namen, die Du in das tuple cards steckst? Und wohin möchtest Du cards denn importieren? Wenn Du innerhalb karten.py die Zeile

Code: Alles auswählen

cards = kethis,kenrith,ulamorg
stehen hast und karten.py von wo aus immer auch importierst, dann hast Du dort das tuple cards. Versuch' das doch einfach in Deiner Pythonshell:

Code: Alles auswählen

>>> import karten
>>> karten.cards
Welche Ausgabe bekommst Du? Sollte eine Fehlermeldung erscheinen, dann recherchiere die Bedeutung und Du wirst sicher ein paar Schritte weiter kommen...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
19mareut
User
Beiträge: 35
Registriert: Freitag 21. Februar 2020, 19:40

oh ja omegalul ich hab den punkt vergessen.
wie kann ich eigentlich auf elemte der liste zugreifen?
also ich hab ja cards = 'kethis','ulamorg','kenrith' wie kann ich dann auch 'kethis zugreifen?'
Benutzeravatar
sparrow
User
Beiträge: 4198
Registriert: Freitag 17. April 2009, 10:28

Die Grundlagen der Sprache - und der Index-Zugriff auf Listen gehört da sicherlich zu - solltest du dir erarbeiten, indem du das Tutorial in der Dokumentation durch gehst.
19mareut
User
Beiträge: 35
Registriert: Freitag 21. Februar 2020, 19:40

ich gebs auf komme eh net drumrum ^^
19mareut
User
Beiträge: 35
Registriert: Freitag 21. Februar 2020, 19:40

cards = ['kethis, the hidden hand','kenrith, the returned king','ulamorg, the careless hunger','jeskai elder','uro, titan of natures wrath','umori the collector','inspired ultimatum','savai triome','lurrus of the dream-den','crystalline giant']

enough = False

while not enough:
k = input('Kartenname: ')

n = 0

while n < len(cards):
if 'k' in cards[n]:
print(cards[n])
else:
pass

n = n + 1

kann mir wer sagen, wo der Fehler liegt?
Benutzeravatar
__blackjack__
User
Beiträge: 13122
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@19mareut: Welcher Fehler? Was hast Du erwartet was der Code macht, und was macht er stattdessen?

Allgemeine Anmerkungen: `enough` ist überflüssig weil das nie irgendwo geändert wird, da kann man also gleich ``while True:`` schreiben.

`k` ist ein schlechter Variablenname weil der nicht beschreibt was der Wert für eine Bedeutung hat.

Die innere ``while``-Schleife ist das falsche Werkzeug. Man verwendet eine ``for``-Schleife wenn man über alle Elemente einer Liste iterieren möchte.

Das ``else: pass`` ist unsinnig weil das nix tut. Warum steht das da?

Die ``cards = …``-Zeile ist ein *bisschen* zu lang.

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    cards = [
        "kethis, the hidden hand",
        "kenrith, the returned king",
        "ulamorg, the careless hunger",
        "jeskai elder",
        "uro, titan of natures wrath",
        "umori the collector",
        "inspired ultimatum",
        "savai triome",
        "lurrus of the dream-den",
        "crystalline giant",
    ]
    while True:
        search_term = input("Kartenname: ")
        for card in cards:
            if "k" in card:
                print(card)


if __name__ == "__main__":
    main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
19mareut
User
Beiträge: 35
Registriert: Freitag 21. Februar 2020, 19:40

ok danke. naja der hat mir immer nur die ersten 3 strings der liste ausgegeben
und das else: pass war dafür da weil der davor gar nix ausgegeben hatte
19mareut
User
Beiträge: 35
Registriert: Freitag 21. Februar 2020, 19:40

und ich wollte ja eig ket eingeben und dann nur das rausbekommen wo das ket drinne ist
oder ich gebe hidde ein und bekomme auch nur kethis raus
also ich gebe etwas ein dasprogramm sucht alle strings durch ob das in dem string vorkommst und wenn ja spuckt es mir den string aus
Benutzeravatar
__blackjack__
User
Beiträge: 13122
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@19mareut: Tja, Dein Code stimmt halt mit dem was Du beschreibst nicht überein. Und das mit dem ``else: pass`` kann nicht stimmen, denn das bewirkt rein gar nichts. Deswegen ist es ja überflüssig und sollte da nicht stehen.

Das hat auch nicht die ersten drei Zeichenketten ausgegeben sondern die ersten beiden und die vierte, denn nur in denen ist ein k enthalten.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
19mareut
User
Beiträge: 35
Registriert: Freitag 21. Februar 2020, 19:40

das k war nur die eingabevariable eigentlich
also das k ist falsch, aber wie kann ich dann da die eingabe hinmachen?
Sirius3
User
Beiträge: 17760
Registriert: Sonntag 21. Oktober 2012, 17:20

Es macht halt einen Unterschied, ob man einen literalen String "k" schreibt oder die Variable k meint.
19mareut
User
Beiträge: 35
Registriert: Freitag 21. Februar 2020, 19:40

oh danke ja jz gehts ^^ echt nett von euch dass ihr so schnell geantwortet habt, props gehen raus xDD
Antworten