В общем тут ситуация такая: вам предложили использовать один из самых простых и понятных циклов в руби. Но у него есть свои особенности. Одна из них следующая: если переменная 'choice' перед вызовом имеет значение удовлетворяющее условию, то цикл не выполниться ни разу.
И приходится как-то выкручиваться из ситуации. Один из способов применили вы. Он интересен, но есть один нюанс.
В моем варианте, который опирается на те же принципы, которыми руководствуются авторы курса, я стараюсь максимально облегчить пользователю работу моей программой. Для этого я пишу в цикле подсказку: "Введите 1 или 2 >". То есть, не рассчитываю, что пользователь моей программы будет настолько интеллектуальным, чтобы самому понять, какой именно ответ я от него жду и что я вообще жду ответ (на то, что я всё-таки жду ответ, намекает значок ">"). И для того, чтобы писать этот кусок кода как можно меньше раз (я ленивый, как и все программисты), я стараюсь сделать так, чтобы он появился всегда, когда я жду ответа от пользователя.
Поэтому я изначально присваиваю переменной 'choice' неверное значение и жду, когда пользователь опираясь на мою подсказку введет верное значение.
В дальнейшем можно будет эту часть кода значительно сократить, сделав из неё метод и вызывая его по названию в нужных местах программы.