Seite 2 von 2

Re: neue Liste

Verfasst: Dienstag 10. Februar 2015, 17:21
von Hyperion
Und vor allem könntest Du Dir einen simplen Test schreiben, der das Vergleichen gegenüber der Erwartunsgmenge übernimmt:

Code: Alles auswählen

if __name__ == '__main__':
    erwartet = [7, 11, 7, 11, 9, 3, 9, 6, 11, 9, 7, 8, 12, 12, 4, 1]
    alle = [20, 33, 21, 32, 27, 7, 25, 16, 32, 27, 21, 22, 44, 55, 12, -1, 2]
    print(alle)
    ergebnis = list(filter(None,map(transform_number, alle)))
    print(ergebnis)
    assert(erwartet == ergebnis )
(ich weiß jetzt nicht, ob ich das richtige ``result`` kopiert habe!)

Eigentlich würde man sich dafür einen richtigen Unit Test schreiben, aber für den Anfang und dieses kleine Snippet geht's auch so - auf jeden Fall ist das besser, als gar nicht zu testen! :-)

Re: neue Liste

Verfasst: Dienstag 10. Februar 2015, 17:49
von garreth
snafu hat geschrieben:Dein neuer Code ist leider wieder falsch. Im Original soll bei einer 3 eine 1 ausgeliefert werden. Bei dir würde bei einer 3 (oder einer 6 oder einer 9 ...) eine 0 (bzw 1 bzw 2 ...) rauskommen. Erkennst du den Fehler? ;)

Du musst im Grunde gar nicht unterscheiden, ob bei einer Division durch 3 ein Rest rauskommt, sondern du musst die Zahl nur so "vorbereiten", dass die ganzzahlige Division das gewünschte Ergebnis liefert. Das kann man ja im Kopf mal anhand einiger Beispiele durchrechnen.
Diesen Fehler kann ich grad nicht reproduzieren. Ich hab das mal mit den beanstandeten Zahlen versucht Ausgabe ist sowohl in Python 2 als auch Python3 wie vorgesehen.

Aber ich hab mir das mal kurz durch den Kopf gehen lassen. Theoretisch könnte man dies auch so lösen:

Code: Alles auswählen

def transform_number(i):
    if i < 1:
        return 0
    elif i > 33:
        return 12
    else:
        return int((i-0.1)/3+1)

if __name__ == '__main__':
    alle = [20, 33, 21, 32, 27, 7, 25, 16, 32, 27, 21, 22, 44, 55, 12, -1, 2]
    erwartet = [7, 11, 7, 11, 9, 3, 9, 6, 11, 9, 7, 8, 12, 12, 4, 1]
    print(alle)
    alle = list(filter(None,map(transform_number, alle)))
    print(alle)
    print(alle == erwartet)
Würde allerdings nur mit Ganzzahlen funktionieren und die -0.1 ist magisch und meiner Meinung nach schlecht verständlich.

Danke an Hyperion für den Tip mit dem erwartet Vergleich, macht die Angelegenheit wesentlich einfacher!

Re: neue Liste

Verfasst: Mittwoch 11. Februar 2015, 09:39
von Hyperion
garreth hat geschrieben: Danke an Hyperion für den Tip mit dem erwartet Vergleich, macht die Angelegenheit wesentlich einfacher!
Danke mir vor allem für den Hinweis auf Unit Testing! Befasse Dich damit ruhig, auch wenn das außerhalb des eigentlichen Problems hier steht :-)

Re: neue Liste

Verfasst: Mittwoch 11. Februar 2015, 19:52
von garreth
Hyperion hat geschrieben:Danke mir vor allem für den Hinweis auf Unit Testing! Befasse Dich damit ruhig, auch wenn das außerhalb des eigentlichen Problems hier steht :-)
Auf jeden Fall, danke dir. Hatte das gestern rausgemacht, weil ich keine Ausgabe hatte. Heute konnte ich mich dann kurz einlesen und ja, wertvoller Tip!