2017-03-23 15 views
0

Ich muss den Benutzer für die Eingabe innerhalb der folgenden Funktion fragen und n zu main zurückgeben. Die Variable n wird in main/anderen Funktionen verwendet. Immer wenn ich das mache, bekomme ich eine Fehlermeldung, dass n nicht definiert ist. Warum funktioniert die folgende Funktion nicht so, wie ich sie brauche?Wie um Benutzereingabe innerhalb einer Funktion zu bitten und es zu def main() zurückzubringen :?

def main():  
    intro() 
    setInput() 
    print "\nThe prime numbers in range [2,%d] are: "%(n) 
    for i in range(n): 
    if testPrime(i): 
    print i,",",  
def setInput():  
    n = input("Enter the value for what range to find prime numbers: ")  
    return n 
+0

Fügen Sie ein Beispiel der aufrufenden Funktion hinzu, die den Fehler verursacht. – Craig

+0

verwenden Sie Python 2X? – repzero

+0

Wenn Sie Python 2X verwenden, müssen Sie raw_input ("......") verwenden. In python 2X wird input() versuchen, das Ergebnis als Variable auszuwerten, was zu einem NameError – repzero

Antwort

1

Im main() Anruf, müssen Sie das Ergebnis der setInput() als n wie folgt speichern:

def setInput():  
    n = input("Enter the value for what range to find prime numbers: ")  
    return n 

def main():  
    intro() 
    n = setInput() 
    print "\nThe prime numbers in range [2,%d] are: "%(n) 
    for i in range(n): 
     if testPrime(i): 
      print i,",",  

Notiere die Vertiefung nach der for Schleife. Ich denke, das ist es, was Sie vorhaben.

Da Sie Python 2.x verwenden, wäre es sicherer, raw_input() zu verwenden und die Zeichenfolge dann in den richtigen Typ zu konvertieren. Zum Beispiel könnten Sie tun:

s = raw_input("Enter the value for what range to find prime numbers: ") 
n = int(s) # or fancier processing if you want to allow a wider range of inputs 
0

Sie die global Schlüsselwort verwenden könnte ...

def setInput(): 
    global n 
    n = input("Enter the value for what range to find prime numbers: ") 
    return n 

Die Variable zugänglich sein wird auch außerhalb der Funktionen (eine n = "something" außerhalb jeder Funktion, die die gleiche ist Effekt.

n = 42 

def foo(): 
    print(n) # getting the value on n is easy 
    return n+1 # same here 

def bar(): 
    global n 
    n += 10  # setting a value to n need the use of the keyword (one time per function) 

if __name__ == "__main__": 
    print(n) # 42 

    a = foo() # 42 
    print(a) # 43 

    print(n) # 42 
    bar() 
    print(n) # 52 

Oder rufen Sie diese Funktion direkt von main, und übergeben Sie n in den Argumenten (redundanter, aber sicherer ... es hängt von der Rolle der Variablen ab: mit einem Namen wie n, scheint es keine gute Wahl zu sein Verwenden Sie eine globale Variable, aber die Wahl liegt bei Ihnen)

def main(): 
    ... 
    n = setInput() 
    foo(n) 
    ... 
Verwandte Themen