2016-04-18 30 views
2

ProblemPython: Ändern globale Variable und globale Listenelemente in einer Funktion

ich auf ein anderes Problem mit meinem Code gekommen. Ich mache ein Programm, das den Wert einer globalen Variablen nach Bedarf manipuliert. Ich schaute auf, wie man global verwendet, um Werte der globalen Variable zu ändern, wann immer innerhalb einer Funktion benötigt. jede Hilfe würde sehr geschätzt werden. Sie können den ganzen Code überarbeiten, wenn Sie möchten. Noch einmal Danke.

-Code

verifier = 0 
letters = ["A","B","C","D","E","F","G","H","I"] 

if verifier == 0: 
    letters = ["A","B","C","D","E","F","G","H","I"] 
if verifier == 1: 
    letters = newlist() 

def newlist(): 
    numbers = ["0","1","2","3","4","5","6","7","8"] 
    return animals 

def main(): 
    global verifier 
    # this should print ["A","B","C","D","E","F","G","H","I"] 
    print(letters) 
    # global variable should be changed to 1 
    verifier = 1 
    # this should print ["0","1","2","3","4","5","6","7","8"] now 
    print(letters) 
main() 

Antwort

1

Verwenden global Variable:

verifier = 0 

def newlist(): 
    if verifier == 0: 
     return ["A","B","C","D","E","F","G","H","I"] 
    elif verifier == 1: 
     return ["0","1","2","3","4","5","6","7","8"] 

print newlist() 

def main(): 
    global verifier 
    verifier = 1 
main() 

print newlist() 

Sie haben falsche Code-Struktur. Sie werden nichts erreichen, wenn Sie die Variable ändern.

Es ist Variablendeklaration:

verifier = 0 
letters = ["A","B","C","D","E","F","G","H","I"] 

Zuerst wenn und zweite, wenn Code wird nicht nur einmal überprüft werden, bevor der Haupt aufrufen. Auch - lesen Sie über elif.

if verifier == 0: 
    letters = ["A","B","C","D","E","F","G","H","I"] 
elif verifier == 1: 
    letters = newlist() 

"Buchstaben" in main fuinction wird immer ["A","B","C","D","E","F","G","H","I"]. Siehe mein Beispiel, wenn Sie Ihren Code reparieren möchten. if nur einmal durchgeführt. Sie können nicht erneut scannen, ohne die Datei neu starten zu müssen.

In den meisten Fällen global müssen nicht verwenden - Sie einfach die Variable an die Funktion Argumente übergeben:

def newlist(verifier): 
    if verifier == 0: 
     return ["A","B","C","D","E","F","G","H","I"] 
    elif verifier == 1: 
     return ["0","1","2","3","4","5","6","7","8"] 

def main(): 
    print newlist(0) 
    print newlist(1) 
main() 

Speziell für diese Aufgabe - nicht einmal die Funktionen verwenden müssen:

letters = { 
    0: ["A","B","C","D","E","F","G","H","I"], 
    1: ["0","1","2","3","4","5","6","7","8"] 
} 

print letters.get(0, None) 
+0

Gibt es eine Möglichkeit, die globale Variable 'letters' zu haben? – Kitty

+0

@Kitty: Antwort wurde aktualisiert. – JRazor