2016-11-24 4 views
0
def square_digits(num): 
    result = [] 
    if num > 0: 
     result.append(num%10) 
     num= num//10 
    list = '' 
    for i in result: 
     list += str(i**2) 
    return int(list) 

Dies ist eine kleine Funktion, die ich jede Ziffer einer Zahl zu quadrieren will, genau wie wenn ‚991'runs durch die Funktion‚81811‘kommen heraus. Aber ich bekomme immer die falsche Antwort "81". Kann jemand herausfinden, was passiert ist?Eine kleine Funktion in Python

+1

check 'result' vor dem Start der' for'. Ich denke, Sie wollen wahrscheinlich den 'num // 10' Teil in einer Schleife wie beim Ersetzen von' for' durch 'while'. – Bernhard

+0

Es funktioniert, wenn ich "if" in "while" zu einem gewissen Grad ändern, ich denke immer, wenn die gleiche Anweisung wie while zuvor. –

+1

Vermeiden Sie 'list' als Variablennamen; Es ist der Name der eingebauten 'list()' -Funktion. –

Antwort

2

ersetzen if durch while sonst nur den Platz der ersten Ziffer berechnet:

def square_digits(num): 
    result = [] 
    while num > 0: 
     result.append(num%10) 
     num= num//10 
    list = '' 
    for i in result: 
     list += str(i**2) 
    return int(list) 
+0

Ich sehe, wie es funktioniert! –

+0

bearbeitet für die Umkehrung vor der Quadratur des Arrays sonst wird es falsche Antwort drucken – Raghavendra

0

folgenden wird die korrigierte Antwort Posting als Änderungen werden auf vorherige Antwort nicht akzeptiert (nehmen Sie es nicht anders)

def square_digits(num): 
    result = [] 
    while num > 0: 
     result.append(num%10) 
     num= num//10 
    list = '' 
    result.reverse() 
    for i in result: 
     list += str(i**2) 
    return int(list)