2017-05-21 35 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])