【发布时间】:2016-11-09 17:45:28
【问题描述】:
我正在做一些CodeEval 挑战,并正在做fizzbuzz 挑战。现在我确定这是一个非常简单的问题,我只是在看它,但我在 python 中做这件事,我还很陌生,只是在学习。
玩家通常围成一圈。第一个玩家说出数字“1”,每个玩家依次说出下一个数字。但是,任何能被 X 整除的数字(例如,三)都被单词 fizz 替换,任何能被 Y 整除的数字(例如,五)被单词 Buzz 替换。能被两者整除的数字变成了嗡嗡声。犹豫不决或犯错的玩家将被淘汰出局。
编写一个程序,打印出最终的数字系列,其中那些可以被 X、Y 整除的数字被替换为“F”表示嘶嘶声,“B”表示嗡嗡声,“FB”表示嘶嘶声。
输入样本:
你的程序应该接受一个文件作为它的第一个参数。该文件包含多个分隔行;每行包含 3 个以空格分隔的数字。第一个数字是第一个分频器(X),第二个数字是第二个分频器(Y),第三个数字是你应该数多远(N)。您可以假设输入文件的格式正确,并且数字是有效的正整数。
例如:
3 5 10
2 7 15
输出样本:
1 2 F 4 B F 7 8 F B
1 F 3 F 5 F B F 9 F 11 F 13 FB 15
打印出系列 1 到 N 用“F”替换能被 X 整除的数字,用“B”替换能被 Y 整除的数字,用“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))) 以便稍后处理。
标签: python python-2.7 fizzbuzz