Python 可分性测试算法

Python 可分性测试算法,python,algorithm,math,Python,Algorithm,Math,编写一个名为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 这很容易,但面试是为了寻找更好的算法 我

编写一个名为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 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)

这只是另一个解决方案,希望有人会喜欢

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)

你说的“更好”是什么意思?作业规定了三个条件。通过巧妙的编程,您可能可以将其简化为两个,但巧妙并不一定更好。如果你想彻底解决这个问题,你可以在谷歌上搜索“fizzbuzz”;它基本上是相同的算法。更常见的是。哦,谢谢。让我检查一下。与其使用
divmod(i,5)[1]
来查找模,不如使用Python的模运算符
%
这样做更简单:
i%5
刚发现这个站点有很好的信息,这很好,我喜欢。对于Python3使用
打印(x%3//2*'Foo'+x%5//4*'Bar'或x+1)
Foo正在2点打印?@yopy,您需要重新加载吗?当我最初发布它时,这是一个错误
>>> 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
>>> 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
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)