#python #fizzbuzz
Вопрос:
Я буквально две недели изучаю Python. Я могу заставить печально известную шипучку печатать шипучку или жужжание, но она игнорирует мою функцию «и», и я не понимаю, почему? Я мог бы взглянуть на готовые решения, но я действительно не хочу этого делать, и почти любое исследование, которое я провожу, почти незаметно проникает в решение. Я просто хочу понять, что не так с этой строкой. Вместо того, чтобы просто хватать готовый код, чтобы сдать его.
for packers in range(1,101):
if packers % 3 == 0:
print("Fizz")
elif packers % 5 == 0:
print("buzz")
elif packers % 3 == 0 and packers % 5 == 0:
print("Fizzbuzz")
else:
print(packers)
Комментарии:
1. Вам нужно изменить порядок проведения тестов. Все, что одновременно делится на 3 и 5, уже будет поймано предыдущим тестом. Например, 15 % 3 == 0. Он никогда не проходит дальнейшие испытания.
2. Один из других случаев совпадает с первым…
3. Аааа, даже при использовании этих «или», » и » и т. Д., В каком порядке они имеют значение? Хорошо, я сделаю некоторую перестановку кода. Я думал буквально сверху вниз, основываясь на инструкциях. Сначала решите одну строку задачи, затем переходите к следующей задаче и т. Д.
4. Важно не
or
«иand
«, а то, как этоif...elif
работает. Выполняется первый соответствующий блок вif..elif..elif...else
цепочке, все остальные пропускаются. Выяснение того, как правильно выразить инструкции на английском языке в коде (что означает изменение порядка, в котором вы приказываете компьютеру что-то делать), — это почти весь смысл упражнения. 🙂
Ответ №1:
Проблема в том, что:
- Если число делится на 3 или 5, либо
packers%3
илиpackers%5
принимает значение True еще до того, как у него появится возможность выполнить приведенные ниже условия. - И когда оба эти 2 условия не выполняются (число не делится на 3 и 5), это не так
packers%3
иpackers%5
будет равно 0.
Вам нужно сначала проверить, делятся ли они оба
for packers in range(1,101):
if packers % 3 == 0 and packers % 5 == 0:
print("Fizz")
elif packers % 5 == 0:
print("buzz")
elif packers % 3:
print("Fizzbuzz")
else:
print(packers)
Ответ №2:
Вам следует переключить второй и третий блоки elif.
Прямо сейчас ваш второй блок elif похож на глобальный набор. Он выведет buzz для любого числа, кратного 5(даже если оно делится на 5 и 3 одновременно). И когда это условие становится ложным, следующее условие никогда не может быть истинным(так как упаковщики%5!=0, вы только что проверили это).
Вместо этого сначала проверьте, делится ли число как на 3, так и на 5, если да, выведите fizzbuzz, если нет, продолжайте проверять, делится ли оно всего на 5