Warum könnte dieser Code eventuell einen Testfall ausfallen?

Ich begann eine ziemlich einfache Google foobar Übung und haben 24 Stunden übrig, um es zu beenden. Also habe ich buchstäblich gerade angefangen, Python zu kodieren, während ich es lerne und ich bekam 4/5 ihrer Testfälle zu passieren. Ich sitze vor meinem Computer den ganzen Tag und ich gehe komplettes NUTS darüber, warum mein Code nicht einen ihrer Testfälle passieren wird. Wenn du weißt, wie man das an die Arbeit bringt, bitte helft mir raus; Alternativ, wenn Sie kommen können mit jedem Test Fälle, die Fall würde mein Code, um die falsche Ausgabe, bitte sagen Sie mir, so kann ich den Code korrigieren – das könnte nur sein, was ist die Auslösung eines der Google-Tests. Leider bekomme ich nicht zu sehen, was der Testfall ist, denn wenn ich meinen Code hier ist was ich bekomme:

foobar:~/power_hungry user$ verify solution.py Verifying solution... Test 1 passed! Test 2 passed! Test 3 passed! Test 4 failed. Test 5 passed! 

Aber hier ist es prompt können Sie sehen, was gewünscht wird:

POWER HUNGRY

Kommandant Lambdas Raumstation ist riesig. Und riesige Raumstationen nehmen viel Kraft. Riesige Raumstationen mit Doomsday-Geräten nehmen noch mehr Power. Um den Strombedürfnissen der Station gerecht zu werden, hat Commander Lambda Sonnenkollektoren auf der Außenfläche der Station installiert. Aber die Station sitzt in der Mitte eines Quasar-Quantenflussfeldes, das auf den Sonnenkollektoren verheerend ist. Sie und Ihr Team von Schergen wurde beauftragt, die Sonnenkollektoren zu reparieren, aber man kann sie nicht alle gleich nehmen, ohne die Raumstation herunterzusetzen (und all diese lästigen Lebensunterstützungssysteme!). Sie müssen herausfinden, welche Sätze von Panels in einem beliebigen Array können Sie offline zu reparieren, während immer noch die maximale Menge an Leistung pro Array beibehalten, und zu tun, dass Sie müssen zuerst herausfinden, was die maximale Ausgabe von jedem Array ist eigentlich. Schreiben Sie eine Funktionsantwort (xs), die eine Liste von Ganzzahlen aufnimmt, die die Leistungsausgabepegel jedes Panels in einem Array darstellen, und gibt das maximale Produkt einer nicht leeren Teilmenge dieser Zahlen zurück. Wenn also ein Array mit Leistungsausgangsebenen von [2, -3, 1, 0, -5] enthalten wäre, dann würde das maximale Produkt gefunden, indem man die Teilmenge nimmt: xs [0] = 2, xs [1 ] = -3, xs [4] = -5, wobei das Produkt 2 (-3) (- 5) = 30. Also Antwort ([2, -3,1,0, -5]) wird "30" . Jedes Array von Sonnenkollektoren enthält mindestens 1 und nicht mehr als 50 Tafeln, und jedes Panel hat einen Leistungsausgang, dessen absoluter Wert nicht größer als 1000 ist (einige Panels sind so schlecht, dass sie Energie ablassen, aber Sie wissen Ein Trick mit dem Panels-Wellenstabilisator, mit dem Sie zwei Negativ-Ausgangspanels kombinieren können, um die positive Leistung des Vielfachen ihrer Leistungswerte zu erzeugen). Die Endprodukte können sehr groß sein, also geben Sie die Antwort als String-Darstellung der Zahl.

Eingänge: (int Liste) xs = [2, 0, 2, 2, 0] Ausgang: (String) " 8 "

Eingänge: (int Liste) xs = [-2, -3, 4, -5] Ausgang: (String) " 60 "

Und dann ist hier mein Code (es geht schon an, was sie in ihren obigen Beispielen haben):

 import operator def answer(xs): legitVals = [] negVals = [] theSolution = 999 if len(xs) == 1 and xs[0] == 0: theSolution = 0 else: for index, value in enumerate(xs): if xs[index] > 0: legitVals.append(value) if xs[index] < 0: negVals.append(value) print (legitVals) print (negVals) print (xs) negValsLength = len(negVals) legitValsLength = len(legitVals) if (legitValsLength > 0) and (negValsLength > 1): if negValsLength % 2 != 0: del negVals[negVals.index(max([n for n in xs if n < 0]))] theSolution = reduce(operator.mul, legitVals + negVals) elif negValsLength > 1: if negValsLength % 2 != 0: del negVals[negVals.index(max([n for n in xs if n < 0]))] theSolution = reduce(operator.mul, negVals) elif legitValsLength > 0: theSolution = reduce(operator.mul, legitVals) else: theSolution = 0 return str(theSolution) 

Print-Anweisungen sind nur im Code vorhanden, um mir zu helfen, zu sehen, was los ist, wenn es läuft

2 Solutions collect form web for “Warum könnte dieser Code eventuell einen Testfall ausfallen?”

Redditor / u / CordsOfCrows zeigte mir in meiner Reddit Post, dass mein Verständnis der Aufforderung fehlerhaft war. Für jedermann, der in dieses Problem in Zukunft laufen kann, wenn eine Liste mit einem signle negativen Wert gegeben wird, geben Sie diesen negativen Wert und nicht Null, wie ich aber war, wie es getan werden sollte. Der Code funktioniert wie beabsichtigt – es löst nur ein etwas anderes Problem.

Hier ist der Code für die Übung:

 import operator def answer(xs): legitVals = [] negVals = [] theSolution = 999 if len(xs) == 1 and xs[0] == 0: theSolution = 0 else: for index, value in enumerate(xs): if xs[index] > 0: legitVals.append(value) if xs[index] < 0: negVals.append(value) negValsLength = len(negVals) legitValsLength = len(legitVals) if negValsLength == 1: if legitValsLength >0: theSolution = reduce(operator.mul, legitVals) else: theSolution=negVals[0] else: if (legitValsLength > 0) and (negValsLength > 1): if negValsLength % 2 != 0: del negVals[negVals.index(max([n for n in xs if n < 0]))] theSolution = reduce(operator.mul, legitVals + negVals) elif negValsLength > 1: if negValsLength % 2 != 0: del negVals[negVals.index(max([n for n in xs if n < 0]))] theSolution = reduce(operator.mul, negVals) elif legitValsLength > 0: theSolution = reduce(operator.mul, legitVals) else: theSolution = 0 print (legitVals) print (negVals) print (xs) return str(theSolution) print(answer(xs=[0,-1000,0,2,0,-2])) #this is just a test case 
 def answer(xs): pos=[x for x in xs if x>0] neg=[x for x in xs if x<0] p=len(pos) n=len(neg) if(p==0 and n==0) or (p==0 and n==1): return str(xs[0]) elif(p==0): if(n%2==0): pass else: neg.remove(max(neg)) return str(reduce(lambda a,b:a*b,neg)) elif(n==0 or n==1): return str(reduce(lambda a,b:a*b,pos)) else: if(n%2==0): pass else: neg.remove(max(neg)) return str(reduce(lambda a,b:a*b,pos)*reduce(lambda a,b:a*b,neg)) 

Es hat alle Testfälle bestanden. Denn wenn das Array nur eine Zahl enthält, die negativ ist nein. Dann sollte der Rückgabewert die negative Zahl sein.

  • Mit selbst in python @ patch dekorateur
  • Wie man Argumente an ein UnitTest ohne globale Variablen sendet
  • Wie kann man die Verbosität in python unittest erhöhen?
  • Prüfen Sie, ob eine Funktion eine Warnung mit Nasentests auslöst
  • Eine Liste aller Module im aktuellen Paket erhalten
  • Wie man Firefox-Profil mit Selen umschaltet - ohne einen neuen Treiber zu benennen?
  • Wie benutzt man ein Befehlszeilenargument in unittest?
  • Verwalten von Protokollen / Warnungen in Python-Erweiterungen
  • Python ist die beste Programmiersprache der Welt.