【问题标题】:What is the correct output for the FizzBuzz test in python?python 中 FizzBu​​zz 测试的正确输出是什么?
【发布时间】:2016-11-04 16:09:41
【问题描述】:

我最近开始使用 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

这不是正确的输出。如何清理程序?

【问题讨论】:

  • (count % 5) and (count % 3)。对于在您的代码中遇到的数字来说,这将始终是正确的。
  • 问题,而不是故事。
  • 你可能想看看如何做fizz-buzz exercise again
  • 为了澄清@MorganThrapp 所说的,所有正整数和负整数都是正确的。只有 0 是假的。您正在为检查 3 和 5 进行“真与真”的逻辑测试。
  • 我真的只是希望有人把它作为家庭作业解决方案或面试解决方案:P

标签: python fizzbuzz


【解决方案1】:

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

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

这行代码也永远不会执行

if (count % 3) == 0:

elif (count % 5) == 0:

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

还有一行代码

count = count + 1

出现在代码的每个分支中,请考虑将其放在某个地方 每次都会在哪里执行。

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

for x in range(100):

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

另一件需要注意的事情

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

在这里,您不是在检查数字 % 5 是否 == 0,您只是在检查 (count % 5)。因此,如果 count not 能被 5 整除,则表达式“if (count % 5)”将导致 True(查看真值测试)。省略 == 比较器的其他地方也是如此

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

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

【讨论】:

    【解决方案2】:

    我认为逻辑是检查是否

    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, '嘶嘶声', 19, '嗡嗡声', '嘶嘶声', 22, 23, '嘶嘶声', '嗡嗡声', 26, '嘶嘶声', 28, 29, 'Fizzbuzz', 31, 32, '嘶嘶声', 34, '嗡嗡声, '嘶嘶声', 37, 38, '嘶嘶声', '嗡嗡声', 41, '嘶嘶声', 43, 44, '嘶嘶声', 46, 47, '嘶嘶声', 49, '嗡嗡声', '嘶嘶声' , 52, 53, '嘶嘶声', '嗡嗡声', 56, '嘶嘶声', 58, 59, '嘶嘶声', 61, 62, '嘶嘶声', 64, '嗡嗡声', '嘶嘶声', 67, 68, '嘶嘶声, '嗡嗡声', 71, '嘶嘶声', 73, 74, '嘶嘶声', 76, 77, '嘶嘶声', 79, '嗡嗡声', '嘶嘶声', 82, 83, '嘶嘶声', '嗡嗡声' , 86, 'Fizz', 88, 89, 'Fizzbuzz', 91, 92, 'Fizz', 94, 'Buzz', 'Fizz', 97, 98, 'Fizz', 'Buzz']

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多