2014-11-23 52 views
2

我已經設置了一個作業來將一個Denary編號轉換爲8位二進制數。用戶輸入一個數字,我必須在轉換前驗證它。 當我輸入一個有效的號碼並且驗證工作正常時,代碼工作得很好。但是,當我嘗試轉換一個數字後驗證一個invallid號碼,我得到這個NoneType操作數錯誤。 任何人都可以解釋我做錯了爲什麼我得到一個TypeError:不受支持的操作數類型爲%:'NoneType和Int

def testDenary(testValue): 
    if testValue < int(0): 
     print("Error: Negative value input. Please try again!") 
     return False 
    elif testValue > 255: 
     print("Error: Input value too high. Please try again!") 
     return False 
    else: 
     return True 

def getDenary(): 
    denIn = int(input("Please enter a number between 0 and 255: ")) 
    if testDenary(denIn): 
     return denIn 
    else: 
     getDenary() 

def convertToBinary(denaryIn): 
    x = 0 
    result = [] 
    for number in range(8): 
     bit = denaryIn % 2 
     result.append(bit) 
     denaryIn = denaryIn // 2 
     print (type(denaryIn)) 
    result.reverse() 
    str1 = "".join(str(x)for x in result) 
    return str1 

def main(): 
    denary = getDenary() 
    answer = convertToBinary(denary) 
    print ("Binary version = " + answer) 
    main() 

main() 

回答

1

你的功能getDenary()的else子句中沒有返回值,所以當你的函數結束的None默認返回值被返回。

這裏是如何改變你的代碼:

def getDenary(): 
    denIn = int(input("Please enter a number between 0 and 255: ")) 
    if testDenary(denIn): 
     return denIn 
    else: 
     return getDenary() # added return 

注意:您可以通過執行

"{0:b}".format(your_int) 
整數轉換爲其二進制字符串表示
相關問題