Lägga in assert statements i en funktion. Förstår inte uppgiften.
Hej! Jag skulle behöva hjälp med en programmeringsuppgift som jag har. Jag är typ helt ny när det gäller programmering.
Först ska man skriva en funktion som beräknar den kumulativ summan av en lista. Det har jag gjort, även fast det säkert finns mycket bättre sätt att göra det på än vad jag har gjort.
Uppgiften:
Min kod än så länge:
Sedan ska man implementera kontroller och felhantering så att funktionen klarar några tester och på det steget fastnar jag.
Jag förstår inte hur jag ska tolka testerna riktigt eller hur jag ska skriva koden för dem.
När det gäller det första testet tolkar jag det som att om man skriver in en tom lista som argument ska man få ut en tom lista.
Men det gör min kod redan utan något assert. Så jag förstår liksom inte vad mer jag ska lägga till.
Och när jag lägger till den kontrollen (i koden har jag kommenterat ut den) däremot får jag felmeddelandet "maxium recursion depth exceeded"....skipping similar frames. cumulative_sum([]) at line 8 (2974 times)." Förstår inte alls hur det går till?
När det gäller det andra testet så undrar jag om man kan tolka det såhär: om man skriver in en lista med en string, ett slumpmässigt nummer mellan 0 och 99 och en till string som argument, så ska funktionen ge tillbaka "None"?
När det gäller den tredje kontrollen är jag ännu mer förvirrad.
Om man skriver in en lista som i sin tur innehåller tre listor, två med en string och en med tre nummer, ska man få tillbaka en lista enligt texten. Det blir ju ingen kumulativ summa alls?
stort tack på förhand.
Hej,
För det första, bilder på kod är svåra att jobba med. Klicka på {;}-knappen, välj lämpligt språk och klistra in koden som text.
Du ska inte skriva några asserts i din funktion. De asserts som finns i uppgiften är tester som din kod ska klara av. Kopiera dem rakt av och justera din funktion tills den klarar alla testerna. Här är ett enkelt exempel:
def add(a, b):
return a + b
assert add(1, 1) == 2
assert add(4, -7) == -3
Där har vi två tester för att försäkra oss om att add() fungerar som den ska. Du har fått tre tester för att försäkra dig om att cumulative_sum() fungerar som den ska.
Du får maximum recursion depth (gateway drug till stack overflow) för att du lagt din assert i din funktion. Då anropar den sig själv om och om igen, utan att bli klar mellan anropen. Dina asserts ska inte ligga i funktionen.
Du har förstått andra testet rätt. Jag återkommer när jag själv begripit vad de vill att du ska göra med strings i det tredje. Finns det mer uppgiftsbeskrivning än du visat?
För övrigt tycker jag testerna är otillräckliga. De testar bara konstiga gränsfall och inte funktionens syfte. Jag hade lagt till ett test baserat på beskrivningen:
assert cumulative_sum([[1.0, 2.0, 3.0], [1.0, 1.0, 1.0]]) == [1.0, 3.0, 6.0, 7.0, 8.0, 9.0]
Hej!
Tusen tack för svar.
Då vet jag för det första nu hur man kopierar kod. jag har dock inte kunnat logga in på pluggakuten via datorn på åratal, skulle det funka att kopiera texten och skicka till mobilen på något sätt?
Då förstår jag uppgiften bättre, assertsen ska inte ligga inne i funktionen och man ska alltså bara kopiera dem rakt av och modifiera funktionen tills de klarar dom. Vad snällt att du återkommer när du förstår vad de menar med test 3.
Nej, det finns ingen mer uppgiftsbeskrivning tyvärr. Det finns en till deluppgift men den ska man göra först när man gjort den här första deluppgiften.
Stort tack för hjälpen!
Nu när jag klistrar in den första assertionen utanför funktionen får jag AssertionError, fastän jag vet att när jag skriver in en tom lista får jag ut en tom lista för att jag har prövat det flera gånger.
Felmeddelandet är "deprecationWarning: the truth value of an empty array is ambiguous. Returning false, but in the future this will result in an error. Use array.size>0 to check that an array is not empty."
Saken är den att när jag googlar på felmeddelandet på "Stack Overflow" så får jag fram att det är en bugg och att det inte är något att bry sig om. Det gör mig väldigt osäker eftersom funktionen ska klara alla tester. Vet du om det är en bugg eller om det är något man ska bry sig om?
Ja, det var ju otrevligt att behöva tampas med. Du kan göra så här för att det ska vara ett likvärdigt test utan att den klagar:
test_result = cumulative_sum([])
assert isinstance(test_result, np.ndarray) # bekräfta att vi fått ett numpy array
assert test_result.size == 0 # bekräfta att det är tomt
Tusen tack.