2017-02-17 2 views
0

Ich kämpfe mit einer Übung, die mich auffordert, a ** b ohne diesen Operator zu schreiben. Habe versucht, selbst etwas zu schreiben, bekomme aber keine richtigen Ergebnisse. Anstatt eines Wertes bekomme ich zwei, beide falsch. Scheint so, als ob der Zähler nicht wirklich steigt. Darf ich um Hilfe bitten? Vielen Dank!a zur Macht von b ohne (a ** b), Python

def powerof(base,exp): 
    result=1 
    counter=0 
    # until counter reaches exponent, go on 
    if counter<=exp: 
    # result multiplies itself by base, starting at 1 
    result=result*base 
    # increase counter 
    counter=counter+1 
    return result 
    return counter # here it says "unreachable code". Can I not return more variables at the same time? 
    else:  # counter already reached exponent, stop 
    return 

# I want to print 2**8. Suprisingly getting two (incorrect) values as a result 
print(powerof(2,8)) 
+0

Sie "zurück", so dass der Rest nicht erreichbar ist ... –

+0

Funktionen können nur 1 Wert zurückgeben. Was du versuchst zu tun macht keinen Sinn. Gib stattdessen ein Tupel zurück. – Carcigenicate

+0

Sicher ist es unerreichbar. Der Dolmetscher hat es mir gesagt. Deshalb bin ich hierher gekommen, um zu fragen. Das Downvoting-Spiel, dass ich kein erfahrener Programmierer bin, kommt wieder ... – Jewenile

Antwort

1

Naive Implementierung (nicht die beste Lösung, aber ich denke, sollten Sie in der Lage sein, diese zu folgen):

def powerof(base, exp): 
    results = 1 
    for n in range(exp): 
     results *= base 
    return results 


print(powerof(5,2)) 

Hoffe, es hilft.

+0

Danke. Nichts ist falsch an der Naivität. Ich bin nur ein Ingenieur, der ein bisschen Codierung lernen muss. Keine Notwendigkeit für mehr. – Jewenile

+0

Sie können das 'if exp == 0: return 1' entfernen - der Fall, wenn exp == 0 bereits behandelt wird. –

+0

Danke @Paul_Hankin, ich habe jetzt die Antwort entsprechend bearbeitet. –

2

Versuchen mit Rekursion:

def powerof(base,exp): 
    if exp == 0: 
     return 1 
    if exp == 1: 
     return base 
    return base * powerof(base, exp-1) 

# I want to print 2**8. Suprisingly getting two (incorrect) values as a result 
print(powerof(2,8)) 

Also, was es tut, es nennt sich während der Exponent abnimmt, so wird der Anruf wie folgt aussehen: 2 * (2 * (2 * 2))) ... bei der Ausführung. Sie könnten dies auch in einer for-Schleife tun, aber Rekursion ist kompakter.

+0

Vielen Dank, Tobias! Mein Problem ist, dass ich Rekursionen überhaupt nicht verstehen kann. Sie scheinen meine Gedanken explodieren zu lassen. Ich habe ein paar Beispiele (wie faktoriell) gesehen, konnte aber nichts verstehen. – Jewenile

+0

@Jewenile Jeder kann Rekursion verstehen. Es ist sicherlich ein schwieriges Thema, aber es lohnt sich, es zu versuchen. – Carcigenicate

0

Ich würde sicherlich Rekursion empfehlen, aber offensichtlich das ist keine Option ;-)

Also, lassen Sie uns versuchen, Ihren Code zu beheben. Warum versuchst du etwas in deiner if Aussage zurückzugeben?

return result 
return counter # here it says "unreachable code". Can I not return more variables at the same time? 

Sie wissen, dass Sie, wenn Sie zurückkehren, Ihre Funktion verlassen? Das hast du nicht gemeint. Was ich denke, dass Sie wollen, ist result zu multiplizieren, solange Sie es nicht exp mal gemacht haben. Mit anderen Worten, Sie möchten den Code in Ihrer if Anweisung wiederholen, bis Sie es exp mal gemacht haben. Sie haben ein Schlüsselwort dafür: while. Und while enthält sicherlich diese Bedingung, die Sie versucht haben, mit Ihrer if bereitzustellen.

Viel Glück!

bearbeiten: BTW Ich verstehe nicht, warum Sie sagen, Sie erhalten zwei Ergebnisse. Das ist verdächtig, bist du dir sicher?

+0

Sicher hast du recht. Es gibt eine Nummer. Einige der vorherigen Versionen haben zwei von ihnen zurückgegeben. Es tut uns leid. – Jewenile

Verwandte Themen