2016-10-10 5 views
0

Ich habe Probleme, Informationen zwischen zwei Funktionen zu übergeben. Innerhalb meiner "Test" -Funktion (siehe Code unten) überprüfe ich auf Tastendrücke und erwarte, dass ich aus der while-Schleife ausstiege, wenn eine 'g' oder 'h' Taste gedrückt wird. Die while-Schleife ist abhängig von test = 1. Sobald innerhalb der Funktion 'check_keys' die Taste 'g' oder 'h' gedrückt wird, wechselt der Test zu 2; Ich würde dann erwarten, die While-Schleife zu verlassen. So wie es aussieht, während ich Tasten drücke, kann ich sehen, dass sie registriert sind (aufgrund der print-Anweisungen), aber es beendet die while-Schleife nicht. Es scheint ein Problem zu sein, meine Haupt-While-Schleife zu bekommen, um zu sehen, dass 'Test' innerhalb meiner 'check_keys'-Funktion auf 2 geschaltet hat. Ich habe versucht, "Test" zu einer globalen Variable zu ändern, aber ich bin immer noch mit dem gleichen Problem fest. Offensichtlich wird keine Information zwischen beiden Funktionen ausgetauscht.Python/Psychopy: Weitergabe von Informationen zwischen Funktionen

window = visual.Window([600,600],fullscr=False,color=("black"), allowGUI=True, monitor='testMonitor', units='deg') 

global test 
def check_keys():  
    allKeys = event.getKeys(keyList = ('g','h','escape')) 
    for thisKey in allKeys: 
     if thisKey == 'g': 
      print "g" 
      test = 2 

     elif thisKey == 'h': 
      print "h" 
      test = 2 

def trial(): 
    global test 
    test = 1 

    while test ==1: 
     check_keys() 

for i in range(1): 
    trial() 

Kurz gesagt; warum stecke ich in der while-schleife fest, obwohl sich meine bedingte test-variable geändert hat?

Cheers, Steve

Antwort

1

Sie sind stecken, weil Sie nicht Test als globaler Innenseite Ihres check_keys() -Methode deklariert haben. Was Sie tun sollten, ist, dass check_keys den Wert von test zurückgibt, und dann verfolgen Sie es in Haupt:

def trial(): 
    test = 1 

    while test == 1: 
     test = check_keys() 
Verwandte Themen