2016-09-23 118 views
0

我正在運行一個遞歸函數,它接受一個正整數和一個列表(它更新,因爲它運行通過函數):無效文字爲int()與基地10:''爲地圖(int,str(num))

def happy_number(num, tracking_list = []): 
    if (num == 1): 
     print 1 
    else: 
     digit_list = map(int, str(num)) 
     digit_sum = 0 
     for n in digit_list: 
      digit_sum = (n ** 2) + digit_sum 
     if digit_sum in tracking_list: 
      print 0 
     else: 
      tracking_list.append(digit_sum) 
      happy_number(digit_sum, tracking_list) 

運行此,它抱怨:

digit_list = map(int, str(num)) 

它給人的錯誤:

ValueError: invalid literal for int() with base 10: '' 

發生了什麼事,他回覆?

+0

你給了什麼輸入? –

+0

@AmiTavory顯然他正在喂一個空的字符串作爲數字 – RPGillespie

+0

代碼顯示正常,你給你的輸入num =「」。 – rlbond

回答

0

聽起來好像是從文件中解析數字,當空間' '或換行符'\n'顯示出來(或任何不是字符串數字的事情)時,腳本將失敗。你可以試試:

def happy_number(num, tracking_list = []): 
    if (num == 1): 
     print 1 
    else: 
     digit_list = map(int, str(num if num.isdigit() else '')) 
     digit_sum = 0 
     for n in digit_list: 
      digit_sum = (n ** 2) + digit_sum 
     if digit_sum in tracking_list: 
      print 0 
     else: 
      tracking_list.append(digit_sum) 
      happy_number(digit_sum, tracking_list) 

行:

digit_list = map(int, str(num if num.isdigit() else '')) 

會做同樣的事情,你有什麼之前,如果你通過num不是一個字符串的數字,除了將一個空列表[]。如果您願意,可以用末尾的''替換爲另一個默認值。

相關問題