2013-08-25 44 views
2

我剛剛開始學習python作爲我的第一語言,並且當我編寫fizzbuzz的代碼時,我無法爲了我的生活而讓它執行下面的項目。我也希望它水平打印而不是垂直打印。任何幫助都會很棒(頭轉)。 創建一個這樣做的函數。 例如試圖把fizzbuzz變成python中的一個函數3

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

101應與n + 1個 –

回答

2

收集到的物品清單。然後在函數結尾處打印列表。您可以使用', '.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功能的打印。

+0

取代應該是'範圍(1,N + 1)' – stranac

+0

@stranac:是的,感謝。 – unutbu

+3

而不是'如果x%3 == 0和x%5 == 0:'您可以使用'if x%15 == 0:' – thefourtheye

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

我發現了以下工作井(Python 3中):

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

print (fizzbuzz()) 
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是相互矛盾的!所以你可以檢查x % 15而不是(x % 3 and x % 5)「FizzBu​​zz」。

4

較短尚未:

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 
+0

非常好,第二個解決方案是壞蛋 –

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

添加一些解釋並回答這個答案如何幫助OP解決當前問題 –

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,嘶嘶聲,91,92,嘶嘶聲,94,嗡嗡聲,嘶嘶聲,97,98,嘶嘶聲,嗡嗡聲'

0

又一一個與列表理解和Python3

def is_mod_zero(num, *div): 
    return not [d for d in div if num % d is not 0] 

def fizz_buzz(num): 
    if is_mod_zero(num, 3, 5): 
     return 'FizzBuzz' 
    if is_mod_zero(num, 3): 
     return 'Fizz' 
    if is_mod_zero(num, 5): 
     return 'Buzz' 
    return num 

if __name__ == "__main__": 
    for i in range(100): 
     print(fizz_buzz(i))