2017-11-24 4 views
0

単語番号がログ機能によって2の累乗であるかどうかをテストしています。単語の数が少ない場合は、「。」で単語を追加します。例えば、単語(W)が 'abcd'の場合、len(W)= 4、つまり2^2です。この機能は停止します。 Wが 'abcdef'、len(W)= 6ならば、 '。'で単語を追加したいので、 'abcdef ..'になります。新しいWの長さは8で2^3です。条件がTrueであっても私の関数が停止しないのはなぜですか?

変更が必要な箇所を確認してください。

import math 

def powerOf2(W): 
    logP = math.log2(len(W)) 
    if isinstance(logP, int): 
     return W 
    else: 
     W.append('.') 
     powerOf2(W) 

私は

W = list('abcd') 
powerOf2(W) 

を実行すると、プログラムが "最大の再帰" で停止します。私は条件が本当だと思った。何が問題だと思われますか?

作業スクリプト。 isinstance関数を変更しました。

あなたは再帰を返す必要が
import math 

def powerOf2(W): 
    logP = math.log2(len(W)) 
    if (logP).is_integer(): 
     return W 
    else: 
     W.append('.') 
     powerOf2(W) 
+0

'log2'がintを返さない - あなたは何回再帰的に無限の番号に電話しますので... – alfasin

+0

oh..Iを参照してください。ありがとうございました。 – Kenneth

+0

'2.0'はintではありません。 – user2357112

答えて

2

import math 

def powerOf2(W): 
    logP = math.log2(len(W)) 
    if isinstance(logP, int): 
     return W 
    else: 
     W.append('.') 
     return powerOf2(W) 
関連する問題