Seite 1 von 1

Hilfe bei Fehlern in der Programmierung mit Python

Verfasst: Freitag 28. Februar 2014, 11:02
von Jack Rookie
Hallo,

ich, als Python-Neuling, musste mich jetzt einmal bei Euch anmelden, da ich von allein nicht auf den Fehler komme und auch die SuFu mich nicht weiter bringt.

Ich habe mehrer kleinere Programme zum ansteuern einer selbst gelöteten 6ér LED-Leiste geschrieben und möchte diese jetzt mit einem Pseudo-Random-Befehl wechseln lassen. Die einzelnen Programme für die LED´s laufen einwandfrei und mein Versuch mit random.randint funktioniert auch.
Nur die Kombination mit beiden will mein Pie nicht.
Der Fehler soll in Zeile 97 liegen. Ein Syntaxfehler bei

Code: Alles auswählen

if i==2:					#Programm Lauflicht 2, bei Auswahl von 2.
Allerdings übersteigt die Fehlersuche da meine Kompetenzen und ich wäre Euch sehr dankbar, wenn Ihr mir da weiterhelfen könntet.
Eventuell gibt es ja auch eine andere Möglichkeit die LED-Programme "zufällig" Auszuwählen.
Hier mal die Pseydo-Random

Code: Alles auswählen

import random
import time

random.seed()
i = 1


try:
    if i:
        i = random.randint(1,3)
        if i == 1:
            print "Hello"
        if i == 2:
            print "my Name is"
        if i == 3:
            print "Dr. Greenthumb"
        time.sleep(2)
        
except KeyboardInterrupt:
    print "Fin"
Und hier der Versuch alles zu implementieren.

VG JR

Code: Alles auswählen

import RPi. GPIO as GPIO
import time
import random


a=0.05
								


GPIO.setwarnings(False)
	
GPIO.setmode(GPIO.BOARD)
	
GPIO.setup(07, GPIO.OUT)	

GPIO.setup(11, GPIO.OUT)	

GPIO.setup(12, GPIO.OUT)	

GPIO.setup(13, GPIO.OUT)	

GPIO.setup(15, GPIO.OUT)	

GPIO.setup(16, GPIO.OUT)	



random.seed()							#Randombefehl

i=1



try:
	if i:
		i=random.randint(1,3)				#Auswahl zwischen 1,2,3
		
		if i==1:					#Programm Lauflicht 1, bei Auswahl der 1.
	
			GPIO.output(07,GPIO.HIGH)

			time.sleep(a)

			GPIO.output(11,GPIO.HIGH)

			time.sleep(a)

			GPIO.output(07,GPIO.LOW)
	
			time.sleep(a)

			GPIO.output(13,GPIO.HIGH)

			time.sleep(a)
	
			GPIO.output(11,GPIO.LOW)

			time.sleep(a)

			GPIO.output(15,GPIO.HIGH)
	
			time.sleep(a)

			GPIO.output(13,GPIO.LOW)

			time.sleep(a)
	
			GPIO.output(12,GPIO.HIGH)

			time.sleep(a)

			GPIO.output(15,GPIO.LOW)
	
			time.sleep(a)

			GPIO.output(16,GPIO.HIGH)
	
			time.sleep(a)

			GPIO.output(12,GPIO.LOW)

			time.sleep(a)

			GPIO.output(07,GPIO.HIGH)

			time.sleep(a)

			GPIO.output(16,GPIO.LOW)

			time.sleep(a)

			GPIO.output(07,GPIO.LOW	
			


		
		if i==2:					#Programm Lauflicht 2, bei Auswahl von 2.

			GPIO.output(07,GPIO.HIGH)

			time.sleep(a)

			GPIO.output(11,GPIO.HIGH)

			time.sleep(a)
	
			GPIO.output(07,GPIO.LOW)
	
			time.sleep(a)
	
			GPIO.output(13,GPIO.HIGH)
		
			time.sleep(a)
	
			GPIO.output(11,GPIO.LOW)

			time.sleep(a)

			GPIO.output(15,GPIO.HIGH)
	
			time.sleep(a)

			GPIO.output(13,GPIO.LOW)

			time.sleep(a)

			GPIO.output(12,GPIO.HIGH)
		
			time.sleep(a)

			GPIO.output(15,GPIO.LOW)
	
			time.sleep(a)

			GPIO.output(16,GPIO.HIGH)
	
			time.sleep(a)

			GPIO.output(12,GPIO.HIGH)

			time.sleep(a)
	
			GPIO.output(16,GPIO.LOW)

			time.sleep(a)
	
			GPIO.output(15,GPIO.HIGH)

			time.sleep(a)

			GPIO.output(12,GPIO.LOW)
	
			time.sleep(a)

			GPIO.output(13,GPIO.HIGH)

			time.sleep(a)
	
			GPIO.output(15,GPIO.LOW)

			time.sleep(a)

			GPIO.output(11,GPIO.HIGH)

			time.sleep(a)

			GPIO.output(13,GPIO.LOW)

			time.sleep(a)

			GPIO.output(07,GPIO.HIGH)



		if i==3:					#Programm Lauflicht 3, bei Auswahl der 3.
	
			GPIO.output(07,GPIO.HIGH)

			GPIO.output(15,GPIO.HIGH)

			time.sleep(a)

			GPIO.output(11,GPIO.HIGH)

			GPIO.output(12,GPIO.HIGH)

			time.sleep(a)

			GPIO.output(07,GPIO.LOW)

			GPIO.output(15,GPIO.LOW)

			time.sleep(a)

			GPIO.output(13,GPIO.HIGH)
		
			GPIO.output(16,GPIO.HIGH)

			time.sleep(a)

			GPIO.output(07,GPIO.HIGH)
	
			GPIO.output(15,GPIO.HIGH)

			time.sleep(a)

			GPIO.output(11,GPIO.LOW)

			GPIO.output(12,GPIO.LOW)

			time.sleep(a)
	
			GPIO.output(13,GPIO.LOW)

			time.sleep(a)

			GPIO.output(16,GPIO.LOW)


	

except KeyboardInterrupt:
	print: "Fin"
        GPIO.cleanup()

Re: Hilfe bei Fehlern in der Programmierung mit Python

Verfasst: Freitag 28. Februar 2014, 11:11
von Hyperion
Der Fehler liegt nicht in Zeile 97 (im geposteten Code!), das kannst Du leicht überblicken. Daher muss es *davor* zu einem Fehler gekommen sein, oftmals fehlt dann eine schließende Klammer, wie in diesem Fall. In Zeile 92 fehlt die schließende Klammer von ``output``.

Anmerkungen zum Code spare ich mir (fast), bis auf diese: Bitte schreib doch nicht planlos so viele Leerzeilen in Deinen Code! Das kann man schwer lesen. Zudem verwende nur *vier Spaces* für die Einrückung anstelle von Tabs; das ist im Coding Standard (PEP8) so vorgesehen.

Bei langen Codes poste die doch auch eher in einem Pastebin, wie dem im Forum selber oder gist.github.com.

Alles in allem kann man Dein Programm auf wenige Zeilen einstampfen, wenn man Collections, Funktionen usw. verwendet.

Re: Hilfe bei Fehlern in der Programmierung mit Python

Verfasst: Freitag 28. Februar 2014, 11:35
von Jack Rookie
Super, vielen lieben Dank.

Als Autodidakt, der sich das ganze in drei Wochen, mehr oder weniger, beigebracht hat bin ich mit meinem Ergebnis schon zufrieden.
Ich bin natürlich auch für jede weitere Hilfe dankbar.
Leerzeilen habe ich schon raus genommen.
Was Funktion und co. angeht habe ich "noch" keine Ahnung, aber lernwillig.

JR

Re: Hilfe bei Fehlern in der Programmierung mit Python

Verfasst: Freitag 28. Februar 2014, 12:18
von mutetella
@JackRookie:
Du könntest die Lauflichtsequenzen z. B. so steuern:

Code: Alles auswählen

delay = 0.05
flashes = (
    (7, GPIO.HIGH), (11, GPIO.HIGH), (7, GPIO.LOW), (13, GPIO.HIGH),
    (11, GPIO.LOW), (15, GPIO.HIGH), (13, GPIO.LOW), (12, GPIO.HIGH),
    (15, GPIO.LOW), (16, GPIO.HIGH), (12, GPIO.LOW), (7, GPIO.HIGH),
    (7, GPIO.HIGH), (16, GPIO.LOW), (7, GPIO.LOW)
)
for channel, state in flashes:
    GPIO.output(channel, state)
    time.sleep(delay)
Ich würde mir auch angewöhnen, aussagekräftige Namen zu verwenden. Spätestens wenn Dein Programm etwas umfangreicher wird, wirst Du schnell nicht mehr wissen, was sich hinter `a` und `i` verbirgt, von anderen, die Deinen Code lesen möchten, ganz zu schweigen.

mutetella

Re: Hilfe bei Fehlern in der Programmierung mit Python

Verfasst: Freitag 28. Februar 2014, 12:49
von Hyperion
Mal ungetestet und ohne komplette Daten: Gist

Re: Hilfe bei Fehlern in der Programmierung mit Python

Verfasst: Freitag 28. Februar 2014, 14:08
von Sirius3
@Hyperion: ziemlich ungetestet :P. In SEQUENCES fehlen noch etliche Kommas,

Re: Hilfe bei Fehlern in der Programmierung mit Python

Verfasst: Mittwoch 5. März 2014, 21:06
von Jack Rookie
@ mutetella & Hyperion

vielen Dank für die Mühe.
Aber ich würde mich eher freuen, wenn ich verstehen würde, was Ihr da geschrieben habt.
Gibt es ein guten deutschsprachiges Tutorium zum Thema Funktionen und Co.?


JR

Re: Hilfe bei Fehlern in der Programmierung mit Python

Verfasst: Mittwoch 5. März 2014, 21:27
von Leonidas
Jedes Python-Tutorial behandelt Funktionen. Sowie Grunddatentypen wie Listen und Tupel.

Re: Hilfe bei Fehlern in der Programmierung mit Python

Verfasst: Mittwoch 5. März 2014, 21:45
von Hyperion
Sirius3 hat geschrieben:@Hyperion: ziemlich ungetestet :P. In SEQUENCES fehlen noch etliche Kommas,
Ooopsi... ja, die einelementigen Tupel... *seufz* Kommt davon, wenn man das schnell nebenbei zusammen schustert ;-)

Re: Hilfe bei Fehlern in der Programmierung mit Python

Verfasst: Mittwoch 5. März 2014, 21:48
von EyDu
Das musst du positiv sehen: die meisten Kommas waren da :D