Python Fizzbuzz循环问题

时间:2015-12-05 04:20:25

标签: python loops fizzbuzz

我已经搜索了大约一个小时的答案,似乎大多数人用不同的方式编写了fizzbuzz。

然而,我已经尝试了一切来弄清楚为什么这个简单的代码不起作用我会非常沮丧。

有人能指出我确定我遇到的简单问题吗?代码运行但它只返回值1。

def fizzbuzz(intList):
    for n in intList:
        if n % 3 == 0 and n % 5 == 0:
            return n.replace(str(n),"Fizzbuzz")
        elif n % 3 == 0:
            return n.replace(str(n),"Fizz")
        elif n % 5 == 0:
            return n.replace(str(n),"Buzz")
        else:
            return n

7 个答案:

答案 0 :(得分:1)

它看到的第一个值是1。由于1%x0 x 1,因此会转到else并返回1。然后就完成了,因为这就是return的作用。

这会导致更大的问题,即你开始循环然后保证只在一次迭代后就离开那个循环,因为每个分支都有一个return。您需要将这些return语句替换为append()list(不要忘记return生成的list)或{{ 1}}来电。

此外,如果你开始使用print()之类的东西,你的代码会尝试在整数上使用3,这不是你可以用整数做的事情。你会得到追溯。

答案 1 :(得分:1)

代码返回1,因为请考虑此列表[1,2,3,4,5,6,7,8,9,10]。所有三个条件都将获得false,而最后一个else将返回1。如果您想要答案,请将它们添加到列表中。

这样的事情:

def fizzbuzz(intList):
    temp = []
    for n in intList:
        if n % 3 == 0 and n % 5 == 0:
            temp.append("Fizzbuzz")
        elif n % 3 == 0:
            temp.append("Fizz")
        elif n % 5 == 0:
            temp.append("Buzz")
        else:
            temp.append(n)
    return temp


print fizzbuzz(range(1,20))

答案 2 :(得分:0)

也许如果你看一下这段代码,你会的 更好地了解你的。虽然这是完全的 Python3中fizzbuzz的不同实现

#!/usr/bin/python3

for i in range(1,100):
    msg = "Fizz" * bool(i%3==0)
    msg += "Buzz" * bool(i%5==0)
    if not msg:
        msg = i
    print(msg)

答案 3 :(得分:0)

我在python中的技能相当平均,但我喜欢使用dicitonaries。这是使用词典的Fizz Buzz程序。没有if。

for data in range(1, 101):
    msg = [str((data % 3 == 0)), str((data % 5 == 0))]
    // msg returns a list with ['True' ,'False'] depending on the condition
    conveter = {"True False": "Fizz",
                "False True": "Buzz",
                "True True": "Fizz Buzz",
                "False False": data
            }
    val = conveter[" ".join(msg)]
    print(val)

答案 4 :(得分:0)

我刚刚将FizzBu​​zz实现为

for n in range(1, 100):
    if n%15==0: print "FizzBuzz"
    elif n%5==0: print "Buzz"
    elif n%3==0: print "Fizz"
    else: print n

最好的事情

  • 有效

  • 它适用于推文

答案 5 :(得分:0)

多年以后,基于this ......

  

FizzBu​​zz:对于100以下的整数,如果整数可以被3和5整除,则打印FizzBu​​zz(15);如果它被3整除(而不是5)则会发出嘶嘶声;如果它可以被5整除(而不是3),则会发出嗡嗡声;否则为整数。

def FizzBuzz():
    for i in range(1,101):
        print {
            3 : "Fizz",
            5 : "Buzz",
            15 : "FizzBuzz"}.get(15*(not i%15) or
                                 5*(not i%5 ) or
                                 3*(not i%3 ), '{}'.format(i))

.get()方法在这里有效。

操作如下

对于1到100之间的所有整数(不包括101),
根据这些规则打印我们通过get调用的字典键的值。

“获取get调用中的第一个非False项,或将整数作为字符串返回。”

当检查True值时,我们可以查找一个值,Python将0评估为False。如果i mod 15 = 0,那就是False,我们将转到下一个。

因此我们NOT每个'mods'(又名余数),所以如果mod == 0,= = False,我们得到一个True语句。我们将True乘以返回字典键的字典键(即3*True == 3

当整数不能被3,5或15整除时,我们将落入打印int '{}'.format(i)的默认子句,只需将i插入到该字符串中 - 作为字符串。

部分输出

费兹
79个
巴兹
费兹
82个
83个
费兹
巴兹
86个
费兹
88个
89个
FizzBu​​zz
91个
92个
费兹
94个
巴兹
费兹
97个
98个
费兹
Buzz

答案 6 :(得分:0)

如果我们想在python解释器的交互模式中看到下一个结果,python函数应该是什么样子:

>>> fizz(15)
[ 1, 2, 'fizz', 4, 'buzz', 'fizz', 7, 8, 'fizz', 'buzz', 11, 'fizz', 13, 14, 'fizzbuzz' ]