hilfe mit input

Code-Stücke können hier veröffentlicht werden.
Antworten
Lou Cyphr3
User
Beiträge: 59
Registriert: Donnerstag 6. Juli 2017, 00:04

Hallo,

vielleicht ist mein Problem total lächerlich, aber ich finde keine Lösung im Netz und meine Lösungsversuche brachten nur eine Errorausgabe.
Und zwar möchte ich, dass nach der Inputeingabe die jeweilige Variable ausgegeben wird.

Code: Alles auswählen

a = ('Wo')
b = ('Geh')
c = ('Wie ')

print('Hallo ')
      
z = ['A: Sinn', 'B: Geld', 'C: Coco']

for i in range(0,3):
    print(z[i])

input()
 
Weiß wer die Lösung?
Zuletzt geändert von Anonymous am Sonntag 16. Juli 2017, 08:16, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Cours, camarade, le vieux monde est derrière toi!
Lou Cyphr3
User
Beiträge: 59
Registriert: Donnerstag 6. Juli 2017, 00:04

Genau genommen lautet meine Frage dazu : Wie binde ich eine if-Abfrage in die input-Funktion ein=
Cours, camarade, le vieux monde est derrière toi!
BlackJack

@Lou Cyphr3: Die Lösung wäre die Werte in ein Wörterbuch (`dict`) zu stecken und die Eingabe für den Zugriff zu verwenden. Oder in eine Liste — dann muss man die Eingabe in einen Index umrechnen.

Die ``for``-Schleife würde man in Python so nicht schreiben denn `i` ist überflüssig wenn man *direkt* über die Elemente von `z` iterieren würde:

Code: Alles auswählen

for x in z:
    print(x)
Die Klammern um die drei Werte die Du an `a`, `b`, und `c` bindest sind auch überflüssig und sollten weg.
Lou Cyphr3
User
Beiträge: 59
Registriert: Donnerstag 6. Juli 2017, 00:04

okay, ich hab jetzt die Werte in eine Liste geschrieben, wobei ich das mit dem index gerade nicht hinbekomme.
hast du noch nen tipp dazu?

Danke
Cours, camarade, le vieux monde est derrière toi!
Lou Cyphr3
User
Beiträge: 59
Registriert: Donnerstag 6. Juli 2017, 00:04

Code: Alles auswählen

z = ['A: eins', 'B: zwei', 'C: drei']

print('Hallo')
      
for i in range(0,3):
    print(z[i])

abc = ['A', 'B!', 'C']
while True:
    try:
        abc = input('Wähle eine Vorgabe')
        if x in abc:
            print(abc[0])

            break
        else:
            print('nochmal')

    except NameError:
        print('Das hat wohl nicht geklappt!')
Ich bin jetzt soweit gekommen das es mir bis zur input-anweisung keinen Fehler ausspuckt,danach kommt aber egal was ich angebe, die except-print. wie schaffe ich es aber, dass der user nach der eingabe von a,b oder c die jeweilige möglichkeit von abc angezeigt bekommt?
Cours, camarade, le vieux monde est derrière toi!
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@Lou Cyphr3: es ist unsinnig die Exception NameError abzufangen, da ein NameError fast immer ein Programmierfehler ist und in den restlichen Fällen ein Designfehler. Man muß also immer das Programm reparieren, wenn diese Exception auftritt. In Deinem try-Block kann eigentlich keine Exception auftreten, die man sinnvoll abfangen kann, also weg mit dem try: und dem except-Block. Dann bekommst Du auch die Exception zu sehen, die Dir hilft den Programmierfehler zu finden.
Lou Cyphr3
User
Beiträge: 59
Registriert: Donnerstag 6. Juli 2017, 00:04

okay danke, das läuft jetzt ohne fehler, jedoch ist mir immer noch nicht klar, wie es mir nach der inputeingabe von a,b,c mir die jeweilige, aus der abc liste ausgibt. in dem obigen beispiel ist mir klar, dass ich nur eine Variante reingeschrieben habe, aber die läuft auch nicht. mir ist nicht klar wie ich die jeweiligen stellen einer liste abfragen kann.
Cours, camarade, le vieux monde est derrière toi!
BlackJack

@Lou Cyphr3: Du hast die Eingabe vom Benutzer, einen Buchstaben von 'a' bis 'c' — wir gehen erst einmal davon aus der Benutzer gibt nichts falsches ein — und eine Liste mit Elementen an den Indexen 0 bis 2. Du musst also den Buchstaben in einen passenden Index überführen. Dazu könnte man beispielsweise nutzen das Rechner letztendlich nur etwas mit Zahlen anfangen können und auch Buchstaben/Zeichen intern als Zahlen repräsentiert werden. Und das es eine Funktion (`ord()`) gibt, die einem die Zahl liefert die in Unicode für ein gegebenes Zeichen definiert ist. Wenn Du Dir diese Zahlen für 'a', 'b', und 'c' anschaust, solltest Du auf eine ganz simple Rechenvorschrift kommen wie man von diesen Zahlen auf 0, 1, und 2 kommt.

Wenn das steht, könnte man auch den Zahlenbereich prüfen ob der tatsächlich zwischen 0 und der Länge der Liste minus 1 liegt, falls der Benutzer ein Zeichen ausserhalb des Bereichs eingegeben hat. Den Fall das er kein oder mehr als ein Zeichen eingibt, sollte man auch entsprechend behandeln. Hier könnte dann eine Ausnahmebehandlung Sinn machen, denn `ord()` löst eine Ausnahme aus wenn man nicht genau ein Zeichen übergibt.

Ich habe übrigens Kleinbuchstaben angenommen. Damit der Benutzer Gross- oder Kleinbuchstaben eingeben kann, würde ich die Eingabe in Kleinbuchstaben umwandeln. Es sei denn Du möchtest das der Benutzer tatsächlich nur Grossbuchstaben verwenden darf.

Was man auch noch machen könnte, wäre die Buchstaben vor den Texten in `z` nicht in die Liste zu schreiben, sondern bei der Ausgabe erst zu generieren. Damit schliesst man eine Fehlerquelle aus und es wird auch einfacher irgendwo ein Element einzufügen oder zu entfernen, weil man dann nicht mehr bei allen Folgeelementen den Buchstaben per Hand anpassen muss.
BlackJack

Spasseshalber mal eine Lösung in Hy, einem Lisp-Dialekt der in Python implementiert ist.
[codebox=clojure file=Unbenannt.txt]#!/usr/bin/env hy

(defn index-to-letter [index] (chr (+ (ord "A") index)))

(defn letter-to-index [letter] (- (ord (.lower letter)) (ord "a")))

(defn print-choices [choices]
(for [ (enumerate choices)]
(print (.format "{0}: {1}" (index-to-letter i) choice))))

(defn valid-index? [sequence index]
(and (<= 0 index) (< index (len sequence))))

(defn ask-choice [choices]
(print-choices choices)
(setv max-letter (index-to-letter (dec (len choices))))
(for [letter (repeatedly (fn [] (.strip (input "Waehle eine Vorgabe: "))))]
(try
(setv index (letter-to-index letter))
(except [TypeError]
(print "Bitte genau einen Buchstaben eingeben!"))
(else
(when (valid-index? choices index)
(setv result (get choices index))
(break))
(print
(.format
"Bitte einen Buchstaben zwischen A und {0} eingeben!"
max-letter)))))
result)


(defmain [&rest args]
(print "Hallo")
(print (ask-choice ["eins" "zwei" "drei"])))[/code]
Antworten