3 ms·
This can be edited down to six lines with a simple trick: a Python string multiplied by True will return itself, and multiplied by False will return the empty s
by sowhatquestion 14y ago
This can be edited down to six lines with a simple trick: a Python string multiplied by True will return itself, and multiplied by False will return the empty string.
for i in range(110):
pr = ""
pr += "Fizz" * (i%3 == 0)
pr += "Buzz" * (i%5 == 0)
pr += "Bazz" * (i%7 == 0)
print (pr if pr else i)
I iterated over range(110) to show that it handles the "FizzBuzzBazz" case correctly.
EDIT: Or we could use lambdas as OP's Ruby code did; this might be more maintainable...
cases = [
lambda n: "Fizz" * (n%3 == 0),
lambda n: "Buzz" * (n%5 == 0),
lambda n: "Bazz" * (n%7 == 0) ]
for i in range(110):
pr = ""
for case in cases:
pr += case(i)
print (pr if pr else i)
That's nine nonblank lines.
- koblas 14y agoJust for fun, another variant - separating logic from data and trying to be pretty stock python. cases = [(3, "Fizz"), (5, "Buzz"), (7, "Bazz")] for i in range(110): pr = ''.join([v[1] * (i % v[0] == 0) for v in cases]) print pr or i
- deadmansshoes 14y agoIt should be possible in a single line of Python.. pip install fizzbuzz And then: import fizzbuzz print fizzbuzz.fizzbuzz() Or for the second solution: print fizzbuzz.fizzbuzzbazz()
- jonp 14y agoA tweetable (140 character) single line of Python: print '\n'.join((lambda x:(''.join(x) if x else str(i)))([w+'zz' for (n,w) in ((3,'Fi'),(5,'Bu'),(7,'Ba')) if i%n==0]) for i in range(1,100))