2017-01-04 17 views
0

Ich brauche eine Funktion, die falsche Eingabe ausnimmt und erneut eingeben möchte. Aber nach falscher Eingabe gibt es None statt neuer Eingabe zurück. Was ist falsch an meinem Code und wie kann ich das lösen?Funktion gibt keine nach falscher Eingabe zurück

def start(): 

    def inputNumber(answer): 
     try: 
      number = int(input(answer)) 
      if number <= 100 and number >= 0: 
       print('%%%',number,'%%%') 
       return number 
      else: 
       inputNumber('Number is wrong, please input number from 0 to 100: ') 
     except (ValueError): 
      inputNumber('It is not a number, please input number from 0 to 100: ') 

    def checkInput(number2): 
     print('$$$',number2,'$$$') 
     if number < 50: 
      return number2 
     else: 
      return checkInput(inputNumber('Input number from 0 to 100: ')) 

    number = 0 
    print('###',checkInput(inputNumber('Input number from 0 to 100: ')),'###') 
    start() 

start() 

Dies ist das Ergebnis:

Input number from 0 to 100: 777

Number is wrong, please input number from 0 to 100: sadf

It is not a number, please input number from 0 to 100: 17

%%% 17 %%%

$$$ None $$$

TypeError: unorderable types: NoneType() < int()

+0

Leider Funktion checkInput() ist falsch zu fangen, aber es spielt keine Rolle, es keine irgendwie zurückgibt. –

+0

In Python ist 'return' explizit. Sie müssen das Ergebnis einer Funktion zurückgeben. Fügen Sie 'return' vor' inputNumber' in 'else' und' except' hinzu. –

Antwort

4

Sie inputNumber rekursiv fordern aber das Ergebnis der rekursiven Aufruf nicht zurück. Bessere Nutzung Schleifen statt Rekursion:

def inputNumber(prompt): 
    while True: 
     try: 
      number = int(input(prompt)) 
      if 0 <= number <= 100: 
       print('%%%',number,'%%%') 
       return number 
      prompt = 'Number is wrong, please input number from 0 to 100: ' 
     except ValueError: 
      prompt = 'It is not a number, please input number from 0 to 100: ' 

Btw: Sie sollten auch Schleifen in der anderen Funktionen verwenden, und nicht verschachtelte Funktionen definieren.

0

Das Problem ist, dass, sobald Sie eine Überprüfung fehlschlagen Sie inputNumber wieder aufrufen, aber nichts mit der Antwort tun. Sie müssen es zurückgeben.

def start(): 

    def inputNumber(answer): 
     try: 
      number = int(input(answer)) 
      if number <= 100 and number >= 0: 
       print('%%%', number, '%%%') 
       return number 
      else: 
       return inputNumber('Number is wrong, please input number from 0 to 100: ') 
     except (ValueError): 
      return inputNumber('It is not a number, please input number from 0 to 100: ') 

    def checkInput(number2): 
     print('$$$', number2, '$$$') 
     if number < 50: 
      return number2 
     else: 
      return checkInput(inputNumber('Input number from 0 to 100: ')) 

    number = 0 
    print('###', checkInput(inputNumber('Input number from 0 to 100: ')), '###') 
    start() 

start() 
0

führen Sie diesen Code wird es Ihr Problem lösen. Sie müssen nur als zusätzliche Fehler (NameError)

def start(): 

    def inputNumber(answer): 
     try: 
      number = int(input(answer)) 
      if number <= 100 and number >= 0: 
       print('%%%',number,'%%%') 
       return number 
      else: 
       inputNumber('Number is wrong, please input number from 0 to 100: ') 
     except (ValueError, NameError) as e: 
      inputNumber('It is not a number, please input number from 0 to 100: ') 

    def checkInput(number2): 
     print('$$$',number2,'$$$') 
     if number < 50: 
      return number2 
     else: 
      return checkInput(inputNumber('Input number from 0 to 100: ')) 

    number = 0 
    print('###',checkInput(inputNumber('Input number from 0 to 100: ')),'###') 
    start() 

start() 
Verwandte Themen