Hilfe bei Fehlern in der Programmierung mit Python

Code-Stücke können hier veröffentlicht werden.
Antworten
Jack Rookie
User
Beiträge: 3
Registriert: Freitag 28. Februar 2014, 10:36

Freitag 28. Februar 2014, 11:02

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()
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Freitag 28. Februar 2014, 11:11

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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3))
assert encoding_kapiert
Jack Rookie
User
Beiträge: 3
Registriert: Freitag 28. Februar 2014, 10:36

Freitag 28. Februar 2014, 11:35

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
mutetella
User
Beiträge: 1690
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Freitag 28. Februar 2014, 12:18

@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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Freitag 28. Februar 2014, 12:49

Mal ungetestet und ohne komplette Daten: Gist
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3))
assert encoding_kapiert
Sirius3
User
Beiträge: 8805
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 28. Februar 2014, 14:08

@Hyperion: ziemlich ungetestet :P. In SEQUENCES fehlen noch etliche Kommas,
Jack Rookie
User
Beiträge: 3
Registriert: Freitag 28. Februar 2014, 10:36

Mittwoch 5. März 2014, 21:06

@ 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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 5. März 2014, 21:27

Jedes Python-Tutorial behandelt Funktionen. Sowie Grunddatentypen wie Listen und Tupel.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 5. März 2014, 21:45

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 ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3))
assert encoding_kapiert
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 5. März 2014, 21:48

Das musst du positiv sehen: die meisten Kommas waren da :D
Das Leben ist wie ein Tennisball.
Antworten