编写一个名为FooBar的函数,它接受输入整数n并在新行中打印从1到n的所有数字。如果数字可被3整除,则打印“Foo”,如果数字可被5整除,则打印“Bar”,如果数字可被3和5整除,则打印“FooBar”。否则只需打印该号码。
for example FooBar(15) should print as follows:
1
2
Foo
4
Bar
Foo
7
8
Foo
Bar
11
Foo
13
14
FooBar
很容易,但面试正在检查更好的算法。
首先我想到的是:
for i in xrange(1,101): print [i,'Fizz','Buzz','FizzBuzz'][(i%3==0)+2*(i%5==0)]
如果您有任何其他解决方法,请建议。
答案 0 :(得分:5)
def foobar(n):
for x in range(n):
print x%3/2 * 'Foo' + x%5/4 * 'Bar' or x+1
答案 1 :(得分:1)
如果一个数字是0 mod 3和0 mod 5,则它是0 mod 15.
def foobar(n):
for i in range(1,n+1):
ret = ""
if i%3==0:
ret += 'Foo'
if i%5==0:
ret += 'Bar'
if(ret):
print ret
else:
print i
foobar(100)
答案 2 :(得分:1)
>>> D = {3:"Foo", 5:"Bar", 6:"Foo", 9:"Foo", 10:"Bar", 12:"Foo", 0:"FooBar"}
>>> for i in range(1, 16):
... print D.get(i%15, i)
...
1
2
Foo
4
Bar
Foo
7
8
Foo
Bar
11
Foo
13
14
FooBar
答案 3 :(得分:1)
>>> foobar = "FooBar Foo Bar Foo Foo Bar Foo ".split(" ")
>>> for i in range(1, 16):
... print foobar[i%15] or i
...
1
2
Foo
4
Bar
Foo
7
8
Foo
Bar
11
Foo
13
14
FooBar
答案 4 :(得分:1)
只是另一种解决方案,希望有些人可能喜欢它。
values = ((3, "Foo"), (5, "Bar"))
for n in range(1, 101):
res = ''.join(v for (k, v) in values if not n % k)
print(res if res else n)