Listenelement eine Variable zuordnen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
ArtooDetoo
User
Beiträge: 60
Registriert: Dienstag 4. Dezember 2018, 16:57

Eigentlich tut mein Code das schon, ich habe nur den Fehler in der print-Funktion übersehen, in der statt

Code: Alles auswählen

ld[i]
in diesem Fall nur i stehen sollte.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Zuordnung der LEDs zu einem Index löst man, indem man eine Liste macht, in der am entsprechenden Index das LED Objekt ist. So wie ich das wiederholt gezeigt habe. Eine Alternative wäre ein Wörterbuch, aber nur dann, wenn man deutlich weniger LEDs als Schalter hat. Hast du nicht. Und zu guter Letzt gibt’s natürlich auch noch die allseits beliebte if-Kaskade. Macht man so nicht, aber was soll’s.

Code: Alles auswählen

if ld[0]:
     led_fuer_index_null.on()
if ld[1]:
     diese_andere_led.on()
Manny
User
Beiträge: 13
Registriert: Mittwoch 5. Dezember 2018, 18:44

Das mit der Kaskade kann ich noch am einfachsten nachvollziehen.
Jetzt schalte ich zwar die LED's dazu an aber so schalte ich doch alle an?

Es sollen aber nur die angehen die den Wert 1 haben, alle Anderen haben den Wert 0 und sollen aus bleiben.

Besteht nicht die Möglichkeit das mir das Programm den Index Wert zurück gibt bei dem eine 1 steht.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Genau das tut das if doch. Einschalten wenn der Wert an de stelle wahr ist. NICHTS machen, wenn er falsch ist. Simpler geht es nicht.
Manny
User
Beiträge: 13
Registriert: Mittwoch 5. Dezember 2018, 18:44

hmm, ich habe das jetzt mal getestet:

Code: Alles auswählen

if ld[0]:
     led_fuer_index_null.on()
if ld[1]:
     diese_andere_led.on()
habe aber anstatt eine LED anzusteuern mir lediglich den wert anzeigen lassen mit print
Leider klappt das so nicht, ich bekomme nur die 1 oder 0 angezeigt nicht aber den Index, das müssten die Zahlen von 0-19 bzw. 1-20 sein
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Index ist doch 0. Oder 1. Der steht doch in der if-Klausel. Und wozu willst du den Index denn überhaupt? Du kannst doch gar nichts damit anfangen. Du hast doch keine Liste von LEDs.
Manny
User
Beiträge: 13
Registriert: Mittwoch 5. Dezember 2018, 18:44

Ich glaube wir reden hier aneinander vorbei?

Lassen wir doch mal die LED ganz außen vor.

Ich habe eine Liste die sieht so aus:

Code: Alles auswählen

Index der Liste:				1	2	3	4	5	6	7	8	9	10	11	12	13	14	15	16	17	18	19	20
Inhalt der Listen Position:			0	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0
Ergebnis:								4								12								
Ich will nun lediglich als Ergebnis die Zahlen 4 und 12 angezeigt bekommen.

Später kann ich dann immer noch eins Zuweisung machen und z.B. sagen: Nr.4 ist jetzt GPIO(17) und Nr.12 ist jetzt GPIO(27)

Ich hoffe ich konnte jetzt klar machen was ich überhaupt will?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

indizes = [index for index, value in enumerate(ld) if value]
Manny
User
Beiträge: 13
Registriert: Mittwoch 5. Dezember 2018, 18:44

Code: Alles auswählen

indizes = [index for index, value in enumerate(ld) if value]
Muß ich das jetzt irgendwie in eine Schleife einbauen und wo wird das Ergebnis angezeigt?

Bekomme jetzt diese Fehlermeldung:
Exception ignored in: Exception ignored in: Exception ignored in:
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist eine Schleife. Und da wird nichts angezeigt, denn da steht kein print. Kannst du doch danach machen. Deine Fehlermeldung kann ich nicht entziffern, bitte die gesamte Fehlermeldung anzeigen.
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@Manny: zeig doch mal den Code den Du ausführst, und die komplette Fehlermeldung. Mit Indizes arbeitet man in Python eigentlich so gut wie nie. Wenn doch, macht man bestimmt etwas falsch.
Manny
User
Beiträge: 13
Registriert: Mittwoch 5. Dezember 2018, 18:44

Es scheint jetzt zu klappen !
Ich habe den Code mit einem print erweitert, jetzt zeigt er mir auch die richtigen Werte an.
indizes = [index for index, value in enumerate(ld) if value]
print(indizes)
Vielen Dank euch @llen für die Hilfe, ich denke darauf kann ich jetzt weiter aufbauen. :P
Antworten