2014-02-12 69 views
0

我从(探索Python)的书提摩太A.Budd调用的一般功能

我的问题研究蟒蛇的递归函数是在书的第三章第一个问题,有关定义功能:

将整数转换为等效字符串的程序不能正确处理 负数或零。通过创建一个 第二个函数,将其识别为特殊情况,然后在一般情况下调用递归函数,最容易处理此操作。写第二个函数。为什么 递归函数在赋值为0时会返回“零”?

到整数转换成其等效字符串的程序是在这里:

def numToString (num): 
    if num==0: return '' 
    elif num==1: return ' one ' 
    elif num==2: return ' two ' 
    elif num==3: return ' three ' 
    elif num==4: return ' four ' 
    elif num==5: return ' five ' 
    elif num==6: return ' six ' 
    elif num==7: return ' seven ' 
    elif num==8: return ' eight ' 
    elif num==9: return ' nine ' 
    elif num==10: return ' ten ' 
    elif num==11: return ' eleven ' 
    elif num==12: return ' twelve ' 
    elif num==13: return ' therteen ' 
    elif num==14: return ' fourteen ' 
    elif num==15: return ' fifteen ' 
    elif num==16: return ' sixteen ' 
    elif num==17: return ' seventeen ' 
    elif num==18: return ' eighteen ' 
    elif num==19: return ' ninteen ' 
    elif num<=29: return ' twenty ' + numToString(num%10) 
    elif num<=39: return ' thirty ' + numToString(num%10) 
    elif num<=49: return ' fourty ' + numToString(num%10) 
    elif num<=59: return ' fifty ' + numToString(num%10) 
    elif num<=69: return ' sixty ' + numToString(num%10) 
    elif num<=79: return ' seventy ' + numToString(num%10) 
    elif num<=89: return ' eighty ' + numToString(num%10) 
    elif num<=99: return ' ninty ' + numToString(num%10) 
    elif num<=999: return numToString(num/100)+ ' hundred ' + numToString(num%100) 

回答

2

如果函数返回“零”为0,则numToString(20)将返回“二十零”,等等。

+0

是的,这是真的 – user3301637

0

可能是题外话,但你可以使用的字典(或列表在这种情况下),以减少你的代码:

def numToString (num): 
    words=[ 
    '', ' one ', ' two ', ' three ', ' four ', ' five ', ' six ', ' seven ', ' eight ', ' nine ', 
    ' ten ', ' eleven ', ' twelve ', ' therteen ', ' fourteen ', ' fifteen ', ' sixteen ', ' seventeen ', ' eighteen ', ' ninteen '] 
    if num<20: return words[num] 
    elif num<=29: return ' twenty ' + numToString(num%10) 
    elif num<=39: return ' thirty ' + numToString(num%10) 
    elif num<=49: return ' fourty ' + numToString(num%10) 
    elif num<=59: return ' fifty ' + numToString(num%10) 
    elif num<=69: return ' sixty ' + numToString(num%10) 
    elif num<=79: return ' seventy ' + numToString(num%10) 
    elif num<=89: return ' eighty ' + numToString(num%10) 
    elif num<=99: return ' ninty ' + numToString(num%10) 
    elif num<=999: return numToString(num/100)+ ' hundred ' + numToString(num%100) 
+0

太棒了!它的工作原理似乎更好,谢谢 – user3301637