В fizzbuzz, почему программа, использующая dicts, считает, что 0 - это fizzbuzz?
Так что я довольно новичок в кодировании, я экспериментировал со всеми разными fizzbuzz'ами, и я наткнулся на один, использующий диктовки.
Когда я запускаю его, я легко могу изменить любые параметры с помощью одного изменения нажатия клавиши, что приятно, но я не могу понять, почему сначала печатается fizzbuzz, а затем он выполняет все выбранные мной fizzbuzzs.
Вот код, который я использую:
def fizzbuzz(multiples, *args):
for i in range(*args):
output = ''
for multiple in multiples:
if i % multiple == 0:
output += multiples[multiple]
if output == '':
output = i
print(output)
multiples={3:Fizz,5:Buzz}
fizzbuzz(multiples, 145)
stall = input("")
Вывод будет идти: FizzBuzz 1 2 Fizz ... и т. Д.
Похоже, 0 это FizzBuzz...
Для образовательных целей: для чего это?
Спасибо.
1 ответ
В этом коде нет ничего плохого, за исключением нескольких опечаток (но все они поднимают NameError
вместо того, чтобы вызывать поведение, о котором вы спрашиваете) и полагаться на неопределенный порядок диктов (чтобы вы могли получить BuzzFizz
вместо FizzBuzz
, но это также не то, о чем вы спрашиваете).
Причина это печатает FizzBuzz
это то, что вы делаете это:
if i % multiple == 0:
output += multiples[multiple]
И с тех пор 0 % 3 == 0
а также 0 % 5 == 0
Это правда оба раза, поэтому он добавляет оба слова.
И это не ошибка. Число 0 делится на 3, 5 и любое другое целое число, кроме 0.
Вы можете быть сбиты с толку, потому что многие программы FizzBuzz - и, вероятно, все дети, которые играют в эту игру в школе - начинают считать с 1 вместо 0. Но range(144)
начинается с 0. (Это также заканчивается 143, а не 144.) Возможно, вы хотели позвонить fizzbuzz(multiples, 1, 145)
,