2017-12-24 9 views
-1

数字aは、bで割り切れ、a/bはbのべき乗である場合、bのべき乗です。パラメータaとbをとり、aがbのべき乗であればTrueを返すis_powerという関数を書く。注:基本ケースについて考える必要があります。それが解決策だと私はこのコードの平和を見つけ :Pythonのエクササイズを考える6.4

def is_power(a,b): 
    if (a % b == 0): 
     return True 
     if (a/b == 1): 
      return True 
     else: 
      (is_power (a/b, b)) 
    else: 
     return False 

しかし、私はいくつかの行は必要ありませんね。

def is_power(a,b): 
    if (a % b == 0): 
     return True 
    else: 
     return False 
  1. 余分な行の存在の理由は何ですか:ここでは私自身のコードはありますか?
  2. is_power(2.25,1.5)などの浮動小数点数の両方のコードは機能しません。どちらもFalseを返します。

答えて

1

2番目のコードが正しくない場合は、6と2の例を取ります。関数はtrueを返しますが、6は2の累乗ではありません。第例えば

def is_power(a, b): 
    while a % b == 0: 
     if a == b: return True 
     a /= b 
    return False 

print(is_power(6, 2)) 
print(is_power(8, 2)) 

二倍に等しい場合と比較すると、通常、所与のEPS = 0.0000001 == B => ABS( - b)のような所定の大きさになされる< EPS。

+0

['math.isclose'](https://docs.python.org/3/library/math.html#math.isclose)を使用して、特定のエラーマージン内で比較することができます。 – Norrius

0

@ mehdiあなたの正解に感謝します。ここで私が探していたあなたの答えの助けを借りて、再帰的なバージョンです。

def is_power2(a, b): 
if a % b == 0 : 
    if a == b: 
     return True 
    else: 
     return is_power(a/b, b) 
return False 
+0

このコードのインデントが間違っています。 – usr2564301