Python 可分性测试算法
编写一个名为FooBar的函数,该函数接受输入整数n,并在新行中打印从1到n的所有数字。如果数字可被3整除,则打印“Foo”;如果数字可被5整除,则打印“Bar”;如果数字可被3和5整除,则打印“FooBar”。否则只需打印号码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 这很容易,但面试是为了寻找更好的算法 我
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)