2017-11-24 4 views
0

Ich teste, wenn die Wortnummer die Macht von 2 durch Protokollfunktion ist. Wenn die Wortnummer niedrig ist, füge ich das Wort an '.' bis die Länge zur Potenz von 2 wird. ZB wenn das Wort (W) "abcd" ist, ist len ​​(W) = 4, was 2^2 ist. Die Funktion wird angehalten. Wenn das W 'abcdef' ist, das len (W) = 6, möchte ich das Wort an '.' Anhängen, so dass es 'abcdef' wird. Die neue W-Länge ist 8, was 2^3 ist.Warum hört meine Funktion nicht auf, auch wenn die Bedingung wahr ist?

Bitte überprüfen Sie, wo ich Änderungen vornehmen muss.

import math 

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

Als ich

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

Das Programm stoppt mit "maximaler Rekursion" laufen. Ich dachte, der Zustand ist wahr. Was scheint ein Problem zu sein?

Arbeitsskript. Ich habe die isinstance Funktion geändert.

import math 

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

'log2' keinen int zurückgeben - so Sie rekursiv unendlich oft nennen wollen ... – alfasin

+0

oh..I zu sehen. Vielen Dank. – Kenneth

+0

'2.0' ist kein int. – user2357112

Antwort

2

Sie müssen die Rekursion zurück:

import math 

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