Seite 1 von 1

Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Dienstag 6. Mai 2014, 19:24
von Flacx
Hallo,
ich bin recht neu in Python und habe hier gleich zwei Fragen:
1. Folgender Code:

Code: Alles auswählen

while c != 0:
...
Dies wird ja nicht funktionieren, da er versucht auf eine nochnicht vorhandene Variable zuzugreifen.. (Zuindest bei mir gehts nicht!)
Gibt es einen weg, variablen quasi manuell zu initialisieren mit int oder string etc.? Sonst müsste ich ja jedesmal vor einer Solchen schleife ein c = 0 oder c = '' benutzen!

2. Gibt es eine Möglichkeit, dass ich mit pygame.image ein bild ausgehend vom Zentrum zeichnen kann? Sonst muss ich die Abstände zur Mitte manuell abziehen...!
Vielen Dank schonmal,
Flacx

Re: Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Dienstag 6. Mai 2014, 19:49
von /me
Flacx hat geschrieben:Gibt es einen weg, variablen quasi manuell zu initialisieren mit int oder string etc.? Sonst müsste ich ja jedesmal vor einer Solchen schleife ein c = 0 oder c = '' benutzen!
Genau das ist doch die Initialisierung. Du definierst durch diese Zuweisung den Wert und den Typ der an den entsprechenden Bezeichner gebunden wird.

Re: Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Dienstag 6. Mai 2014, 19:52
von Flacx
Ja stimmt nur gibt es nicht einen Weg das zu verkürzen?
Statt

Code: Alles auswählen

c = 10
while c != 0:
das hier:

Code: Alles auswählen

while int c = 10 != 0
#oder direkt
while c != 0:
c = raw_input(...)
Es kommt mir einfach komisch vor, da es in Programmiersprachen ja für alles und jeden Abkürzungen gibt und ich glaube irgendwie nicht, dass man das dann immer
manuell initialisieren muss ^^
Kann ja auch sein, dass ich mich irre ;)

Re: Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Dienstag 6. Mai 2014, 19:57
von EyDu
Hallo und willkommen im Forum!

Ob es kürzer geht oder nicht, das hängt immer von Fall zu Fall ab. Wenn c erst in der Schleife berechnet wird, dann bietet sich eine while-True-Schleife an:

Code: Alles auswählen

while True:
    ...
    c = ...
    ...
    if c == 0:
        break

Re: Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Dienstag 6. Mai 2014, 20:01
von Flacx
Stimmt eig. Hab ich garnicht dran gedacht, Danke ;)

Re: Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Dienstag 6. Mai 2014, 20:02
von Hyperion
Und wenn man weiß, wie oft eine Schleife zu durchlaufen ist, sollte man imho auch immer eine ``for``-Schleife nehmen.

Re: Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Dienstag 6. Mai 2014, 20:10
von Flacx
Ich weiß, nur in meinem Beispiel wollte ich 2 Listen gleichzeitig durchlaufen...
Dachte mir es ginge mit

Code: Alles auswählen

for i in sx:
aber dann spreche ich nur die eine Liste an.. Verschachteln ging hier nicht, da das Programm nicht pro sx alle sy durchlaufen soll...
Da ging es am einfachsten eine Zähl-While Schleife zu erstellen die dann für beide Listen zählt... sprich:

Code: Alles auswählen

while c < len(sx):
     ....sx[c]...sy[c]
     c += 1
P.S: Dazu sei zu bemerken, dass sx und sy gleich lang sind, weswegen da nur len(sx) steht und nicht auch len(sy)

Re: Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Dienstag 6. Mai 2014, 20:14
von EyDu
Dafür gibt es die zip-Funktion:

Code: Alles auswählen

for x, y in zip(sx, sy):
    ...
So als Faustregel: Wenn du mittels Schleife und Indizes auf Listen zugreifst, dann geht das in der Regel schöner.

Re: Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Dienstag 6. Mai 2014, 20:16
von Flacx
Okay, das wusste ich nicht. Jedoch werden auch hier 2 Variablen erstellt. Eine einzige ist leichter zu bedienen. Dennoch Danke, ich schreibs grad mal um!

Re: Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Dienstag 6. Mai 2014, 20:21
von Flacx
Okay man verfluche mich, wenn das ein offensichtlicher Fehler ist... Ich bekomme bei folgendem Code einen Index out of Range Error:

Code: Alles auswählen

for cx, cy in zip(sx, sy):
        DISPLAYSURF.blit(im, (sx[cx] - (113/2), sy[cy] - (168/2)))
P.S: Habs gefunden... Ich idiot, war ja sowas von offensichtlich!

Re: Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Dienstag 6. Mai 2014, 20:25
von EyDu
Du hast die zip-Funktion nicht richtig verstanden. In cx und cy sind bereits die zusammengehörigen Werde drin!

Code: Alles auswählen

DISPLAYSURF.blit(im, (cx - (113/2), cy - (168/2)))
Das hättest du durch Testen im interaktiven Interpreter aber auch leicht selber sehen können.

Nur Konstanten sollten Namen nur aus Großbuchstaben haben. DISPLAYSURF ist sicher keine Konstante.

Re: Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Dienstag 6. Mai 2014, 20:26
von Flacx
Jap habe ich eben auch gesehen. Sorry
Und wg. der Konstanten Sache.. ich bin mir nicht sicher, ich meine schon es ist eine:

Code: Alles auswählen

DISPLAYSURF = pygame.display.set_mode((1980, 1080), 0, 32)

Re: Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Dienstag 6. Mai 2014, 20:32
von EyDu
Der Aufruf von blit verändert DISPLAYSURF, darauf wird gezeichnet. Sonst wäre LISTE hier ja auch eine Konstante:

Code: Alles auswählen

LISTE = [23, 42]
LISTE.append(99)

Re: Init vor schleife und pygame.image im zentrum ansprechen

Verfasst: Donnerstag 8. Mai 2014, 19:03
von Flacx
Problem gelöst und danke für eure Geduld und netten Antworten :)