В 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),

Другие вопросы по тегам