【问题标题】:Python Fizzbuzz problems with loopPython Fizzbuzz 循环问题
【发布时间】:2015-12-05 04:20:25
【问题描述】:

我已经搜索了大约一个小时的答案,似乎大多数人对 fizzbuzz 的编码方式与我不同。

但是,在尝试了所有方法来弄清楚为什么这个简单的代码不起作用之后,我感到非常沮丧。

谁能指出我确定我遇到的简单问题?代码运行,但它只返回值 1。

def fizzbuzz(intList):
    for n in intList:
        if n % 3 == 0 and n % 5 == 0:
            return n.replace(str(n),"Fizzbuzz")
        elif n % 3 == 0:
            return n.replace(str(n),"Fizz")
        elif n % 5 == 0:
            return n.replace(str(n),"Buzz")
        else:
            return n

【问题讨论】:

  • 我很抱歉,我的 for 循环和 if/else 语句缩进正确,我在粘贴时搞砸了。 (显然我是新来的,哈哈)

标签: python loops fizzbuzz


【解决方案1】:

它查看的第一个值是1。由于1%x 仅是xx0,因此它转到else 并返回1。然后它就完成了,因为这就是 return 所做的。

这会导致更大的问题,即您正在启动一个循环,然后保证您将在仅一次迭代后离开该循环,因为每个分支中都有一个return。您需要将这些 return 语句替换为 append()s 到 list(不要忘记 return 生成的 list)或 print() 调用。

另外,如果您从3 之类的东西开始,您的代码会尝试在整数上使用replace,这不是您可以对整数执行的操作。你会得到一个回溯。

【讨论】:

    【解决方案2】:

    代码返回1,因为考虑此列表[1,2,3,4,5,6,7,8,9,10]。所有三个条件都将得到false,最后一个else 将返回1。如果您想要答案,请将它们附加到列表中。

    类似这样的:

    def fizzbuzz(intList):
        temp = []
        for n in intList:
            if n % 3 == 0 and n % 5 == 0:
                temp.append("Fizzbuzz")
            elif n % 3 == 0:
                temp.append("Fizz")
            elif n % 5 == 0:
                temp.append("Buzz")
            else:
                temp.append(n)
        return temp
    
    
    print fizzbuzz(range(1,20))
    

    【讨论】:

      【解决方案3】:

      如果你看一下这段代码,你可能会 更好地理解你的。虽然这是一个完全 Python3 中 fizzbuzz 的不同实现

      #!/usr/bin/python3
      
      for i in range(1,100):
          msg = "Fizz" * bool(i%3==0)
          msg += "Buzz" * bool(i%5==0)
          if not msg:
              msg = i
          print(msg)
      

      【讨论】:

        【解决方案4】:

        我在 python 方面的技能相当平均,但我喜欢使用字典。这是使用字典的 Fizz Buzz 程序。没有 if。

        for data in range(1, 101):
            msg = [str((data % 3 == 0)), str((data % 5 == 0))]
            // msg returns a list with ['True' ,'False'] depending on the condition
            conveter = {"True False": "Fizz",
                        "False True": "Buzz",
                        "True True": "Fizz Buzz",
                        "False False": data
                    }
            val = conveter[" ".join(msg)]
            print(val)
        

        【讨论】:

          【解决方案5】:

          我刚刚将 FizzBu​​zz 实现为

          for n in range(1, 100):
              if n%15==0: print "FizzBuzz"
              elif n%5==0: print "Buzz"
              elif n%3==0: print "Fizz"
              else: print n
          

          最好的东西

          • 有效

          • 它适合推文,有边距

          【讨论】:

            【解决方案6】:

            多年后,基于this...

            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 调用的字典键的值。

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

            当检查 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
            FizzBu​​zz
            91
            92
            嘶嘶声
            94
            嗡嗡声
            嘶嘶声
            97
            98
            嘶嘶声
            嗡嗡声

            【讨论】:

              【解决方案7】:

              如果我们想在python解释器的交互模式下看到下一个结果,python函数应该是什么样子:

              >>> fizz(15)
              [ 1, 2, 'fizz', 4, 'buzz', 'fizz', 7, 8, 'fizz', 'buzz', 11, 'fizz', 13, 14, 'fizzbuzz' ]
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-01-26
                • 2014-11-24
                相关资源
                最近更新 更多