试图将fizzbuzz变成python 3中的函数

时间:2013-08-25 08:49:45

标签: python python-3.x fizzbuzz

我刚开始学习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))

12 个答案:

答案 0 :(得分:6)

更短的时间:

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

答案 1 :(得分: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中取出打印语句。

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

答案 2 :(得分:1)

稍微优雅

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))

答案 3 :(得分:1)

def fizzbuzz(numbers, fizz, buzz):
    x = ['Fizzbuzz' if x % fizz == 0 and x % buzz == 0 else 'Fizz' if x % fizz == 0 else 'Buzz' if x % buzz == 0 else x for x in numbers]
    return x

答案 4 :(得分:1)

我是一名新手编码器,所以我不理解的一些答案或者似乎没有直接适用于我的问题。此答案将Fizz_Buzz作为变量并且x的范围由用户确定。我看了上面的解决方案并想出了这个:

def Fizz_Buzz(x): 
     for x in range (0,x):      
        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)

答案 5 :(得分:1)

您可以添加end=', '进行打印,以便在同一行上打印,并使用您想要分隔值的任何字符。

class FizzBuzz:
    @staticmethod
    def fizz_buzz(n):
        if n % 15 == 0:
            return 'FizzBuzz'
        elif n % 3 == 0:
            return 'Fizz'
        elif n % 5 == 0:
            return 'Buzz'
        else:
            return str(n)

    def __str__(self, rng):
        [print(self.fizz_buzz(n), end=', ') for n in range(1, rng + 1)]

但它最后会留下,。代替:

    def __str__(self, rng):
        print(', '.join(self.fizz_buzz(n) for n in range(1, rng + 1)))

答案 6 :(得分:1)

我制作了适用于任何数字和单词的fizzbuzz,因此您可以根据需要进行fizzbuzzfuzz。我做到了6行(如果算上通过fizzfuzz运行的行,则为7行)

def f(n:int,m:list,w:list):
    s=''
    for x in m:
        if n%x==0:    s+=w[m.index(x)] 
    if s=='':  s=n
    return s
for i in range(1, 100 +1):  print(f(i,[3,5],['Fizz','Buzz']))

答案 7 :(得分:0)

def fizzbuzz(num):
    if x % 3 == 0 and x % 5 == 0:
    return "Fizz Buzz"
    elif x % 3 == 0:
        return "Fizz"
    elif x % 5 == 0:
        return "Buzz"
    else:
        return x    

MAXNUM = 100
for x in range (MAXNUM):
    print fizzbuzz(x)

答案 8 :(得分:0)

我发现以下效果很好(Python 3):

def fizzbuzz():
for i in range(1,101):
    print("Fizz"*(i%3==0)+"Buzz"*(i%5==0) or i)

print (fizzbuzz())

答案 9 :(得分:0)

这是一个有趣的(显然不是最好的可读性,但考虑列表理解仍然有点乐趣):

def fizzBuzz():
    print(", ".join(["FizzBuzz" if x%15==0 else "Fizz" if x%3 == 0 else "Buzz" if x%5==0 else str(x) for x in range(1,101)]))
不要忘记,3和5是互质的!因此,对于" FizzBu​​zz",您可以检查x % 15而不是(x % 3 and x % 5)

答案 10 :(得分:0)

另外一个:)只是为了好玩:)

get_index = lambda i: bool(i%3)+2*bool(i%5) if i !=0 else 3
afb = lambda x: ('fizzbuzz','buzz', 'fizz', str(x))[get_index(x)]
fizzbuzz = lambda inpt: print(','.join([ afb(i) for i in inpt ]))
fizzbuzz(range(101))
  

“0,1,2,香味,4,嗡嗡声,嘶嘶声,7,8-,香味,嗡嗡声,11,香味,13,14,fizzbuzz,16,17,香味,19,嗡嗡声,嘶嘶声,22, 23,嘶嘶声,嗡嗡声,26,嘶嘶声,28,29,fizzbuzz,31,32,嘶嘶声,34,嗡嗡声,嘶嘶声,37,38,嘶嘶声,嗡嗡声,41,嘶嘶声,43,44,fizzbuzz,46,47,嘶嘶声,49,嗡嗡声,嘶嘶声,51,52,53,嘶嘶声,嗡嗡声,56,嘶嘶声,58,59,fizzbuzz,61,62,嘶嘶声,64,嗡嗡声,嘶嘶声,67,68,嘶嘶声,嗡嗡声,71,嘶嘶声, 73,74,fizzbuzz,76,77,嘶嘶声,79,嗡嗡声,嘶嘶声,82,83,嘶嘶声,嗡嗡声,86,嘶嘶声,88,89,fizzbuzz,91,92,嘶嘶声,94%,嗡嗡声,嘶嘶声,97, 98,嘶嘶声,嗡嗡声'

答案 11 :(得分:0)

又一个列表理解和Python3

# Create come toydata
df <- data.frame(target = rnorm(6))

print(df$target) # A numeric
#[1] -0.6194364  1.8817725  1.2898545  0.8297128  0.7837745  0.1337996

df$target <- cut(df$target, breaks = 4) # Now a factor with 4 levels but with wrong labels
print(df$target)
#[1] (-0.622,0.00587] (1.26,1.88] (1.26,1.88] (0.631,1.26] (0.631,1.26] (0.00587,0.631] 
#Levels: (-0.622,0.00587] (0.00587,0.631] (0.631,1.26] (1.26,1.88]

levels(df$target) <- c("c1", "c2", "c3", "c4")  # Update labels
print(df$target)
#[1] c1 c4 c4 c3 c3 c2
#Levels: c1 c2 c3 c4