Hallo,
bin neu hier und versuche seit 2-3 Wochen Python zu lernen. Grundsätzlich ist fast alles klar bis auf folgendes:
Zuerst mal mein Test-Code:
_____________________________________
from gpiozero import LED
# sprechenden Zeiger auf Objekt
led_rot = LED(25)
led_gelb = LED(8)
led_gruen = LED(7)
led_used = ["led_rot", "led_gelb", "led_gruen"]
# alle benutzten ausmachen ausmachen
def leds_off(led):
''' in Liste werden Strings übergeben, welche die
LEDs als Namen enthalten, welche hier ausgeschaltet
werden sollen
'''
for i in range(0, len(led)):
print(led)
xyz = led + ".off()"
print(xyz)
# in xyz steht nun das Stringliteral
# led_rot.off() drinne
# wie mache ich es, dass der String xyz als Zeiger
# auf das Objekt led_rot.off() funktioniert??
xyz # ausmachen, so funktioniert es nicht
led_rot.off() # aber so funktioniert es
led_rot.on()
leds_off(led_used)
--------------------------------------------------------------------------
Ab 4. letzter Zeile?????
Kann mir da jemand bitte auf die Sprünge helfen?
Danke schon mal
Variablen soll eine Referenz auf eine Objektfunktion bekommen
Wenn du eine Zuordnung von Namen zu Objekten willst, dann ist ein Woerterbuch die Antwort.
Code: Alles auswählen
leds_by_name = {
"rot": led_rot,
...
}
leds_by_name[led_name].off()
Hallo __deets__
vieeelen Dank für die zackige Antwort. der Aufruf funktioniert
Habe mich jetzt mal in das Wörterbuch eingelesen.
Wollte nun mal den Inhalt meines Wörterbuches mit
list(leds_by_name.keys())
ausgeben. Nur es erfolgte KEINE Ausgabe.
Hast Du dafür auch eine Begründung?
vieeelen Dank für die zackige Antwort. der Aufruf funktioniert
Habe mich jetzt mal in das Wörterbuch eingelesen.
Wollte nun mal den Inhalt meines Wörterbuches mit
list(leds_by_name.keys())
ausgeben. Nur es erfolgte KEINE Ausgabe.
Hast Du dafür auch eine Begründung?
- __blackjack__
- User
- Beiträge: 13270
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@peha01: Der Kommentar „sprechennden Zeiger“ ist ein bisschen irreführend, denn das sind sprechende Namen. Und Zeiger gibt es in Python als nicht als Datentyp, das ist etwas was in den Bereich der Implementierung gehört. Es gibt Objekte.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Das Funktionsargument `led` — Einzahl! – zu nennen ist irreführend. Insbesondere wenn man *in* der Funktion dann eigentlich einen Namen für *eine* LED aus dem Argument bräuchte.
``for i in range(len(sequence)):`` nur um dann `i` als Index in die Sequenz zu verwenden ist in Python ein „anti pattern“. Man kann direkt über die Elemente von Sequenzen iterieren, ohne den unnötigen Umweg über einen Index. Falls man *zusätzlich* eine laufende ganze Zahl benötigt, gibt es die `enumerate()`-Funktion.
Warum hantierst Du da überhaupt mit Zeichenketten? Es wäre hier viel einfacher einfach eine Liste mit den LEDs anzulegen.
Ungetestet:
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Das Funktionsargument `led` — Einzahl! – zu nennen ist irreführend. Insbesondere wenn man *in* der Funktion dann eigentlich einen Namen für *eine* LED aus dem Argument bräuchte.
``for i in range(len(sequence)):`` nur um dann `i` als Index in die Sequenz zu verwenden ist in Python ein „anti pattern“. Man kann direkt über die Elemente von Sequenzen iterieren, ohne den unnötigen Umweg über einen Index. Falls man *zusätzlich* eine laufende ganze Zahl benötigt, gibt es die `enumerate()`-Funktion.
Warum hantierst Du da überhaupt mit Zeichenketten? Es wäre hier viel einfacher einfach eine Liste mit den LEDs anzulegen.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
from gpiozero import LED
def leds_off(leds):
for led in leds:
print(led)
led.off()
def main():
rote_led = LED(25)
gelbe_led = LED(8)
gruene_led = LED(7)
used_leds = [rote_led, gelbe_led, gruene_led]
rote_led.on()
leds_off(used_leds)
if __name__ == "__main__":
main()
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.