Pek çok teknik mülakatta meşhur “FizzBuzz” sorusu soruluyor. Bilmeyenler için soru şu şekilde:
Write a short program that prints each number from 1 to 100 on a new line.
For each multiple of 3, print "Fizz" instead of the number.
For each multiple of 5, print "Buzz" instead of the number.
For numbers which are multiples of both 3 and 5, print "FizzBuzz" instead of the number.
Bu sorunun pek çok çözümü var ve ilk akla gelen şu şekilde:
for i in range(1, 101):
if i % 3 == 0 and i % 5 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
en basiti bu ancak kişisel düşüncem, bu kodun bakımı zor gibi görünüyor. Örneğin kullanıcı Fizz yerine Neet yazmak isterse ya da Buzz yerine Yeet yazmak isterse gidip bunu print eden yeri bulup değiştirmesi gerekiyor vs. vs. (evet kod çok kısa ve değiştirmesi zor değil fakat büyük projelerde bu tip küçük şeyler sorun çıkarabiliyor), ya da belki de kullanıcı ekstra bir sayı eklemek istiyor, örneğin sayı 7’ye bölünebiliyorsa “Beep” yazmasını istiyor. bunu gidip yine if ile belirtmemiz gerekecek. Aklıma gelen sorunlar bunlar olduğundan şöyle bir kod hazırladım:
CONDITIONS = {
3: "Fizz",
5: "Buzz",
}
for i in range(1, 101):
s = ""
for k in CONDITIONS.keys():
if i % k == 0:
s += CONDITIONS[k]
print(i) if s == "" else print(s)
bu şekilde CONDITIONS içerisinden istediğimiz şeyi değiştirebilir hale getirdim. Hatalarım olabilir, daha iyi yapılabilir, konuyu açma sebebim de bu aslında. Sizlerin de fikrini merak ediyorum. Nasıl daha iyi bir FizzBuzz kodu yazabiliriz?