Variable in Endlosschleife nur einmal aufrufen

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
Online
User
Beiträge: 2
Registriert: Mittwoch 2. November 2016, 10:26

Hallo,
hier mal eine super simple Frage für euch. Kann man in Python eine Variable deklarieren, die nicht bei jedem Schleifenaufruf verändert wird ?

Also die Variable "variableNichtVeraendert" soll hochzählen und nicht immer bei Null anfangen. Wohingegen "eineAndereVariable" immer bei Sechs festhängen soll. Ich hoffe die Frage ist nicht zu simple und jemand kann mir helfen. (Google hat bislang nicht geholfen, aber wenn jemand eine Webseite mit Erklärung hat, dann immer hier damit). Bei Codeteile müssen in zwei unterschiedlichen "Dokumenten" stehen.

Code: Alles auswählen

import numpy as np
import cv2
import time
from new_2 import Test

class Main(object):
	variableNichtVeraendert = 0
	
	while(1):
		eineAndereVariable = 5
		test = Test()
		test.neuesDokument(eineAndereVariable, variableNichtVeraendert)
		
		if cv2.waitKey(1) & 0xFF == ord('q') or variableNichtVeraendert == 5:
			break
	cv2.destroyAllWindows()

Code: Alles auswählen

import numpy as np
import cv2
import time


class Test(object):
	
	def neuesDokument(self, eineAndereVariable, variableNichtVeraendert):
			variableNichtVeraendert += 1
			eineAndereVariable += 1
			time.sleep(2)
			print variableNichtVeraendert, eineAndereVariable
Zuletzt geändert von Anonymous am Mittwoch 2. November 2016, 11:13, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17752
Registriert: Sonntag 21. Oktober 2012, 17:20

@Online: ausführbarer Code auf class-Definitions-Level ist definitiv falsch. while ist keine Funktion, sollte also nicht so geschrieben werden. In diesem Fall wäre wohl eine for-Schleife besser. Eingerückt wird immer mit 4 Leerzeichen pro Ebene.

Wenn Du eine Variable verändern willst, dann verändere sie halt und wenn sie gleich bleiben soll, dann ändere sie halt nicht. Bevor Du mit Klassen anfängst, solltest Du zuerst Funktionen beherrschen. Dazu gehört, dass Werte eine Funktion als Parameter betreten und als Rückgabewert verlassen, also, alles was sich verändern soll, mußt Du wieder zurückgeben.

Code: Alles auswählen

def create_new_document(some_variable, some_other_variable):
    some_other_variable+= 1
    some_variable+= 1
    time.sleep(2)
    print some_other_variable, some_variable
    return some_other_variable

def main():
    some_variable = 5
    some_other_variable= 0
    while True:
        some_other_variable = create_new_document(some_variable , some_other_variable)
        if cv2.waitKey(1) & 0xFF == ord('q') or some_other_variable == 5:
            break
Online
User
Beiträge: 2
Registriert: Mittwoch 2. November 2016, 10:26

Hallo und danke schonmal dafür. Mit deinen Kritikpunkten im ersten Absatz hast du sicherlich recht, nun will ich aber auch anfangen zu programmieren, selbst wenn Fehler dabei sind. Das ist natürlich auch nur ein Beispielcode, damit das hier im Forum nicht zu lang wird. Vielleicht ist das nicht richtig rüber gekommen.

Ich würde gerne über mehrere Klassen einen Variablewert beibehalten und anschließend wieder iterieren. Das sollte mein Code aussagen. Mit "return" habe ich es schon probiert, es hat aber leider nicht geklappt. Also gibt es zu diesem schicken Satz:
Sirius3 hat geschrieben: Wenn Du eine Variable verändern willst, dann verändere sie halt und wenn sie gleich bleiben soll, dann ändere sie halt nicht. [/code]
auch eine Pythonlösung auf mein Problem ?
Sirius3
User
Beiträge: 17752
Registriert: Sonntag 21. Oktober 2012, 17:20

@Online: ein Beispielcode sollte das eigentliche Problem zeigen. So wie es jetzt dasteht macht das einfach keinen Sinn. Eine Variable über mehrere Klassen zu verändern, scheint mir ein falscher Designansatz. Beschreib doch einfach mal, was Du machen willst.
Antworten