2016-05-11 17 views
2

Mein aktuelles Stück Code ist dafür gemacht: "Drucke alle perfekten Quadrate von Null bis zu einem bestimmten Maximum. Diese Version ist umgestaltet zu machen es verständlicher und wartungsfreundlicher. "nicht unterstützte Operandentypen für +: 'NoneType' und 'int'

Derzeit mein Problem ist in Bezug auf dieses Stück Code:

def read_bound(prompt): 
    """Reads the upper bound from the standard input (keyboard). 
     If the user enters something that is not a positive integer 
     the function issues an error message and retries 
     repeatedly""" 
    upper_bound = None 
    while upper_bound is None: 
     line = input(prompt) 
     if line.isnumeric(): 
      return int(line) 
     else: 
      print("You must enter a positive number.") 

Auf die Hauptfunktion aufrufen:

def main(): 
    """Bring everything together""" 
    lower_bound = read_bound("Enter the lower bound: ") 
    upper_bound = read_bound("Enter the upper bound: ") 
    squares = [] 
    for num in range(lower_bound, upper_bound + 1): 
     if is_perfect_square(num): 
      squares.append(num) 

    print_squares(lower_bound, upper_bound, squares) 

ich den Fehler:

builtins.TypeError: nicht unterstützt Operandentyp (en) für +: 'NoneType' und 'int'

Warum ist die Tanne? Das vom Benutzer gegebene st Objekt ist vom Typ 'none', aber das zweite ein 'int'. Ich wünsche ihnen, dass sie beide ganzzahlig sind. Was mache ich falsch?

Beide Antworten gegeben waren identisch und behoben mein Problem. Dementsprechend wurde mein Code in der Frage geändert. Vielen Dank!

+0

Ist die Vertiefung Ihrer Frage richtig für 'read_bound'? Wenn nicht, bitte [edit] und fix –

+1

'read_bound()' gibt nichts zurück –

Antwort

2

der Lese gebunden Code die Eingabe nicht zurückkehrte

def read_bound(prompt): 
"""Reads the upper bound from the standard input (keyboard). 
    If the user enters something that is not a positive integer 
    the function issues an error message and retries 
    repeatedly""" 
upper_bound = None 
while upper_bound is None: 
    line = input(prompt) 
    if line.isnumeric(): 
     return int(line) 
    else: 
     print("You must enter a positive number.") 
2

Die Funktion read_bound enthält keine Rückgabeanweisung. Wenn die Ausführung in Python das Ende einer Funktion erreicht, wird the function will return None und damit upper_boundNone.

Derzeit wird eine lokale Variable zugewiesen, die zufällig den Namen mit der upper_bound in main teilt, die keinen Effekt haben wird, da Sie nie davon lesen.

Ändern read_bound enthalten eine Rückkehr:

def read_bound(prompt): 
    """Reads the upper bound from the standard input (keyboard). 
     If the user enters something that is not a positive integer 
     the function issues an error message and retries 
     repeatedly""" 
    upper_bound = None 
    while upper_bound is None: 
     line = input(prompt) 
     if line.isnumeric(): 
      return int(line) # <-- added 
     else: 
      print("You must enter a positive number.") 
Verwandte Themen