2016-09-24 104 views
0

我剛啓動Python 2.7。 我想做一個程序,執行電源功能(使用循環),而不使用導入。數學 我想我得到它,除了我的程序不執行負指數。 只輸出爲1. 這是我到目前爲止。使用循環的電源功能

decimal=float(input('Enter the base number:')) 
integer=int(input('Enter the exponent number:')) 

def power_function(decimal, integer): 
    num=1 
    for function in range(integer): 
     if integer>0: 
      num=num*decimal 
     if integer<0: 
      num=1/(num*decimal) 
    return num 
print power_function(decimal, integer) 
+0

'範圍( )負數是空的列表,因此永遠不會進入循環。 – AChampion

+0

啊!我明白了,那我該怎麼辦?負數時是否需要使其不進入循環? – jnkim0715

回答

2

根據負值的範圍進行修復。

def power_function(decimal, integer): 
    num=1 
    if integer>0: 
     for function in range(integer): 
      num=num*decimal 
    if integer<0: 
     num=1.0 # force floating point division 
     for function in range(-integer): 
      num=num/decimal 
    return num 
+0

我試過你的方法,但它仍然給我輸出1 – jnkim0715

+0

對不起,當我重新編輯帖子時,我複製了你的'num = 1 /(num * decimal)'表達式而不是正確的'num = num /小數「表達 –

+0

非常感謝!有用。快速的問題,雖然..爲什麼我需要把「num = 1」作爲一個全球性的術語?在線2?我仍然無法掌握循環的想法 – jnkim0715

0

簡單的解決方法是使用abs(integer)range

def power_function(decimal, integer): 
    num = 1 
    for function in range(abs(integer)): 
     num = num*decimal if integer > 0 else num/decimal 
    return num 

power_function(2, 2) 
# 4 
power_function(2, -2) 
# 0.25 

或者只是使用減少:

def power_function(decimal, integer): 
    op = (lambda a, b: a*b) if integer > 0 else (lambda a, b: a/b) 
    return reduce(op, [decimal]*abs(integer), 1) 

power_function(3, 3) 
# 27 
+0

我只允許使用循環和條件。我不允許使用任何導入類型 – jnkim0715

+0

您也可以使用匿名函數執行此操作 - 無需導入。 – AChampion

+0

如何?你介意給我看源代碼嗎?我絕對是初學者......即使你告訴我該怎麼做,我也不能理解它,因爲我不知道很多東西。 – jnkim0715

1

我已經做了一些調整

def power_function (decimal, integer): 

    num = 1 

    for function in range (abs(integer)): 
     if integer > 0: 
      num *= decimal 

     if integer < 0: 
      num *= 1.0/decimal 

     if integer == 0: 
      num = 1 

    return num