Несколько недель назад я рассказал о своем эмоциональном опыте моего «первого» проекта по программированию. Сегодня я хотел бы поделиться реальным кодом и опытом моего первого «проекта» по кодированию (обратите внимание на кавычки).

С тех пор, как я начал программировать во Flatiron, у меня было очень легкое, но постоянное чувство стресса и беспокойства, вызванное количеством новой информации, закачиваемой в мой мозг. Всякий раз, когда я достигаю новой вехи в своем процессе обучения, меня встречает другая лаборатория или проект, чтобы продвинуться вперед. И даже когда кажется, что вы закончили на сегодня, инструкторы бросают еще одну бомбу, которая требует двух недель работы над задачами. Не поймите меня неправильно, здорово постоянно быть на краю своего места, проверяя свои умственные способности и пытаясь достичь результатов, на достижение которых у других людей ушли бы годы.

На буткемпе нам постоянно напоминают, что стресс — это место, где происходит рост. Но приятно иногда расслабиться, отвлечься от задач и посмотреть на свои маленькие победы — выполненные лабы, проекты, задачи и объем знаний, которые вы получили при их выполнении. Приятно видеть, насколько улучшились ваши навыки кодирования, и хихикать над задачей, которую вы в прошлом считали трудной и изо всех сил пытались выполнить.

Однажды я просматривал свою учетную запись repl.it и наткнулся на свои первые попытки программирования. Одной из таких неудачно реализованных попыток было мое первое CLI-приложение, написанное на Python. Это именно то, чем я хочу поделиться с вами сегодня.

Мое приложение командной строки

Приложение, которое я написал, представляло собой текстовую игру Виселица на Python 2.7 без большого количества визуальных эффектов, но оно сообщало игроку, какие буквы он угадал, их положение в заданном слове и сколько попыток у него осталось. Вы можете попробовать сами.

Сначала пользователь будет встречен следующим пассивно-агрессивным сообщением:

После одной «игры» вот результат:

Прежде всего, если вы не в курсе, я должен сообщить вам, что помидор на самом деле является фруктом. Во-вторых, вы могли заметить, что задача состоит в том, чтобы угадать фрукт и ничего более. Ну, это потому, что мне пришлось жестко закодировать все возможные слова, которые игра могла бы случайным образом выбрать, чтобы игрок мог их угадать. Сказать, что он был коротким, было бы грубым преуменьшением. В моем списке было целых 6 слов на выбор. Я принял это решение, чтобы иметь возможность легко устранять ошибки и не беспокоиться об улучшении списка после того, как я закончил.

Игра также завершалась бы победой, если бы вы решили ввести все слово в качестве угадывания.

Код приложения

Так как же действует этот зверь (больше похожий на чудовище)? Что ж, принцип очень прост. Я дам краткое объяснение того, что происходит в каждом блоке кода:

my_listэто массив слов, которые игра выбирает случайным образом. Затем слово разбивается на отдельные буквы.

В строке 9 магия Python украдена из Stackoverflow.

ggприветствует пользователя и принимает первую букву.

Строки 13–17 проверяют, сколько раз буква повторяется в слове (если повторяется) и входит в цикл while.

19–29 проверяет, есть ли буква в слове, и если есть — показывает ее положение на экране.

31–32 добавляет последний ввод в список угаданных букв.

33–36 сравнивает разделенное слово и все предположения и поздравляет, если предположение было правильным.

37–43 проверяет правильность буквы и запрашивает у пользователя дальнейший ввод.

44–47 проверяет неверное предположение, уменьшает количество оставшихся предположений

48–49 пользователь проиграл.

51 пользователь угадал слово.

Прежде чем опубликовать приложение, я думал изменить переменные и сделать код более читабельным, однако это перечеркнуло бы цель этого поста — показать любопытство и первые детские шаги моего пути кодирования.

Проблемы, которые еще предстоит решить

То, что вы только что видели, было идеальным сценарием на тот случай, если пользователь не был пустой тратой ДНК и знал, как следовать инструкциям на экране. Поэтому в игре все еще есть множество ошибок, некоторые из которых:

  1. Игра примет пустую строку как попытку угадать
  2. Игра будет принимать более 1 буквы как неудачную попытку
  3. Он не принял бы более длинную часть слова, даже если бы оно было правильным.
  4. Если буква находится в нескольких местах — игроку нужно ввести несколько раз. (строки 38–43 пытались объяснить это, но не работают)
  5. До 3 повторяющихся букв в слове
  6. Смотрите картинку ниже

Также на слове «маракуйя» игра отказывалась заканчиваться. Наверное, потому что это не английское слово. Тем не менее, это 7.

… и ряд других проблем, которые я не мог обнаружить во время написания этого блога.

Примечания

Эта 53-строчная мерзость — ценная часть моего пути к программированию. Он показывает, как сталкиваются отсутствие опыта и страсть к коду. Мне потребовалось более 30 часов, чтобы заставить код работать с объемом знаний, которыми я обладал после 15 часов предыдущего опыта программирования. Это может показаться тривиальным или даже бесполезным, однако именно тогда, когда этот проект был завершен, я начал серьезно думать о коде, и это в конечном итоге подтолкнуло меня присоединиться к буткемпу, поэтому я так дорожу этим фрагментом кода. Кроме того, было приятно напомнить себе о пути Питона.

Возможно, в будущем я вернусь к проекту и сделаю его более стабильную и универсальную версию, в которой будут учтены все (или хотя бы часть) вышеперечисленных проблем. Я бы, скорее всего, воссоздал проект на рубине, так как я намного более опытен и уверен в создании CLI на этом языке. Я бы также сделал переменные и функции более удобочитаемыми и понятными как для себя, так и для тех случайных бедолаг, которые решают прочитать беспорядок, который представляет собой текущая версия программы.

Это напоминание о том, что «Чтобы достичь совершенства, нужно начать с невежества во многом». (Ф. Достоевский)