我正在做一些CodeEval
的挑戰,我在做fizzbuzz之一。現在我確定這是一個非常簡單的問題,我只是在看它,但我在python
這樣做,這是我剛剛學習和剛剛學習。簡單fizzbuzz問題
玩家通常坐在一個圓圈內。第一個玩家說數字「1」,每個玩家依次說下一個數字。然而,任何可被X整除的數字(例如三個)被fizz這個詞代替,並且任何可被Y(例如五個)整除的單詞buzz代替。可以被雙方整除的數字會變成嘶嘶聲。猶豫或者犯錯的玩家將被淘汰。
編寫一個程序,打印出最終的一系列數字,其中可被X,Y和Y均可分解的數字由「F」表示嘶嘶聲,「B」表示嗡嗡聲,「B」表示嘶嘶聲。
輸入樣本:
您的程序應接受一個文件作爲其第一個參數。該文件包含多個分隔的行;每行包含3個以空格分隔的數字。第一個數字是第一個分頻器(X),第二個數字是第二個分頻器(Y),第三個數字是你應該計數多少(N)。您可能會認爲輸入文件格式正確,數字是有效的正整數。
例如:
輸出樣本:
1 2 F 4 BF 7 8 FB
1 F 3 F 5 FBF 9 F 11 F 13 FB 15
打印出系列1到N替換數字「F」可被X整除,Y可被「B」整除的數字以及可被「FB」整除的數字。由於輸入文件包含多組值,因此您的輸出應該每組打印一行。確保每行打印中沒有尾隨空白。
限制條件:
測試用例≤20的數量
「X」 是在範圍[1,20]
「Y」 是在範圍[1,20]
「N」在範圍內[21,100]
當我運行我的程序時,我從文件中獲得以下輸出:
1
1
我做錯了什麼地方我的程序沒有正確運行通過該文件?
def fizzbuzz(num_range, div_low=3, div_high=5):
for x in num_range:
if x % div_low == 0:
return "F"
elif x % div_high == 0:
return "B"
elif x % div_low == 0 and x % div_high == 0:
return "FB"
else:
return x
if __name__ == '__main__':
with open("numbers.txt", "r") as nums:
for i in nums.readlines():
high = int(i.rstrip().split(" ")[1])
low = int(i.rstrip().split(" ")[0])
nums = range(1, int(i.rstrip().split(" ")[2]))
print(fizzbuzz(nums, low, high))
如果您想在某種循環中「返回」多個值,請參閱yield關鍵字和生成器。之後,調用者可以迭代所產生的值('for txt in fizzbuzz(nums,low,high)')或者將其轉換爲列表('seq = list(fizzbuzz(nums,low,high))'),以便稍後處理。 –