2017-02-01 4 views
-2

Ich habe dieses Problem für eine Weile, wo einige meiner Werte einfach nicht speichern möchten. Es ist wahrscheinlich wegen einer Regel, die ich irgendwo breche, aber nach der Suche im Internet nach ziemlich einige Zeit und ich kann das Problem nicht finden.Werte werden nicht gespeichert

Code:

#TO SET# 

def min_count_set(): 
    stancount = int(input("How many standard miners do you wish to start with? ")) 
    if (stancount > 10000 or stancount < 0): 
    print("\n Please enter a valid number to start with. \n \n") 
    min_count_set() 
    else: 
    advcount= int(input("How many advanced miners do you wish to start with? ")) 
    if (advcount > 10000 or advcount < 0): 
    print("\n Please enter a valid number to start with. \n \n") 
    min_count_set() 
    else: 
    ultrcount = int(input("How many ultra miners do you wish to start with? ")) 
    if (ultrcount > 10000 or ultrcount < 0): 
    print("\n Please enter a valid number to start with. \n \n") 
    min_count_set() 
    else: 
    print("\n Returning you to the setup menu \n \n") 
    set_mining_values() 

#TO PRINT# 
def view_mining_values(): 
    print("\n Printing all of the variables now.") 
    print("\n Number of standard miners starting with: ") 
    print(stancount) 
    print("\n Number of advanced miners starting with: ") 
    print(advcount) 
    print("\n Number of ultra miners starting with: ") 
    print(ultrcount) 

Der Fehler, den ich erhalten ist:

NameError: name 'stancount' is not defined 

Ich habe versucht, die zuvor die Variable stancount eine Nummer zu geben und diese dann über die Eingabe laufen, aber dann wäre es nur das Relais Nummer I gab es vor der Eingabe.

+2

Sie versuchen, Zugriff auf stancount-Variable außerhalb des Funktionsumfangs –

+0

Viele Sachen schlecht hier, zuerst Sie nichts innerhalb der Funktion zurückgeben, noch erfassen sie aus dem rekursiven Aufruf, 'advcount' und' ultrcount' sind nicht geteilt zwischen t Er ruft auf, jeder Aufruf ist ein völlig separater Bereich – Netwave

+0

Diese Variablen sind in einer anderen Funktion definiert, zeigen Sie uns auch die Definition von set_mining_values ​​ – Saksow

Antwort

1

Sie müssen die Variable außerhalb der Funktionen deklarieren und sie in den Funktionen ändern, da Variablen lokal sind, wo sie definiert sind, weil Sie stancount innerhalb einer Funktion definieren, die dann beim Verlassen der Funktion im Wesentlichen "gelöscht" wird : Ich empfehle etwas Ähnliches;

def min_count_set(): 
    stancount = int(input("How many standard miners do you wish to start with? ")) 
    #do stuff 
    set_mining_values() 
    return stancount 


def view_mining_values(stancount): 
    print("\n Printing all of the variables now.") 
    print("\n Number of standard miners starting with: ") 
    print(stancount) 
    #do more stuff 

stancount=min_count_set() 

dies stancount auf den Wert, den Sie in der Funktion gesetzt und auch können Sie es danach drucken

0

Die stancount Variable liegt außerhalb des Bereichs, wenn Sie versuchen, sie zu drucken.

Sie es in die print_mining_values() Funktion als Argument übergeben könnte und es auf diese Weise drucken,

So würde print_mining_values() werden:

def view_mining_values(sCount, aCount, uCount): 
    print("\n Printing all of the variables now.") 
    print("\n Number of standard miners starting with: ") 
    print(sCount) 
    print("\n Number of advanced miners starting with: ") 
    print(aCount) 
    print("\n Number of ultra miners starting with: ") 
    print(uCount) 

und Ihre min_count_set() Funktion würde:

def min_count_set(): 
    stancount = int(input("How many standard miners do you wish to start with? ")) 
    if (stancount > 10000 or stancount < 0): 
     print("\n Please enter a valid number to start with. \n \n") 
     min_count_set() 
    else: 
     advcount= int(input("How many advanced miners do you wish to start with? ")) 
    if (advcount > 10000 or advcount < 0): 
     print("\n Please enter a valid number to start with. \n \n") 
     min_count_set() 
    else: 
     ultrcount = int(input("How many ultra miners do you wish to start with? ")) 
    if (ultrcount > 10000 or ultrcount < 0): 
     print("\n Please enter a valid number to start with. \n \n") 
     min_count_set() 
    else: 
     print("\n Returning you to the setup menu \n \n") 
    set_mining_values(stancount, advcount, ultrcount) 

Beachten Sie, dass die Variablen jetzt in Ihrer Druckfunktion übergeben werden.

0

Sie stancount als globale Variable wie erklären könnte:

def min_count_set(): 
    global stancount 
+0

aber dann kann er 'stancount' im lokalen Bereich nicht verwenden, um ungespeicherte Änderungen an der Variablen vorzunehmen. – WhatsThePoint

+0

Wahr (Entschuldigung), aber ich dachte, er wollte auf diese lokale Variable an anderen Stellen zugreifen (daher meine Antwort). –

Verwandte Themen