【问题标题】:Simple fizzbuzz issue简单的 fizzbuzz 问题
【发布时间】: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


【解决方案1】:

您的函数返回 x 的第一个值。您需要在循环中构建一个响应字符串,然后仅在完成循环之后返回该字符串。

另请注意,您的逻辑永远不会返回“FB”,因为它在 else 子句中同时适用于“F”和“B”。

series = ""
for x in num_range:
    if x % div_low == 0 and x % div_high == 0:
        series += "FB"
    elif x % div_low == 0:
        series += "F"
    elif x % div_high == 0:
        series += "B"
    else:
        series += str(x)

return series

由于您返回一个字符串,因此您必须在附加之前转换数字。我还没有为你解决所有问题,但这应该会让你动起来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2011-01-29
    • 2018-03-07
    • 2011-10-30
    • 2013-02-17
    • 2011-02-24
    相关资源
    最近更新 更多