2016-09-20 77 views
0

之前是的,這是一個家庭作業問題。那麼有兩個我想要求幫忙。第一個函數需要取兩個數字(base,exp),然後乘以指數所代表的次數。例如。 base = 2,exp = 3,它將是2 * 2 * 2。到目前爲止,這是我有:如何創建一個替換指數特徵的函數?

def iterPower(base, exp): 

if base and exp <= 0: 
    return("The answer is 0") 
elif base and exp == 0: 
    return("1") 
else: 
    for i in range(exp): 
     ans = base * base 
     return ans 

print("iterPower(0, 0): should be 1 == " \ 
    + str(iterPower(0, 0))) 

print("iterPower(5, 3): should be 125 == " \ 
    + str(iterPower(5,3))) 

print("iterPower(-2.0, 3): should be -8.0 == " \ 
    + str(iterPower(-2.0, 3))) 

但是,當我運行上述功能。第一次測試沒有給我,第二次測試只給了我25,最後一次測試給了我4.0。我通過代碼可視化工具運行代碼,看看發生了什麼(或沒有發生),我發現該範圍沒有被利用。我也注意到,因爲我(基地*基地)也不會給出正確的答案。我嘗試了Google搜索,並通過了已經回答的問題,然後我什麼都沒有提出。

編輯:我知道有一個內置的運算符,但分配的重點是不使用運算符。本文實際上具有巨大的黑體字說這是被禁止使用, - , -

+0

如果'exp' <0,則它應該是小數。 – Li357

+0

@AndrewL。我們不允許爲此使用該功能。 –

+2

您在第一次迭代中返回? – Li357

回答

1

你可能只是想:

ans = 1 
for i in range(exp): 
    ans *= base 
return ans 

當你的最後一個條件。
你也不需要中間條件。

0

它應該工作。

def iterPower(base, exp): 
    if base < 0: 
     return 0 
    ans = 1 
    for i in range(exp): 
     ans *= base 
    return ans 

首先,檢查條件語句在Python中是如何工作的,base and exp <= 0base <= 0 and exp <= 0不同。

其次,在Python塊相應地定義壓痕,所以這兩個循環做不同的事情:

for i in range(exp): 
    ans *= base 
    return ans 

for i in range(exp): 
    ans *= base 
return ans 

三,base * base是恆定的,如果base不改變心態,與比較ans = base * baseans = ans * base

+0

沒有理由檢查exp <0。將一個負數提高到一個值不是問題。 –

+0

感謝您的幫助和抽出時間來幫助我..我已經得到它的工作。 –

+0

此代碼只處理非負整數指數,否則更好的實現應該會引發錯誤。 @AlexisNonya,我認爲理解爲什麼它不工作比讓它工作更重要。 –

0

也可以使用while循環來縮短代碼。

def iterPower(base, exp): 
    answer = 1 
    while exp > 0: 
     answer *= base 
     exp -= 1 
    return answer 
+0

該作業確實建議使用while循環,但出於某種原因,我想出了一個使用for循環的解決方案。 –

+0

是的。一年前我參加了這門課程。我記得這個問題。 – BWhite

+0

如果exp的傳遞值小於或等於零,那麼while循環將永遠不會終止。 –

0

您的代碼有幾個問題。

  1. 聲明if base and exp <= 0基本上轉化爲if (base) and (exp <= 0)。這裏的條件是分開評估的。你可能想要使用if base <= 0 and exp <= 0:(或類似的東西)。

  2. 聲明ans = base * base基本上正方形base並將結果指定爲ans。會不會ans = ans * base更好(確保你初始化ans 1你這樣做之前。

  3. return語句(return ans)是裏面的for循環,這意味着循環將只執行一次。你可以把它放到它超出了循環。

希望這會有所幫助。

0

1I想你想要的代碼是:

def iterPower(base, exp): 

    if base and exp < 0: 
     return 0 
    elif base and exp == 0: 
     return 1 
    elif base and exp == 1: 
     return base 
    else: 
     ans = base 
     for i in range(1, exp): 
      ans *= base 
     return ans 

的修改是:

  • 函數總是返回一個整數。
  • 負指數返回0
  • 0返回1
  • 1返回base的指數的指數。
  • 2和更大的指數乘以base本身exp次。
+1

看起來你的範圍有點偏離。它必須是'range(1,exp)':) – Li357

+0

啊好吧。我注意到了這一點。感謝您的幫助。 –