[英]Need assistance to understand python code - I am very beginner in Python
下面是這個算法問題,我可以在網上找到一個解決方案,它看起來很像我想出的,但我無法理解 3 和 5 部分的倍數。
問題是“編寫一個程序,輸出從 1 到 n 的數字的字符串表示。但是對於 3 的倍數,它應該輸出“Fizz”而不是數字,對於 5 的倍數,它應該輸出“Buzz”。對於倍數的數字三個和五個輸出“FizzBuzz”。”
這是谷歌的解決方案:
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。您希望看到“FizzBuzz”打印在 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 FizzBuzz 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.