2017-05-21 36 views
-2

創建一個任務來編寫接受兩個參數a和b的函數power並計算一個提升到power b的函數。Python中的電源參數

power(2, 3) => 8 

注:請不要使用

2 ** 3 

,並且不使用

Math.pow(2, 3) 

我已經試過這

def power(a,b): 
    return eval(((str(a)+"*")*b)[:-1]) 

和它的作品,但似乎失敗一個測試,是return_1_when_exp_is_0

,我也得到了錯誤

Unhandled Exception: unexpected EOF while parsing (, line 0) 

請我該如何解決這個問題,考慮到我是新來的蟒蛇

+1

的if-else:如果exp爲0,則返回1,否則返回計算的結果。你也不需要訴諸使用'eval'。 –

+0

參數是整數還是浮點數? –

+0

@TomLynch我現在填補不好。考慮到,但錯誤的感謝很多 – diagold

回答

0

你可以使用for循環

x=1  
for i in range(b): 
    x=x*a 

print(x) 
+0

'a = 2,b = 3'打印'16'而不是'8' ...我相信你的意思是初始化'x = 1'。設置'x = 1'也解決'0'指數問題,'a = .b = 0'將打印'1'。 – AChampion

+0

這是正確的@AChampion。 –

0

使用eval是一個可怕的想法,但如果你真的想然後使用join()會是一個更好的方式來創建字符串:如果添加['1']到前面

def power(a, b): 
    return eval('*'.join([str(a)]*b)) 

>>> power(2, 3) 
8 

那麼0指數表現正常:

def power(a, b): 
    return eval('*'.join(['1']+[str(a)]*b)) 

>>> power(2, 0) 
1 

然而,這是簡單的實現與整數指數一個for循環:

def power(n, e): 
    t = 1 
    for _ in range(e): 
     t *= n 
    return t 

>>> power(2, 3) 
8 
>>> power(2, 0) 
1 

你也可以使用functools.reduce()做同樣的事情:

import functools as ft 
import operator as op 

def power(n, e): 
    return ft.reduce(op.mul, [n]*e, 1) 
0

這工作得很好

def power(a,b): 
    if b == 0: 
     return 1 
    else: 
     return eval(((str(a)+"*")*b)[:-1])