FizzBuzz

Eigentlich sollte man denken, ist folgende Aufgabe nicht so schwer. Ich bin allerdings doch gescheitert. Schließlich wird die FizzBuzz Aufgabe oft bei Einstellungsgesprächen gestellt.

Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.

Also zähle von 1 bis 100 hoch und teile die Zahl eben immer durch 3 = Fizz, durch 5 = Buzz und durch beides = FizzBuzz. Ansonsten gebe die Zahl korrekt aus.

Meine erste Rangehenweise war folgendermaßen:

i=1
for x in range(1, 100):
    if i/3:
        print "Fizz"
    if i/5:
        print "Buzz"
    if i/3 and i/5:
        print "FizzBuzz"
    else:
        print i
    i=i+1

Doch damit war schon einiges falsch:
1. Die Untersuchung auf FizzBuzz muss an aller erster Stelle kommen.
2. Für If Abfragen sollte das Ergebnis immer 0 sein, dass ist bei i/3 nicht unbedingt gegeben.

Letztendlich hat es dann geholfen die Reihenfolge zu ändern und darauf zu achten, dass ich eher Modulo (%) statt (/) verwende und das Ergebnis immer mit 0 zu deklarieren.
Also so:

for x in range(1, 101):
    if x % 3 == 0 and x % 5 == 0:
        print "FizzBuzz"
    elif x % 3 == 0:
        print "Fizz"
    elif x % 5 == 0:
        print "Buzz"
    else:
        print x

Das „i = 1“ und die Hochzählerei „i = i + 1“ kann man sich auch sparen, wenn man einfach die For Zählvariable nimmt. Diese wird bei jedem Schleifendurchlauf von alleine hochgezählt. Hätte ich bei VB.NET wohl auch gleich gemacht. Die Elif Passagen sind eigentlich auch logisch, hatte ich früher aber nicht so oft genutzt. :)
Gefunden habe ich diesen Lösungansatz bei Stackexchange

Eigentlich ist es ja alles gar nicht so schwer. Man muss nur die Eigenheiten der Sprache kennen und ein bisschen mathematisches Verständnis mitbringen.
Python habe ich bis vor einer halben Stunde noch gar nicht geschrieben, daher sind die fehlenden Eigenschaften verschmerzbar.

Natürlich kann man auch alles noch komprimieren, aber darum ging es mir hier nicht. Ich möchte den Code ja auch noch nachvollziehen können. :)

Über den Autor dieses Artikels: Tobi

Blogger aus Spaß an der Freude, Musikfan, Hauptfeuerwehrmann, Christ und Pfadfinder. Die Beiträge sind meine persönliche Meinung. Oftmals ist auch versteckte Ironie oder Satire dabei. Wer damit nicht umgehen kann, sollte diese Seite verlassen und sich in seinem Loch einbuddeln.

1 Antwort zu “FizzBuzz”

  1. Lupe Battle sagt:

    fizzbuzz() -> F = fun(N) when N rem 15 == 0 -> „FizzBuzz“; (N) when N rem 3 == 0 -> „Fizz“; (N) when N rem 5 == 0 -> „Buzz“; (N) -> integer_to_list(N) end, [F(N) „n“ || N <- lists :seq(1,100)].

Trackbacks/Pingbacks