2017-02-11 4 views
0

Momentan arbeite ich an einem Dezimal-zu-Oktal-Zahlen-Konverter. Allerdings bekomme ich manchmal diese Zeile verursachten Fehler 28:TypeError: Nicht unterstützte Operandentyp (en) für%: 'NoneType' und 'int' | Python 3

TypeError: unsupported operand type(s) for %: 'NoneType' and 'int' 

Es scheint zufällig zu passieren, manchmal ist es tut es mit einer Zahl, die in einem nächsten Durchlauf des Codes nur umgewandelt werden.

Der Code wird im Folgenden aufgeführt:

decimaal = 0 


# Laat de gebruiker een waarde in typen 
def user_input(): 
    getal = int(input('Geef het getal: ')) 
    if getal < 10000: 
     return getal 
    else: 
     print('Het getal moet kleiner zijn dan 10.000!') 
     user_input() 


# functie om getal in het decimaal- naar octaal-stelsel om te zetten 
def decimaal_octaal_converter(decimaal): 
    resultaat = [] 
    quotient = decimaal 
    rest = 0 

    # Maakt een lijst met het octale resultaat 
    while quotient != 0: 
     """ 
     Soms geeft lijn 28 de volgende error: 
     TypeError: unsupported operand type(s) for %: 'NoneType' and 'int' 
     Maar waarom? 
     """ 
     rest = quotient % 8 
     quotient //= 8 
     resultaat.append(rest) 

    # Lijst moet omgedraaid worden 
    resultaat.reverse() 
    octaal = '' 

    # De lijst naar een string omzetten zodat de gebruiker het kan lezen 
    for i in range(len(resultaat)): 
     octaal += str(resultaat[i]) 

    return print('Het getal %s in octaal is %s' % (decimaal, octaal)) 


# De hoofd functie voor het omzetten van decimaal naar octaal 
def converter(): 
    decimaal_octaal_converter(user_input()) 

converter() 

Dieses für ein Projekt ist, damit der < 10.000 Teil und dutch Kommentars des

Dieses Problem tritt auf, wenn ich zum ersten Mal versuchen, ‚10000‘ zu konvertieren und dann ' 9999 '

+1

Es ist Ihre 'user_input()' Funktion. Sie geben keinen Wert zurück, wenn der erste Aufruf ungültig ist. Verwenden Sie hier keine Rekursion, sondern fügen Sie 'input()' in eine Schleife ein. – cdarke

Antwort

1

user_input() gibt None zurück, wenn Sie zuerst eine Zahl größer oder gleich 10000 eingeben, da das Ergebnis des rekursiven Aufrufs ignoriert wird. Und wenn user_input()None zurückgibt, dann wird quotient auf None eingestellt und Sie erhalten Ihren Fehler.

hinzufügen return:

def user_input(): 
    getal = int(input('Geef het getal: ')) 
    if getal < 10000: 
     return getal 
    else: 
     print('Het getal moet kleiner zijn dan 10.000!') 
     return user_input() 

Noch besser ist es, verwenden keine Rekursion. Alles was Sie brauchen ist eine Endlosschleife:

def user_input(): 
    while True: 
     getal = int(input('Geef het getal: ')) 
     if getal < 10000: 
      return getal 
     else: 
      print('Het getal moet kleiner zijn dan 10.000!') 

Weitere Details finden Asking the user for input until they give a valid response.

+0

Macht Sinn, vielen Dank! – BDK

Verwandte Themen