尝试将fizzbuzz转换为python 3中的函数

2024-05-15 17:36:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚开始学习python作为我的第一门语言,虽然我为fizzbuzz编写了代码,但我一生都无法让它完成下面的工作。我也希望它水平打印而不是垂直打印。任何帮助都很好。 创建一个这样做的函数。 例如

fizzbuzz(20) 

将打印 1,2,fizz,4,buzz,fizz,7,8,fizz,buzz,11,fizz,13,14,fizzbuzz,16,17,fizz,19,buzz

def fizzbuzz(n):

    for x in range (101):
        if x%3==0 and x%5==0:
            print("fizz buzz")
        elif x%3==0:
            print('fizz')
        elif x%5==0:
            print('buzz')
        else:
            print (x)    

def main():
  print(fizzbuzz(20))

Tags: and函数代码in语言forifdef
3条回答

将项目收集到列表中。然后在函数结束时打印列表。您可以使用', '.join(...)将这些项与中间的逗号连接起来。

def fizzbuzz(n):
    result = []
    for x in range(1, n+1):
        if x % 3 == 0 and x % 5 == 0:
            result.append("fizz buzz")
        elif x % 3 == 0:
            result.append('fizz')
        elif x % 5 == 0:
            result.append('buzz')
        else:
            result.append(str(x))
    return result

def main():
    print(', '.join(fizzbuzz(20)))

main()

很高兴知道print(..., end=', ')会在结尾处用逗号和空格“水平”打印,这几乎可以解决您的问题,除了最后一项也会在结尾处有逗号和空格,这不是您想要的。


通常,(1)将打印与计算分离,(2)使函数可重用是个好主意。你经常想计算比打印更频繁。以后您可能希望在打印之前将计算传递给其他函数。所以即时打印的功能就没那么有用了。所以我建议从fizzbuzz中取出print语句。

你可以返回字符串', '.join(result),但这有多有用呢?列表result(在将来)对于进一步处理可能更有用,因此我选择返回result。我留给main函数的打印。

稍微优雅一点

def fizzbuzz(n):
    for x in range(1,n+1):
        if not x % 15:
            yield 'fizz buzz'
        elif not x % 3:
            yield 'fizz'
        elif not x % 5:
            yield 'buzz'
        else:
            yield x

if __name__ == "__main__":
    print ','.join(fizzbuzz(20))

更短:

for n in range(100):
    print "Fizz"*(not n % 3) + "Buzz"*(not n % 5) or n

或者,如果你想给面试官留下好印象

for n in range(100):
    print 'FizzBuzz'[n%-3&4:12&8-(n%-5&4)] or n

相关问题 更多 >