簡體   English   中英

需要幫助來理解 python 代碼 - 我是 Python 的初學者

[英]Need assistance to understand python code - I am very beginner in Python

下面是這個算法問題,我可以在網上找到一個解決方案,它看起來很像我想出的,但我無法理解 3 和 5 部分的倍數。

問題是“編寫一個程序,輸出從 1 到 n 的數字的字符串表示。但是對於 3 的倍數,它應該輸出“Fizz”而不是數字,對於 5 的倍數,它應該輸出“Buzz”。對於倍數的數字三個和五個輸出“FizzBu​​zz”。”

這是谷歌的解決方案:

def fizzBuzz(n):
    for i in range(1,n+1):
        return ['Fizz' * (not i % 3) + 'Buzz' * (not i % 5) or str(i) for i in range(1, n+1)]

這就是我試圖為類似問題做的事情:

def nicFizzbuzz(n):
    for i in range(1,n+1):
        #print(i)
        if ( not i % 3):
            print('Fizz')
        elif(not i % 5):
            print('Buzz')
        elif(not i % 3) and (not i % 5):
            print("FizzBuzz")
        else:
            print(i)

有人可以解釋我哪里出錯了嗎?

你必須先寫3和5的case。

def nicFizzbuzz(n):
  for i in range(1,n+1):
    #print(i)
    if(not i % 3) and (not i % 5):
      print("FizzBuzz")
    elif ( not i % 3):
        print('Fizz')
    elif(not i % 5):
        print('Buzz')
    else:
        print(i)

您正在評估錯誤的條件。 讓我們假設 n 是從 1 到 20。您希望看到“FizzBu​​zz”打印在 15。但是從您的函數中,您首先評估 15 可以被 3 整除,這是真的。 該函數不評估其余條件並移至 16。

一個簡單的解決方法是將 3 和 5 可分性條件移動到頂部,例如

def nicFizzbuzz(n):
    for i in range(1,n+1):
        if(not i % 3) and (not i % 5):
            print("FizzBuzz")  
        elif ( not i % 3):
            print('Fizz')
        elif(not i % 5):
            print('Buzz')
        else:
            print(i)

n = 20

nicFizzbuzz(n)

這導致

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBu​​zz 16 17 Fizz 19 Buzz

將可被 3 和 5 整除的值的測試移動到其他測試之上是獲得正確結果的好方法,但我想添加另一種方法來做到這一點。
而不是對每個組合分別進行測試,而不是排他性地進行測試。 此版本不使用elif ,而是累積要打印的值。

def nicFizzbuzz(n):
    for i in range(1,n+1):
        val = ''
        if (not i % 3):
            val += 'Fizz'
        if (not i % 5):
            val += 'Buzz'
        print(val or i)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM