Хотите узнать о Python? Это руководство познакомит вас с основами программирования на Python, включая переменные, условные выражения и списки, в процессе создания Сортировочной шляпы Хогвартса. Я имею в виду, что пора им обновиться до новейших технологий…
Начиная
Для вашей среды разработки Python создайте новый ответ с помощью Python (указан в разделе Популярные языки).
Если вы не читали сериал о Гарри Поттере, Сортировочная шляпа Хогвартса делит учеников Хогвартса на четыре разных факультета в зависимости от их доминирующих личностных черт: Гриффиндор (храбрые люди) , Когтевран (прилежные люди), Хаффлпаффец (верные люди) и Слизерин (хитрые / амбициозные люди).
Итак, по сути, мы собираемся создать личностную викторину. Если вам не нравится Гарри Поттер, вы все равно можете следовать и изучать код Python и, возможно, изменить вопросы, чтобы сформировать еще одну личностную викторину (например, какой персонаж Друзья вы ?).
Переменные
Первое, что мы сделаем в нашем Python repl, - объявим наши переменные. Переменная - это контейнер для значения, которое часто изменяется в процессе выполнения программы.
Я собираюсь создать переменную для каждого дома Хогвартса, и каждая переменная будет хранить число, которое отслеживает, сколько ответов пользователь дал, соответствующих конкретному дому.
Например, пользователь, который выбирает в основном «а», будет отсортирован по гриффиндорцу, поскольку ответы «а» соответствуют гриффиндорским чертам характера. В этом случае переменная gryffindor
будет увеличена (или увеличена) на единицу.
Каждая переменная начинается с нуля. Введите этот код в свой ответ:
gryffindor = 0 ravenclaw = 0 hufflepuff = 0 slytherin = 0
Строки и пользовательский ввод
Теперь, когда наши переменные объявлены, мы можем задать пользователю наш первый вопрос. В нашем коде мы представим вопрос в виде строки. строка - это тип данных (например, число), представляющий буквы, слова или фразы в двойных кавычках. Вот вопрос, который я хочу задать (пока не вставляйте его в свой код):
"How would you describe yourself? a) brave, b) studious, c) loyal, or d) ambitious?"
Я могу использовать функцию Python print
для печати этой строки на странице, но я хочу, чтобы пользователь набрал письмо, чтобы ответить на мой вопрос. К счастью, в Python есть input
функция, которую я могу использовать для хранения ответа пользователя в переменной. Вот как я могу задать первый вопрос:
q1_answer = input("How would you describe yourself? a) brave, b) studious, c) loyal, or d) ambitious?")
Мы только что объявили новую переменную q1_answer
. Все, что пользователь вводит в ответ на вопрос, будет сохранено в этой переменной.
После того, как вы введете приведенный выше код в свой ответ, запустите программу и посмотрите, что произойдет!
Так круто! Было бы неплохо, если бы текст был больше растянут, правда? Например, если бы мы могли добавить некоторые символы возврата каретки (техническая особенность того, что происходит, когда вы нажимаете клавишу возврата)?
Хорошая новость в том, что мы можем! Когда мы пишем \n
в строке, это похоже на нажатие клавиши возврата. Отредактируйте последнюю строку кода, чтобы включить в нее некоторые символы возврата каретки:
q1_answer = input("How would you describe yourself? \na) brave \nb) studious \nc) loyal \nd) ambitious\n")
Теперь снова запустите вашу программу:
Намного лучше!
Условные
Итак, мы сохранили первый ответ пользователя в q1_answer
. Но что нам с этим делать? Нам нужно обновить переменные для всех домов, верно? Но как узнать, какую домашнюю переменную обновлять?
Что ж, я пишу тест, чтобы привести к такому результату:
- В основном А → Гриффиндор
- В основном B → Когтевран
- В основном C’s → Хаффлпафф
- В основном D’s → Слизерин
Поэтому, если пользователь вводит «а», я хочу увеличить (увеличить) переменную gryffindor
. В противном случае, если пользователь вводит «b», увеличивайте переменную ravenclaw
. В противном случае, если пользователь вводит «c», увеличивайте значение переменной hufflepuff
. В противном случае, если пользователь вводит «d», увеличивайте значение переменной slytherin
.
Оказывается, мы можем легко перевести эти методические предложения в код. Используя условные выражения, которые состоят из операторов с if
, elif
(иначе, если) и else
, мы можем заставить компьютер выполнять определенные действия только при определенных условиях.
Например, я могу написать «если пользователь ввел« a », увеличьте переменную gryffindor
на единицу» в Python следующим образом:
if q1_answer == "a": gryffindor = gryffindor + 1
Несколько замечаний. Во-первых, двойной знак равенства ==
в первой строке не является опечаткой. Мы уже использовали одинарный знак равенства =
, чтобы присвоить переменным их исходные значения (0). Чтобы компьютер знал, что я проверяю на равенство (не присваивая новое значение), я должен использовать двойной знак равенства ==
.
Убедитесь, что вы не забыли двоеточие в конце первой строки и отступ в начале второй строки! В отличие от других языков программирования, в Python очень важны отступы, поэтому обязательно используйте отступ после операторов if / elif / else.
Продолжая читать во второй строке, программисты выполняют такие операции, как gryffindor = gryffindor + 1
, так часто, что для них есть ярлык. Вместо того чтобы повторять имя переменной, я могу просто сказать gryffindor += 1
, что является сокращением от «сделать gryffindor
равным самому себе плюс один».
Итак, лучший способ начать наш код будет:
if q1_answer == "a": gryffindor += 1
Хорошо, теперь нам нужно добавить другие параметры. На этом этапе мы можем начать говорить elif
(иначе, если), потому что мы хотим присоединить эти операторы к первому оператору if
.
После того, как вы добавили приведенный выше код в свой ответ, продолжайте, добавляя следующие строки:
elif q1_answer == "b": ravenclaw += 1 elif q1_answer == "c": hufflepuff += 1 elif q1_answer == "d": slytherin += 1
Убедитесь, что все ваши операторы if / elif имеют одинаковый отступ (нет) и что все операторы приращения переменных имеют отступ.
Крайний случай: что, если пользователь допустит опечатку и напишет что-то другое, кроме одного из вариантов букв? Давайте добавим последнее предложение else
в качестве обобщающего для любого другого ответа, содержащего сообщение об ошибке:
else: print("Sorry, I don't understand that answer.")
Поздравляем, вы только что написали набор условных операторов!
Прежде чем продолжить, убедитесь, что ваш код имеет такой же отступ (иначе у вас возникнут проблемы позже):
if q1_answer == "a": gryffindor += 1 elif q1_answer == "b": ravenclaw += 1 elif q1_answer == "c": hufflepuff += 1 elif q1_answer == "d": slytherin += 1 else: print("Sorry, I don't understand that answer.")
Добавление дополнительных вопросов
Отказ от ответственности: этот раздел будет включать повторное использование частей нашего кода (возможно, путем копирования и вставки!). Обычно хорошие разработчики никогда не копируют и не вставляют код, а превращают многократно используемые части своего кода в функции. Но пока мы опустим функции, хотя вы можете попробовать добавить их позже.
Мы собираемся добавить еще два вопроса в нашу викторину, используя ту же общую процедуру, что и раньше. Не стесняйтесь изменять эти вопросы и ответы, чтобы добавить свой творческий подход или в соответствии с целями вашей конкретной викторины.
Во втором вопросе мы сохраняем наш результат в q2_answer
и увеличиваем соответствующую переменную дома Хогвартса:
q2_answer = input("What can you be found doing on the weekends? \na) Going on adventures \nb) Doing my homework \nc) Spending time with family or friends \nd) Plotting revenge on my enemies\n") if q2_answer == 'a': gryffindor += 1 elif q2_answer == 'b': ravenclaw += 1 elif q2_answer == 'c': hufflepuff +=1 elif q2_answer == 'd': slytherin +=1 else: print("Sorry, I don't understand that response.")
В третьем вопросе мы сохраняем наш результат в q3_answer
и увеличиваем соответствующую переменную дома Хогвартса:
q3_answer = input("What would you do if the Dark Lord was going to invade your school? \na) Fight him \nb) Look up some good defensive curses in a book \nc) Stand by my friends no matter what \nd) Help the Dark Lord invade the school as an inside spy\n") if q3_answer == 'a': gryffindor += 1 elif q3_answer == 'b': ravenclaw += 1 elif q3_answer == 'c': hufflepuff +=1 elif q3_answer == 'd': slytherin +=1 else: print("Sorry, I don't understand that response.")
Не стесняйтесь добавлять свои собственные вопросы, прежде чем рассортировать пользователя по его дому в Хогвартсе!
Распределение пользователя по дому
Теперь, когда мы увеличили наши переменные gryffindor
, ravenclaw
, hufflepuff
и slytherin
, будем надеяться, что одна из этих переменных больше другой, чтобы отразить, где в конечном итоге будет отсортирован пользователь.
Для каждого дома мы должны сначала определить, имеет ли эта переменная дома (например, gryffindor
) большее число, чем переменная для любого другого дома. Эта необходимость приведет к появлению очень неуклюжих условных операторов.
Чтобы определить, принадлежит ли пользователь Гриффиндору, мы должны сказать:
if gryffindor > ravenclaw and gryffindor > hufflepuff and gryffindor > slytherin: print("GRYFFINDOR!!!!!!")
Понимаете, что я имел в виду под неуклюжим? Как всегда, будьте осторожны с выемками.
Мы можем продолжить с другими домами, используя elif
утверждения. После ввода приведенного выше кода в свой ответ добавьте следующий код:
elif ravenclaw > gryffindor and ravenclaw > hufflepuff and ravenclaw > slytherin: print("RAVENCLAW!!!!!!") elif hufflepuff > gryffindor and hufflepuff > ravenclaw and hufflepuff > slytherin: print("HUFFLEPUFF!!!!!!") elif slytherin > gryffindor and slytherin > ravenclaw and slytherin > hufflepuff: print("SLYTHERIN!!!!!!")
Но у нас было всего три вопроса, а что, если ни одна из переменных не превосходит все остальные? Что, если бы пользователь выбрал один ответ Гриффиндора, один ответ Равенкло и один ответ Слизерина?
Мы должны использовать оператор else
как универсальный для других результатов:
else: print("Too difficult to decide... Maybe this quiz needs more questions.")
Но это разочаровывающий результат для пользователя, который нашел время, чтобы пройти ваш тест. По крайней мере, мы могли сказать им, как они забили. Для этого мы собираемся использовать новый тип данных под названием список.
Внесение наших домов в список
Мы хотим иметь возможность быстро сообщить пользователю любой дом, для которого он выбрал вариант. Для этого мы собираемся проверить значение каждой домашней переменной, чтобы убедиться, что оно больше нуля. Если оно больше нуля, мы собираемся добавить название дома в тип данных, называемый списком, и это именно то, на что оно похоже.
Во-первых, нам нужно инициализировать (или создать) пустой список. Помните, что мы все еще работаем над веткой else
, поэтому убедитесь, что ваш код имеет отступ при вставке!
houses = []
Теперь у нас есть переменная с именем houses
, которая содержит пустой список.
Затем мы хотим проверить каждую из наших переменных - gryffindor
, ravenclaw
, hufflepuff
и _38 _ - чтобы увидеть, какие из них больше нуля. Если переменная больше нуля, я хочу добавить это название дома в наш список houses
, потому что это означает, что пользователь выбрал по крайней мере один вариант для этого дома.
Чтобы добавить «Гриффиндор» к нашему списку, если оно больше нуля, я могу сказать:
if gryffindor > 0: houses.append("Gryffindor")
Я могу сделать то же самое с другими домами, но на этот раз я не хочу использовать elif
. elif
будет выполняться, только если первый if
оператор не запустится, а я хочу, чтобы выполнялись ВСЕ операторы. Вставив приведенный выше код, продолжайте добавлять следующий код:
if ravenclaw > 0: houses.append("Ravenclaw") if hufflepuff > 0: houses.append("Hufflepuff") if slytherin > 0: houses.append("Slytherin")
Опять же, будьте осторожны с отступом - убедитесь, что все операторы if
имеют одинаковый отступ, а все операторы append
имеют отступ под каждым оператором if
.
Теперь houses
должен содержать все потенциальные дома, за которые пользователь набрал очки. Последнее, что я хочу сделать, это рассказать пользователю обо всех возможных домах, в которых они могли бы находиться. Я скажу:
print("You could have been in...")
А теперь я хочу пройтись по списку (это называется итерацией по списку) и распечатать каждый дом, который содержится в списке. Все, что мне нужно сделать, это сказать:
for house in houses: print(house)
Следите за отступом!
Этот код сохранит каждый дом в списке houses
как временную переменную house
по порядку, а затем распечатает дом.
Помните, что мы работали с оператором else
, поэтому, если вы хотите, чтобы этот код выполнялся только тогда, когда для пользователя нет других вариантов, убедитесь, что ваш код имеет соответствующий отступ!
Проверьте свой код, чтобы убедиться, что он работает. Попробуйте приземлиться в одном доме или вызовите ветку else
, в которой перечислены все дома!
Устраните все возникающие сообщения об ошибках. Если сообщений об ошибках нет, но ваша программа по-прежнему ведет себя странно, дважды проверьте отступ. Если ничего не помогает, сравните свой код с кодом решения.
Поздравляем с написанием полнофункционального приложения Python!
Расширения испытаний
- Добавьте больше вопросов в свою викторину, чтобы получить более точный результат.
- Узнайте, что такое функция в Python и реорганизуйте свой код, чтобы ответ на каждый вопрос перешел в функцию, увеличивающую соответствующую переменную.
- Узнайте, что такое словарь в Python и используйте его, чтобы отслеживать счетчики для каждой переменной дома. Затем прокрутите словарь, чтобы найти переменную с наибольшим счетчиком в конце.
- Напишите новый тест на личность Python, который проверяет что-то еще! Расскажите о своей любимой книге, фильме, телешоу и т. Д.
- Напишите викторину по Python по теме, о которой вы знаете много (или мало!).