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

Прежде всего, я разработчик Python среднего уровня, и этот курс в EdX в значительной степени не имеет большого значения для меня. Тем не менее, я решил продолжить этот курс для Computer Science XSeries, который состоит из двух курсов: введение в науку о данных и python. Я прошел этот курс MITx 6.00.1 в честь трека пару лет назад (может быть, в 2014 году), тогда это был python2, и я изучил основы программирования на python из этого курса. В данный момент этот курс находится на языке Python3, однако большинство рассматриваемых тем довольно фундаментальны для программирования. Если вы начинаете программировать или заинтересованы в этом, вам стоит попробовать этот курс. Если вы новичок, вы должны взять код чести, проверенный сертификат трека стоит около 75 долларов и платить за него только в том случае, если вы абсолютно уверены, что закончите курс. Без проверенного трека вы не сможете присутствовать на промежуточных и выпускных экзаменах. Таким образом, дорожка с кодексом чести вовсе не такая уж плохая сделка. Вы поймете основы компьютерного программирования на Python и узнаете, как его настроить, прежде чем решить, хотите ли вы следовать проверенному пути.

Почему я выбираю проверенный вариант, если уже знаю Python? Ну для начала хочу освежить свои базовые знания. Тем не менее, главная причина в том, что я хочу продолжить проверенный путь в науке о данных. Этот курс также является частью этого трека.

Вот ссылка на MITx 6.00.1x: https://www.edx.org/course/introduction-to-computer-science-and-programming-7

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

Итак, вот оно. Во-первых, промежуточные вопросы.

Промежуточный экзамен прошел относительно легко. Было несколько коротких вопросов типа MCQ, они были в основном сосредоточены на базовом понимании части python, я не буду писать о них здесь.

Первые две задачи были довольно простыми, особенно первая, twoQuadratics. Думаю, мне пришлось написать одну строчку кода за 10 баллов. Однако грейдер сломался, и я потратил 4 попытки, чтобы получить правильный ответ. Вторая проблема, deep_reverse, сравнительно немного более техническая, чем первая. Однако ответ по-прежнему состоял из трех строк. В Python есть встроенная функция реверса как раз для таких случаев. 20 простых оценок.

Третья проблема, uniqueValues, была немного сложной, я думаю, она стоила 15/20 баллов. Вопрос был в том, что есть словарь, где все ключи имеют целочисленное значение, и значение, которое эти ключи содержат, также является целым числом. например: {1:1, 2:2, 3:3}. Теперь мне нужно будет вернуть список ключей из этого словаря. Теперь я буду возвращать те ключи, связанные значения которых уникальны. Например, в приведенном выше случае я верну [1, 2, 3], поскольку все они содержат уникальные значения по сравнению друг с другом. Если нет уникального значения, вывод должен быть пустым списком. Чтобы решить эту проблему, сначала я решил скопировать все ключи, значения в два отдельных списка. Причина в том, что я хочу просмотреть списки значений, чтобы найти уникальные значения, и если я найду любые два неуникальных значения в этих списках, я сделаю что-то в списке ключей. Я думаю, что здесь все становится довольно сложно, поэтому я использую приведенный выше словарь в качестве примера. Итак, у меня есть два списка: key_list = [1, 2, 3] и val_list = [1, 2, 3]. Теперь для val_list[0] будет храниться значение для key_list[0]. Это поможет мне определить, какие индексы val_list не уникальны, и я могу исключить их из key_list. Теперь, если я найду какие-либо неуникальные значения в val_list, я не смогу «вытолкнуть» этот индекс из key_list. Тогда я не могу их больше связать. Итак, я решил писать «картофель» в индексах key_list всякий раз, когда в val_list есть два индекса, которые не уникальны. Это оставит некоторую «картошку» внутри списка ключей и несколько уникальных ключей или их отсутствие. Моя работа в основном здесь. Я просто прогоню еще один цикл через key_list, чтобы выяснить, есть ли внутри некартофельное значение, я добавлю их в другой список, отсортирую и верну. 15 баллов! Сначала я запустил пустой тестовый пример, потому что сначала не понял вопроса. Так что я сжег одну попытку на этом. Я думаю, что я закончил его с двух-трех попыток, не могу вспомнить! Кстати, здесь я использовал вложенный цикл, чтобы найти уникальные ключи, я почти уверен, что есть и другие классные способы сделать это. Я просто не был настолько заинтересован и терпелив, чтобы думать об этом. (Плохой программист!)

Последние две проблемы скрыли свои тестовые примеры, поэтому я не смог бы запустить их вхолостую. Каждый из них стоит 20 баллов. Задача 6 была рекурсивной, чрезвычайно простой, и они поставили ответ на вопрос. Они попросили вернуть НОД, наибольший общий делитель между двумя числами, a и b. Я использовал рекурсивную функцию, в итоге написал три строки за 20 баллов, я думаю, довольно мило. Во время тестирования я получил None в результате моей функции gcd, и это действовало мне на нервы. (У меня бессонница, и последние пару недель я мало спал!). Затем я понял, что ничего не возвращал, когда рекурсивно вызывал gcd! Что-то, на что стоит обратить внимание, когда вы кодируете это.

Последняя задача была самой напряженной. Я думаю, что переписал всю функцию пару раз. Либо потому, что я не получил правильный ответ, либо мне не понравился подход! (То, что я не сделал для задачи 5! типично). Проблема была в том, что мне нужно реализовать функцию, соответствующую определенным критериям. Моя функция — applyF_filterG(L, f, g), где L — список, а f и g — обе функции. Основными критериями являются мутации L таким образом, что для каждого элемента i, изначально находящегося в L, L содержит i, если g(f(i)) возвращает True, и никакие другие элементы. Я должен вернуть самый большой элемент внутри L или -1, если L - пустой список. Это выглядит как простая проблема, однако загвоздка в том, что я должен мутировать L. Я не мог сделать глубокую копию L. Я пробовал разные подходы, но вскоре понял, что не могу «вытолкнуть» некоторые значения из списка, когда Я прохожу через это. Итак, я написал ключевое слово, которое не помню, когда в последний раз использовал его. Я написал цикл while. Код был довольно простым, я использовал цикл while, чтобы пройти через L, используя индекс. Если g(f(L[index])) неверно, это значение будет извлечено из L, в противном случае индекс будет увеличиваться. Наконец, я возвращал -1, если L становилось пустым списком или максимальным значением L, используя функцию max. Забавно, когда я писал это логическое условие, g(f(L[index])), вместо того, чтобы писать L[index] внутри f(), я писал g(f(index)). Я не мог понять, что происходит, почему индекс не увеличивается и я теряю нулевое значение.

Хорошо, я набрал 97 процентов на этом экзамене! и этот пост становится все длиннее, и я устаю. Я заявил, что напишу о некоторых интересных наборах задач, думаю, я добавлю их в некоторые другие сообщения в блоге. Если ты здесь, то я благодарю тебя!

``Счастливого кодирования``