Я выполняю несколько 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, заменив числа, делящиеся на X, на «F», числа, делящиеся на 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))
), чтобы обработать его позже. - person Łukasz Rogalski   schedule 09.11.2016