【问题标题】:Fizzbuzz Challenge in Twilio questTwilio 任务中的 Fizzbuzz 挑战
【发布时间】:2020-07-03 09:26:40
【问题描述】:

我最近下载了 Twilio 任务,我喜欢它!但是,我遇到了入门级 Python 挑战之一。它应该很容易解决,但不知何故我似乎无法解决这里的错误。任何人都可以查看我的代码并找到我显然无法找到的明显错误吗?

import sys

inputs = sys.argv
inputs.pop(0)



for i in inputs:
    print(i)
    n = int(i) 
    for x in range(1,n+1):
        if x % 3 == 0 and x % 5 == 0:
            print("fizzbuzz")
        elif x % 3 == 0:
            print("fizz")
        elif x % 5 == 0:
            print("buzz")
        else:
            print(x)

挑战是解决 fizzbuzz 挑战,输入多个数字。错误产生: “我们向您的脚本传递了一个可以被 3 和 5 整除的数字,并希望您打印 fizzbuzz,但您却打印了 -3000。

所以输入是 -3000,并且应该通过我的第一次测试,因为它确实可以被 3 和 5 整除。我似乎无法弄清楚为什么输入 -3000 会跳转到“else”部分我的 for 循环。

【问题讨论】:

  • 不要在循环之前打印 i,您正在打印输入值。验证脚本不会期待
  • 即使我同意建议的更改,它也只是将错误替换为不同的错误(之前尝试过此更改):“我们向您的脚本传递了一个可以被 3 和 5 整除的数字,并且期望您打印 fizzbuzz,但您打印了 1。”我不明白为什么它不在这里打印“fizzbuzz”。谢谢。
  • 它不应该为数字 1 打印 fizzbuzz...
  • 如我所想.. 然后我想我可能会向 Twilio 团队报告一个错误。 1 永远不能被 3 或 5 整除。我不明白为什么它会在这里拒绝答案 1。但我认为这可能是 Twilio 程序的一个错误。

标签: python python-3.x for-loop twilio fizzbuzz


【解决方案1】:

如果输入只是一个数字,则不需要 for 循环。 逻辑是正确的。 一种解决方法是:

import sys

inputs = int(sys.argv[-1])
x=inputs
if x % 3 == 0 and x % 5 == 0:
    print("fizzbuzz")
elif x % 3 == 0:
    print("fizz")
elif x % 5 == 0:
    print("buzz")
else:
    print(x)

对于输入中的 int 列表:

import sys

inputs = [int(x) for x in sys.argv[1:]]
for x in inputs:
    if x % 3 == 0 and x % 5 == 0:
        print("fizzbuzz")
    elif x % 3 == 0:
        print("fizz")
    elif x % 5 == 0:
        print("buzz")
    else:
        print(x)

【讨论】:

  • 输入总是整数,但它提示迭代未知数量的输入。因此列表(输入)。这种解决方案肯定只适用于一个数字。
  • @HavardKleven 好的,我在输入中添加了整数列表的版本
  • 嗨,谢谢@Giuseppe,它就像一个魅力!有时只需要另一双眼睛。兄弟
【解决方案2】:

这个问题是要求您针对每个输入从 1 到 N 迭代每个数字,还是要求您只检查输入的单个数字?

如果它只是一个元素,那么我相信以下代码就足够了:

import sys

inputs = sys.argv
inputs.pop(0)
for i in inputs:
    # print(i)
    n = int(i) 
    if n % 3 == 0 and n % 5 == 0:
        print("fizzbuzz")
    elif n % 3 == 0:
        print("fizz")
    elif n % 5 == 0:
        print("buzz")
    else:
        print(n)

【讨论】:

  • 嗨,它要求遍历输入列表中的每个元素。
  • 错误消息We passed your script a number that was divisible by both 3 and 5, and expected you to print fizzbuzz, but instead you printed 1. 表明对于输入流中的每个数字,您应该检查该数字是否可以被 3 和 5 整除。
  • 假设输入是 [15] 那么我相信正确的输出应该是 FizzBuzz 因为它可以被 3 和 5 整除。但是您的程序从 1 开始并检查到 15,因为您正在检查1 首先,您会收到一条错误消息,指出您的输出与预期的输出不匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 2014-12-21
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多