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!