python 中 FizzBu​​zz 测试的正确输出是什么?

What is the correct output for the FizzBuzz test in python?

我最近开始 python 并尝试了 FizzBu​​zz 测试。我想到了这个:

count = 0
while count <= 100:
  if (count % 3) == 0:
    print "Fizz"
    count = count + 1
  elif (count % 5) == 0:
    print "Buzz"
    count = count + 1
  elif (count % 5) and (count % 3):
    print "FizzBuzz"
    count = count + 1
  else:
    print count
    count = count + 1

它不输出任何数字:

Fizz
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
Buzz
Fizz
FizzBuzz
FizzBuzz
Fizz
Buzz
FizzBuzz
Fizz
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
Buzz
Fizz
FizzBuzz
FizzBuzz
Fizz
Buzz
FizzBuzz
Fizz
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
Buzz
Fizz
FizzBuzz
FizzBuzz
Fizz
Buzz
FizzBuzz
Fizz
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
Buzz
Fizz
FizzBuzz
FizzBuzz
Fizz
Buzz
FizzBuzz
Fizz
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
Buzz
Fizz
FizzBuzz
FizzBuzz
Fizz
Buzz
FizzBuzz
Fizz
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
Buzz
Fizz
FizzBuzz
FizzBuzz
Fizz
Buzz
FizzBuzz
Fizz
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
Buzz
Fizz
FizzBuzz
FizzBuzz
Fizz
Buzz

这不是正确的输出。我怎样才能清理程序?

想想这些语句出现的顺序,

elif (count % 5) and (count % 3):

这行代码永远不会执行,因为

if (count % 3) == 0:

elif (count % 5) == 0:

如果这些条件为真,将首先执行。在这个 如果您想检查 both 这些条件是否为真, 只有这样你才应该检查单个条件是否为真。

另外,代码行

count = count + 1

出现在你代码的每个分支中,考虑把它放在某个地方 每次执行的地方。

但是我会选择使用 for 循环而不是 while 循环,

for x in range(100):

这消除了对额外计数变量的需要。

另一件需要注意的事情

elif (count % 5) and (count % 3):

在这里,您不是在检查数字 % 5 是否 == 0,您只是在检查 (count % 5)。因此,如果计数 not 可以被 5 整除,则表达式 "if (count % 5)" 的结果为 True(查看真值测试)。对于您省略 == comparator

的其他地方也是如此

这是一个与您的方法类似的示例。

for count in range(1, 101):
    if count % 5 == 0 and count % 3 == 0:
        print "FizzBuzz"
    elif count % 5 == 0:
        print "Buzz"
    elif count % 3 == 0 and count % 5 == 0:
        print "Fizz"
    else:
        print count

注意事项:

  • 在检查单个条件之前检查两个条件
  • for循环代替while循环(个人喜好)
  • 正在检查 == 0

我觉得逻辑是检查是否

  1. 一个数可以被 3 和 5 整除。
  2. 一个数可以被 3 整除但不能被 5 整除。
  3. 一个数可以被 5 整除但不能被 3 整除。
  4. 一个数既不能被 5 也不能被 3 整除。

声明变量。我添加了额外的变量只是为了确保事情进展顺利。如果需要,您可以跳过后跟“divisible_by”的变量。

myArray = []
divisible_by_both = []
divisible_by_three = []
divisible_by_five = []
digits = range(1,101)

编写循环和条件。

for x in digits:
  if (x % 3 == 0) and (x % 5 == 0):
    myArray.append("Fizzbuzz")
    divisible_by_both.append(x)
  if (x % 3 == 0) and not (x % 5 == 0):
    divisible_by_three.append(x)
    myArray.append("Fizz")
  if not (x % 3 == 0) and (x % 5 == 0):
    divisible_by_five.append(x)
    myArray.append("Buzz")
  if not (x % 3 == 0) and not (x % 5 == 0):
    myArray.append(x)

打印Result,或者打印另一个数组保证总长度为100

print(myArray)

这是输出。如果愿意,您可以加入数组并将它们输出为字符串。 [1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13 , 14, 'Fizzbuzz', 16, 17, 'Fizz', 19, 'Buzz', 'Fizz', 22, 23, 'Fizz', 'Buzz', 26 , 'Fizz', 28, 29, 'Fizzbuzz', 31, 32, 'Fizz', 34, 'Buzz', 'Fizz', 37, 38, 'Fizz' , 'Buzz', 41, 'Fizz', 43, 44, 'Fizzbuzz', 46, 47, 'Fizz', 49, 'Buzz', 'Fizz', 52 , 53, 'Fizz', 'Buzz', 56, 'Fizz', 58, 59, 'Fizzbuzz', 61, 62, 'Fizz', 64, 'Buzz' , 'Fizz', 67, 68, 'Fizz', 'Buzz', 71, 'Fizz', 73, 74, 'Fizzbuzz', 76, 77, 'Fizz' , 79, 'Buzz', 'Fizz', 82, 83, 'Fizz', 'Buzz', 86, 'Fizz', 88, 89, 'Fizzbuzz', 91 , 92, 'Fizz', 94, 'Buzz', 'Fizz', 97, 98, 'Fizz', 'Buzz']