Nachdem ich map (), redu (), filter () und Recurrence geübt hatte, schrieb ich FizzBuzz mit map (), redu (), filter () und Rekursion.
Zuerst habe ich eine Fizzbuzz (n) -Funktion gemacht.
def fizzbuzz(n):
if (n % 15) == 0:
return "FizzBuzz"
elif (n % 3) == 0:
return "Fizz"
elif (n % 5) == 0:
return "Buzz"
else:
return str(n)
map ruft einfach die obige Funktion auf.
for s in map(fizzbuzz,range(1,101)):
print s
Für redu () habe ich eine mrg-Funktion erstellt.
def mrg(msg,n):
msg = str(msg)
if msg == '0':
return str(fizzbuzz(n))
else:
return msg + '\n' + str(fizzbuzz(n))
print reduce(mrg,range(0,101))
Über filter () habe ich es ganz gewaltsam geschrieben. Ich frage mich, ob es einen guten Weg gibt, es zu schreiben.
ls = range(1,101)
msg = range(1,101)
for i in filter(lambda x: (x%3)==0,ls):
msg[i-1] = "Fizz"
for i in filter(lambda x: (x%5)==0,ls):
if msg[i-1] == "Fizz":
msg[i-1] += "Buzz"
else:
msg[i-1] = "Buzz"
for s in msg:
print s
Und rekursiv. Das sieht am einfachsten aus, weil es kein für gibt.
START = 1
FINISH = 100
def fzbz(n):
if n == FINISH:
return fizzbuzz(n)
else:
return fizzbuzz(n)+"\n"+fzbz(n+1)
print fzbz(START)