Таким образом, вам необходимо изменить каждый из a
, b
и c
в диапазоне 0-4 (что составляет range(5)
). Для этого вы можете использовать три вложенные петли for
.
for a in range(5):
for b in range(5):
for c in range(5):
Это гарантирует, что для каждого возможного значения a
все возможные значения b
испытываются, а так же, для каждого возможного значения b
, все возможные значения c
испытываются. Другими словами, самая внутренняя (самая нижняя, как они написаны) петля c
будет проходить через 0-4 для каждого значения b
, которое также проходит через 0-4 для каждого значения a
, которое равно также проходя через 0-4.
Теперь внутри этих циклов вам просто нужно проверить, соответствует ли критерий, который дал ваш проф, и если да, напечатайте цифры. К счастью, синтаксис ваш профессор дал отлично работает в Python:
if 0 < a < b < c < 5:
print(a, b, c)
Собираем все вместе, то мы имеем:
for a in range(5):
for b in range(5):
for c in range(5):
if 0 < a < b < c < 5:
print(a, b, c)
Теперь, это работает отлично, и, несомненно, удовлетворит ваш профессор, но есть некоторые простые улучшения, которые вы можете внести в эту программу. Во-первых, переменные каждытся от 0-4, но значение 0 никогда не пройдет тест if
, потому что он никогда не будет меньше 0! Так почему же попробовать? Вы могли бы сэкономить немного работы, написав каждый диапазон как range(1, 5)
.
Но ... есть и тот факт, что если a
является 1, b
никогда не может быть 1 (потому что a < b
должно быть правдой, и если a
2, b
не может также не будет 2, и так далее. А также, с другого конца диапазона, если c
4, b
никогда не может быть 4 и удовлетворяют тест. Мы можем написать диапазоны соответственно, так что диапазон для b
начинается 1 мимо a
и уходит от одного доc
, так что эти комбинации значений никогда не должны проверяться.
Наконец, ваш оператор if
также может быть упрощен: из-за используемых диапазонов вам не нужно быть уверенным, что 0 меньше a
; это всегда будет верно, потому что a
начинается с 1. В то же время вы знаете, что c
всегда будет меньше 5, потому что range()
делает это так, поэтому вы также можете удалить этот тест.
Таким образом, вы получите одинаковые результаты, при этом меньше работы, написав это так:
for a in range(1, 3):
for b in range(a+1, 4):
for c in range(b+1, 5):
if a < b < c:
print(a, b, c)
В этом случае дополнительная работа не так уж важно ... обе версии так быстро вы никогда не замечайте дополнительного времени, которое принял первый подход. Но всегда стоит подумать о том, как проблему можно переосмыслить, чтобы сделать меньше работы; иногда это разница между полезной программой и непригодной для использования.
В этом случае первоначальная версия проходит 125 тестов. Вторая, более эффективная версия? Четыре. Это точно так же, как и количество правильных результатов!
Таким образом, мы можем полностью вынести заявление if
и просто печатать каждую комбинацию, потому что записанные нами петли удостоверяются, что используются только для того, чтобы пройти тест.
И мы сделали менее 1/30-й работы в этом процессе!
Ничего себе, спасибо за большой ответ, определенно было интересно подумать. Я провожу большинство своих дней, думая об эффективном кодировании, поэтому это было действительно интересно. Еще раз спасибо за отличный ответ – Itheyln
Спасибо * вы * за оценку. Я добавил немного больше до конца, если вы его пропустили. – kindall