2016-11-09 2 views
-1

Я делаю некоторые ошибки 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)) 
+0

Если вы хотите «вернуть» несколько значений в какой-либо цикл, см. Ключевое слово «yield» и генераторы. После этого вызывающий может либо перебрать полученное значение ('txt в fizzbuzz (nums, low, high)'), либо преобразовать его в список ('seq = list (fizzbuzz (nums, low, high))'), чтобы обработать его позже , –

ответ

1

Ваша функция возвращает на первом значении х. Вам нужно создать цепочку ответов в цикле, а затем вернуть эту строку только после, вы заполните цикл.

Также обратите внимание, что ваша логика не может когда-либо возвращать «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 

С тех пор, как вы вернули строку, вам нужно преобразовать ее перед добавлением. Я не исправил все для вас, но это должно заставить вас двигаться.

+0

Смотрите! Я знал, что это просто! – Pyth0nicPenguin

Смежные вопросы