Я делаю некоторые ошибки CodeEval
и делаю fizzbuzz один. Теперь я уверен, что это очень простая проблема, и я просто смотрю на нее, но я делаю это в python
, который я довольно новичок и просто изучаю.Простой вопрос fizzbuzz
Игроки, как правило, сидят в кругу. Первый игрок говорит число «1», и каждый игрок говорит по очереди. Однако любое число, делящееся на X (например, три), заменяется словом fizz, а любое делимое на Y (например, пять) словом buzz. Числа, делящиеся обоими, становятся шумными. Игрок, который колеблется или совершает ошибку, исключается из игры.
Напишите программу, которая печатает окончательную серию чисел, где те, которые делятся на X, Y и оба, заменяются «F» для fizz, «B» для гудения и «FB» для гудения fizz.
ввода пробы:
Ваша программа должна принять файл в качестве первого аргумента. Файл содержит несколько разделенных строк; каждая строка содержит 3 числа, которые ограничены пространством. Первое число - это первый разделитель (X), второе число - второй делитель (Y), а третье число - это то, как далеко вы должны рассчитывать (N). Вы можете предположить, что входной файл отформатирован правильно, а числа - положительные целые числа.
Например:
Выход образца:
1 2 F 4 BF 7 8 FB
1 F 3 F 5 ФОС 9 F 11 F 13 FB 15
Распечатайте номера с номерами от 1 до N делится на X с «F», числа, делящиеся на Y с «B», и числа, делящиеся обоими с «FB». Поскольку входной файл содержит несколько наборов значений, ваш вывод должен распечатывать одну строку для каждого набора. Убедитесь, что в каждой строке, на которой вы печатаете, нет пустых пробелов.
Ограничения:
Количество тестов ≤ 20
"Х" находится в диапазоне [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» и генераторы. После этого вызывающий может либо перебрать полученное значение ('txt в fizzbuzz (nums, low, high)'), либо преобразовать его в список ('seq = list (fizzbuzz (nums, low, high))'), чтобы обработать его позже , –