2017-02-11 105 views
0

目前我正在从小数到八进制数转换器。 不过,我有时会收到此错误引起的线28:TypeError:不支持的操作数类型为%:'NoneType'和'int'| Python 3

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

这似乎是随机发生的,有时它与一些这在代码的下一次运行刚刚被转换做的。

的代码如下:

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() 

这是一个项目,因此,当我第一次尝试将“10000”,然后发生< 10.000部分和荷兰的评论的

这个问题“ 9999'

+1

它是你的'user_input()'函数。如果第一个呼叫无效,则不返回值。不要在这里使用递归,把你的'input()'放到一个循环中。 – cdarke

回答

1

user_input()返回None如果您最初输入等于或大于10000的数字,因为递归调用结果被忽略。当user_input()返回None时,quotient结果被设置为None,你得到你的错误。

添加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() 

更妙的是,不使用递归。所有你需要的是一个无限循环:

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!') 

请参阅Asking the user for input until they give a valid response了解更多详情。

+0

有道理,非常感谢! – BDK

相关问题