Python Listenabfrage

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
GradeFX
User
Beiträge: 7
Registriert: Montag 26. Dezember 2016, 17:29

Ich moechte in einem Programm ein Skript erstellen, welches mir ermoeglicht anhand eines Buttons, welcher wie bekannt nur an und aus angiebt, bei jeder Umschaltung ein Listenelement weiter zu gehen.

Also:
Liste1 = [0, 1, 2 ]
Button aus = 0
Button an = 1
Button wieder aus = 2
Button wieder an = 0
Button wieder aus = 1
...... usw.

Ich benutzte es in diesem Prinzip:
Bild
Bild
Bild
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

den Sinn der Grafik sehe ich zwar gerade nicht, aber egal.

Die eigentliche Frage ist ja: was ist deine Frage? Die fehlt in deinem Post... Um endlos über eine Liste zu iterieren, bietet sich `itertools.cycle` an.

Gruß, noisefloor
GradeFX
User
Beiträge: 7
Registriert: Montag 26. Dezember 2016, 17:29

noisefloor hat geschrieben:Hallo,

den Sinn der Grafik sehe ich zwar gerade nicht, aber egal.

Die eigentliche Frage ist ja: was ist deine Frage? Die fehlt in deinem Post... Um endlos über eine Liste zu iterieren, bietet sich `itertools.cycle` an.

Gruß, noisefloor
Ich versuche es so gruendlich wie moeglich zu erklaeren!
Ich benutzte das Program Cinema 4D, welches, fuer Jeden der es nicht kennt, eine 3D Animations/Modelling Software ist. In dieser Software habe ich einen Boolean Button. Dieser steuert in meinem Falle die SIchtbarkeit im Editor von 3 Objekten. Man kann mit einem Shortcut diesen Button bedienen was es relativ handlicher macht anstatt immer in das dementsprechende Menue zu gehen und es dort umzustellen, jedoch ist das alles eigentlich nebensaechlich. Hauptsaechlich will ich einfach bloss ein Python Skript, welches es mir ermoeglicht aus diesem Boolean Button eine indirekte abfrage einer Liste zu erstellen. Der Button gibt immer nur 0 oder 1 aus und ich moechte, dass aber der Output von dem Skript bei jeder Aenderung die LIste vollendet wird bis sie dann wieder von vorne beginnt.
Sprich:
Liste1 = [0, 1, 2 ]
Button aus = 0
Button an = 1
Button wieder aus = 2
Button wieder an = 0
Button wieder aus = 1
...... usw.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

GradeFX hat geschrieben:Hauptsaechlich will ich einfach bloss ein Python Skript, welches es mir ermoeglicht aus diesem Boolean Button eine indirekte abfrage einer Liste zu erstellen. Der Button gibt immer nur 0 oder 1 aus und ich moechte, dass aber der Output von dem Skript bei jeder Aenderung die LIste vollendet wird bis sie dann wieder von vorne beginnt.
Sobald es Dir gelingt Deine Anforderung verständlich zu beschreiben, kannst Du sie möglicherweise auch selbst lösen.
GradeFX
User
Beiträge: 7
Registriert: Montag 26. Dezember 2016, 17:29

kbr hat geschrieben:
GradeFX hat geschrieben:Hauptsaechlich will ich einfach bloss ein Python Skript, welches es mir ermoeglicht aus diesem Boolean Button eine indirekte abfrage einer Liste zu erstellen. Der Button gibt immer nur 0 oder 1 aus und ich moechte, dass aber der Output von dem Skript bei jeder Aenderung die LIste vollendet wird bis sie dann wieder von vorne beginnt.
Sobald es Dir gelingt Deine Anforderung verständlich zu beschreiben, kannst Du sie möglicherweise auch selbst lösen.
Ich bin relativ neu hier und allgemein mit Python deswegen weiss ich nicht wirklich wie ich mein problem angehen soll
Ich versuche es so gruendlich wie moeglich zu erklaeren!
Ich benutzte das Program Cinema 4D, welches, fuer Jeden der es nicht kennt, eine 3D Animations/Modelling Software ist. In dieser Software habe ich einen Boolean Button. Dieser steuert in meinem Falle die SIchtbarkeit im Editor von 3 Objekten. Man kann mit einem Shortcut diesen Button bedienen was es relativ handlicher macht anstatt immer in das dementsprechende Menue zu gehen und es dort umzustellen, jedoch ist das alles eigentlich nebensaechlich. Hauptsaechlich will ich einfach bloss ein Python Skript, welches es mir ermoeglicht aus diesem Boolean Button eine indirekte abfrage einer Liste zu erstellen. Der Button gibt immer nur 0 oder 1 aus und ich moechte, dass aber der Output von dem Skript bei jeder Aenderung die LIste vollendet wird bis sie dann wieder von vorne beginnt.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

GradeFX hat geschrieben:Ich bin relativ neu hier und allgemein mit Python deswegen weiss ich nicht wirklich wie ich mein problem angehen soll
Das ist schon ok. Was ich meine ist, dass Du versuchen solltest Dein Anliegen sprachlich klar zu beschreiben. Was ich bislang vermute ist, dass Du eine Schaltfläche möchtest, die nach jedem anklicken einen Integer zurück gibt, der um eins größer ist als der Rückgabewert eines vorherigen anklickens. Wenn dieser Rückgabewert einen Maximalwert erreicht hat, soll die Ergebnisrückgabe wieder bei Null beginnen. Dazu eignet sich z.B. die schon von noisefloor genannte itertools.cycle() Funktion.
GradeFX
User
Beiträge: 7
Registriert: Montag 26. Dezember 2016, 17:29

kbr hat geschrieben:
GradeFX hat geschrieben:Ich bin relativ neu hier und allgemein mit Python deswegen weiss ich nicht wirklich wie ich mein problem angehen soll
Das ist schon ok. Was ich meine ist, dass Du versuchen solltest Dein Anliegen sprachlich klar zu beschreiben. Was ich bislang vermute ist, dass Du eine Schaltfläche möchtest, die nach jedem anklicken einen Integer zurück gibt, der um eins größer ist als der Rückgabewert eines vorherigen anklickens. Wenn dieser Rückgabewert einen Maximalwert erreicht hat, soll die Ergebnisrückgabe wieder bei Null beginnen. Dazu eignet sich z.B. die schon von noisefloor genannte itertools.cycle() Funktion.
Ja das habe ich mir schon angeschaut doch wie kann Ich
Wenn Wert "X" sich aendert soll fuer "Y" der naechste Punkt von einer Liste abgerufen werden.
Also ist mein einziges Problem noch wie ich so etwas "triggere"
BlackJack

@GradeFX: Suchst Du eventuell die `next()`-Funktion?

Code: Alles auswählen

In [38]: xs = itertools.cycle(xrange(3))

In [39]: next(xs)
Out[39]: 0

In [40]: next(xs)
Out[40]: 1

In [41]: next(xs)
Out[41]: 2

In [42]: next(xs)
Out[42]: 0

In [43]: next(xs)
Out[43]: 1

In [44]: next(xs)
Out[44]: 2

In [45]: next(xs)
Out[45]: 0
GradeFX
User
Beiträge: 7
Registriert: Montag 26. Dezember 2016, 17:29

BlackJack hat geschrieben:@GradeFX: Suchst Du eventuell die `next()`-Funktion?

Code: Alles auswählen

In [38]: xs = itertools.cycle(xrange(3))

In [39]: next(xs)
Out[39]: 0

In [40]: next(xs)
Out[40]: 1

In [41]: next(xs)
Out[41]: 2

In [42]: next(xs)
Out[42]: 0

In [43]: next(xs)
Out[43]: 1

In [44]: next(xs)
Out[44]: 2

In [45]: next(xs)
Out[45]: 0
Danke fuer diese Antwort, jedoch weiss ich immer noch nicht wie der Input bei jeder Aendreung von 0 auf 1 und andersherum diese Funktion ausloesen kann. Also dass zum Beispiel bei jeder Aenderung von dem Bool Input eine Einheit zum Beispiel zu Variable "X" hinzugefuegt werden kann
BlackJack

@GradeFX: Die Frage lässt sich nicht ohne weiteres beantworten, weil die davon abhängt wie die API von dem Programm aussieht, also wie man beispielsweise über das Ereignis das die Schaltfläche betätigt wurde, informiert wird.
GradeFX
User
Beiträge: 7
Registriert: Montag 26. Dezember 2016, 17:29

BlackJack hat geschrieben:@GradeFX: Die Frage lässt sich nicht ohne weiteres beantworten, weil die davon abhängt wie die API von dem Programm aussieht, also wie man beispielsweise über das Ereignis das die Schaltfläche betätigt wurde, informiert wird.
Bild
Das laeuft in CInema 4D ungefaehr so ab es gibt eine andere "Progarmmiersprache" namens XPresso welche mit dem Node Prinzip arbeitet und deshalb ziemlich leicht zu bedienen ist. Man kann ein Python Node erstellen, Inputs und Outputs erstellen welche man dann mit anderen Nodes verknuepft. In meinem Falle habe ich den Boolean Schalter von einem Objekt als Input in das Python Node und will bezwecken, dass bei jeder aenderung von dem Bool Input der Output sich zwischen 0, 1 und 2 bewegt. Diese Python Nodes muessen nicht erst aktiviert oder sonstig angeschaltet werden.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@GradeFX: Ich kenne XPresso nicht, aber vielleicht gibt es statt eines boolschen Schalters auch eine einfache Klickfläche, die einen nachgeschalteten Node über das Ereignis eines Klicks informiert. Unabhängig davon: wie erhält der Python-Node die Eingangsinformationen, d.h wie sieht die API der XPresso/Python-Nodes aus?
BlackJack

@GradeFX: Aus dem Bild wird nicht ersichtlich wann der Code ausgeführt wird. Nur wenn sich der Wahrheitswert ändert, oder kann das auch so passieren mal passieren? Im ersten Fall müsste man sich nichts merken. Im zweiten Fall den letzten Zustand und den Ausgabewert nur ändern falls sich der Zustand geändert hat. Das jetzt alles unter der Voraussetzung das man sich in so einem Skript überhaupt Zustände über Ausführungen hinweg merken kann. Kann man?
GradeFX
User
Beiträge: 7
Registriert: Montag 26. Dezember 2016, 17:29

BlackJack hat geschrieben:@GradeFX: Aus dem Bild wird nicht ersichtlich wann der Code ausgeführt wird. Nur wenn sich der Wahrheitswert ändert, oder kann das auch so passieren mal passieren? Im ersten Fall müsste man sich nichts merken. Im zweiten Fall den letzten Zustand und den Ausgabewert nur ändern falls sich der Zustand geändert hat. Das jetzt alles unter der Voraussetzung das man sich in so einem Skript überhaupt Zustände über Ausführungen hinweg merken kann. Kann man?
Ich habe mir das Script Log angeschaut und gesehen, dass der Code bei jeder interaktion im Porgramm, sprich bewegen eines Objektes oder sonstigem, ausgefuehrt wird.

Hier noch einmal die Python SDK von CInema 4D
https://developers.maxon.net/docs/Cinem ... index.html
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

GradeFX hat geschrieben:Hier noch einmal die Python SDK von CInema 4D
https://developers.maxon.net/docs/Cinem ... index.html
Also, ich habe jetzt nicht vor, die Doku zu durchsuchen, nur um Deine Frage zu beantworten. Wo finden sich dort die Infos zu den Python-Nodes? Wichtig ist auch zu wissen, ob die Python Objekte der Nodes zwischen den Aufrufen am leben bleiben, also ihren jeweiligen Zustand behalten.
Antworten