2017-03-18 9 views
0

私の指示は以下の通りです:偽のテストに失敗しました。瑕疵が見つからない

xとyが整数のときは、zの値に興味があります。 xとyの最小値と最大値を指定するパラメータを取る関数poly2max(a, b, c d)を書く。これらの範囲から選択された任意のxとyについて、zが取る最大値を返します。たとえば、poly2max(0,5,3,7)を評価すると、3から7までのyの値(3と7の両方を含む)を使用して、この多項式関数の最大値を見つけるためにxの値0から5(0と5の両方を含む)を検索します。

私のコードはすべての公開テストとほぼすべての隠しテストに合格していますが、1つでは、欠陥は見つかりません。ここで

は私のコードです:

def poly2max (a, b, c, d): 

results = [] 

for x in range(a, b): 
    for y in range (c, d): 

     z = (-x**4 + 3*x**2 - y**4 + 5*y**2) 
     results.append(z) 

if a == b: 
    if c == d: 
     x = a 
     y = c 
     z = (-x**4 + 3*x**2 - y**4 + 5*y**2) 
    return z 

if (a, b, c, d) == (0, 0, 0, 0): 
    return 0 

if a == b: 
    for y in range (c, d): 
     x = a 
     z = (-x**4 + 3*x**2 - y**4 + 5*y**2) 
     results.append(z) 
    return max(results) 

if c == d: 
    for x in range(a, b): 
     y = c 
     z = (-x**4 + 3*x**2 - y**4 + 5*y**2) 
     results.append(z) 
    return max(results) 

else: 
    return max(results) 
+0

'range(a、b)'はaからbまでの間に入ります。根本原因を修正するのではなく、この問題を回避するためのテストに合格するための特別なケースがたくさんあるようです(問題には包括的な範囲が必要です)。 –

答えて

2

あなたはAとBの両方を含むからBへのすべての値をしたい場合は、範囲(A、B + 1)を使用する必要があります。

また、コードは必要以上に複雑です。これはそれを行う必要があります:私はここで見ることができます

def poly2max (a, b, c, d): 
    results = [] 
    for x in range(a, b+1): 
     for y in range (c, d+1): 
      z = (-x**4 + 3*x**2 - y**4 + 5*y**2) 
      results.append(z) 
    return max(results) 

唯一の問題は<またはd < C bの場合であるが、あなたがそうではないのですが保証されているようで、しかも、それが中でそれをチェックするのは簡単です始まり。

+0

ありがとう!ありがとうございました!これは非常に意味があります。 –

関連する問題