Python FizzBuzz问题

-5 投票
11 回答
11296 浏览
提问于 2025-04-18 00:33

我收到一个用Python做的题目:

让用户输入一串数字,然后对这些数字进行FizzBuzz处理。

在遍历这个数字列表时,要记住以下规则:

  1. 如果这个数字能被3和5同时整除,就打印 FizzBuzz

  2. 如果只能被3整除,就打印 Fizz

  3. 如果只能被5整除,就打印 Buzz

  4. 否则就直接打印这个数字

还有,记得用elif哦!

我写了一个脚本,但在 n%3=True 这一行出错了。

n = input()
if n % 3 = True:
    print("Fizz")
else if n % 5 = True:
    print("Buzz")
elif print n

有人能帮帮我吗?非常感谢!

11 个回答

2

我找到的一个最简短的答案是

c=1
while c<101:print((c%3<1)*'Fizz'+(c%5<1)*'Buzz'or c);c+=1

总共61个字符

3

这是我用生成器实现的方法。解释部分我加了注释。

# the factors to check for, along with its
# associated text data.
FACTORS = {
    3 : "Fizz",
    5 : "Buzz",
}


def fizzbuzz(start, stop):
    """FizzBuzz printer"""
    for i in range(start, stop+1):
        string = ""  # build string

        # iterate through all factors
        for j, dat in FACTORS.items():
            # test for divisibility
            if i % j == 0:
                # add data to string if divisible
                string += dat

        if not string:
            # if string's length is 0, it means,
            # all the factors returned non-zero
            # modulus, so return only the number
            yield str(i)
        else:
            # factor had returned modulo as 0,
            # return the string
            yield string


if __name__ == "__main__":
    for each in fizzbuzz(1, 100):
        print(each)

这个版本的好处是它不需要依赖任何额外的条件检查。

4

n % 3(或者说n %任何数字)并不会得到TrueFalse,它不是一个布尔表达式。另一方面,n % 3 == 0则会得到这样的结果。

顺便问一下,当n % 3 == 0n % 5 == 0都为True时,会发生什么呢?

6

根据这个链接

FizzBuzz:对于从1到100的整数,如果这个整数能被3和5整除(也就是15),就打印“FizzBuzz”;如果能被3整除但不能被5整除,就打印“Fizz”;如果能被5整除但不能被3整除,就打印“Buzz”;否则就打印这个整数。

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调用中第一个非假值的项目,或者返回整数作为字符串。”

在检查一个值是否为True时,Python会把0当作False。如果i对15取余等于0,那就是False,我们就跳到下一个。

因此,我们对每个“取余”结果取反(也就是取反余数),这样如果余数等于0,也就是False,我们就能得到一个True的结果。我们把True乘以字典键,这样就能返回字典键的值(比如3*True == 3)。

当这个整数不能被3、5或15整除时,我们就会执行默认的操作,打印整数'{}'.format(i),这只是把i插入到字符串中 - 作为字符串。

一些输出示例:

Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

8

你的代码有几个问题。第一个问题是,在比较的时候,你应该用 ==,而不是 =,后者是用来给变量赋值的。

第二个问题是,你需要检查除法的余数(也就是模运算符计算的结果)是否为 ,而不是检查它是否为 true,这样说其实没有什么意义。

你应该用 elif 来表示“否则如果...”,用 else 来表示“否则”。另外,你还需要修正一下 else 语句的格式。

你想要的是:

n=input()
if n%3 == 0:
    print("Fizz")
elif n%5 == 0:
    print ("Buzz")
else:
    print n

最后,你的代码没有符合要求:

1) 如果这个数字能被3和5同时整除,就打印 "FizzBuzz"

上面的代码无法做到这一点。这个部分我就不帮你解决了,因为我不是来替你完成作业的 :)

撰写回答