-5

我在 Python 中得到了这个问题:

从用户那里获取一个数字列表并在该列表上运行 FizzBu​​zz。

当您遍历列表时,请记住以下规则:

1) 如果数字可以被 3 和 5 整除,则打印FizzBuzz

2)如果它只能被 3 打印整除Fizz

3) 如果它只能被 5 整除Buzz

4)否则只打印数字

还要记住elif!

我创建了以下脚本,但它给了我一个错误 ifn%3=True

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

任何人都可以帮忙吗?非常感谢!

4

11 回答 11

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 整除,则打印“FizzBu​​zz”

上面不会这样做。这部分我将留给你,因为我不是来为你解决任务的:)

于 2014-03-30T12:13:01.637 回答
5

基于

FizzBu​​zz:对于不超过 100 的整数,如果整数可以被 3 和 5 (15) 整除,则打印 FizzBu​​zz;如果它可以被 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 调用的字典键的值。

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

在检查一个True值时,即我们可以查找的值时,Python 将 0 评估为False. 如果 i mod 15 = 0,则为 False,我们将转到下一个。

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

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

一些输出

嘶嘶声
79
嘶嘶

82嘶嘶声
83
嘶嘶

86
嘶嘶声
88
89
嘶嘶声
91
92
嘶嘶声
94
嘶嘶

97
98
嘶嘶

于 2016-05-18T05:29:49.807 回答
4

n % 3(或n %任何数字)不会计算为Trueor False,它不是布尔表达式。 n % 3 == 0另一方面,确实如此。

顺便说一句,当n % 3 == 0n % 5 == 0都评估为时会发生什么True

于 2014-03-30T12:14:44.457 回答
2

我发现的最短答案之一是

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

61 个字符

于 2020-02-05T22:05:00.617 回答
2

这是我使用生成器的方法。解释作为注释添加。

# 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)

此版本的优点是不依赖于任何额外的因素检查。

于 2020-05-19T08:55:48.473 回答
1
def check(num):
    finalWord = ''
    for k,v in numWordDict.items():
        if num % k == 0:
            finalWord += v

    if not finalWord:
        return num
    else: 
        return finalWord

def FizzLoop(start=0, stop=10, step=1):
    for i in range(start, stop, step):
        print(check(i))


numWordDict = {3:'fizz', 6:'buzz', 5:'fiver'}

FizzLoop(0, 10)
print("----------")
FizzLoop(0, 50, 5)
于 2019-12-28T23:16:40.480 回答
1

使其适用于任何整数,无论​​是正数还是负数。通过创建关键字字典,还可以轻松地将其扩展到任何整数的其他关键字。

def checkdict(divdict, i):
    out = ""
    for key in divdict:
        if key != 0:
            if i%key==0:
                out+=divdict[key]
        if key == 0 and i == 0:
                out+=divdict[key]
    if out == "":
        out = i
    print(out)

if __name__ == "__main__":
    mydict = {3:"Fizz",5:"Buzz"}
    for i in range(-50,50):
        checkdict(mydict, i)
于 2019-03-13T12:29:08.243 回答
1

没什么花哨的,使用 while 循环来实现相同的结果:

x,xx = 1,100
xy,xz = 3,5
mylist = []

while x <= xx:
    y = (x/xy).is_integer()
    z = (x/xz).is_integer()

    if y and z:
        mylist.append("fizzbuzz")
    elif y:
        mylist.append("fizz")
    elif z:
        mylist.append("buzz")
    else:
        mylist.append(x)
    x+=1

print(mylist)
于 2021-07-03T15:53:25.570 回答
1
Numbers = [3, 5]
Labels = ["Fizz", "Buzz"] 

for i in range(1, 101):
    Output ="" 
    for j in range (len(Numbers) ) : 
        if i % Numbers[j] == 0:
            Output = Output + Labels[j]     
              
        if Output =="" :                           
             print(i) 
        else:
             print(Output)
于 2020-07-24T10:47:38.430 回答
0

请在下面找到 1 行代码(列表理解)代码。希望这很容易理解。如果不是,请告诉我。我会详细说明。

N = 10 #user_input
print(list(map(lambda n: "Fizz" if (n % 3 == 0) else ( "Buzz" if (n % 5 == 0) else n),[i for i in range(1,N+1)])))
于 2021-08-31T13:47:58.273 回答
0
def fizz_buzz(input):
  if (input % 3 == 0) and (input % 5 == 0):
     return "FizzBuzz"
  if input % 3 == 0:
     return "Fizz"
  if input % 5 == 0:
     return "Buzz"
  return input


print(fizz_buzz(15))
于 2021-11-01T19:02:24.387 回答