Schreiben Sie eine Funktion namens FooBar, die die Eingabe-Ganzzahl n verwendet und alle Zahlen von 1 bis n in einer neuen Zeile druckt. Wenn die Zahl durch 3 teilbar ist, drucken Sie "Foo", wenn die Zahl durch 5 teilbar ist, drucken Sie "Bar" und wenn die Zahl durch 3 und 5 teilbar ist, drucken Sie "FooBar". Ansonsten einfach die Nummer ausdrucken.

for example FooBar(15) should print as follows: 
1 
2 
Foo 
4 
Bar 
Foo 
7 
8 
Foo 
Bar 
11 
Foo 
13 
14 
FooBar 

Es ist einfach, aber das Interview sucht nach einem besseren Algorithmus.

Das erste, was mir in den Sinn kam, war:

for i in xrange(1,101): print [i,'Fizz','Buzz','FizzBuzz'][(i%3==0)+2*(i%5==0)]

Bitte schlagen Sie vor, ob Sie andere Lösungsmöglichkeiten haben.

-1
James 10 Dez. 2013 im 08:39

5 Antworten

Beste Antwort

Nur eine andere Lösung, hoffe, dass es einem Körper gefällt.

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)
1
user3058156user3058156 10 Dez. 2013 im 11:16

Wenn eine Zahl 0 mod 3 und 0 mod 5 ist, ist sie 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)
1
AaronB 10 Dez. 2013 im 04:44
>>> 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
1
John La Rooy 10 Dez. 2013 im 04:54
>>> 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
1
John La Rooy 10 Dez. 2013 im 05:17
def foobar(n):
    for x in range(n):
        print x%3/2 * 'Foo' + x%5/4 * 'Bar' or x+1
5
Kyle Neary 10 Dez. 2013 im 04:49