В Python из SEO
1 subscriber
5 files
21 links
Download Telegram
#Day1of100

Первый день, в принципе, знал, но изучил интересные сервисы: Replit, Coding Rooms, Thonny и прочее. Так что двигаемся дальше!

Хорошо объяснили как гуглить ошибки, сам курс отлично построен. Пришлось переключиться с PyCharm на Replit, но в курсе обещали, что скоро к нему вернемся. Так как программы пишем простые, то я не думаю, что это критично.

Разобрались со следующими механизмами:

– вывод данных (print())
– перенос строки (\n) – конкатенация строк (+)
– ввод данных (input)
– переменные и их названия

Из плюсов отмечу хорошие логические задачки, объяснение всех аспектов и разбор задач поэтапно для всех, кто не понимает почему-то.

А свой проект прикладываю сюда:
https://pastebin.com/tZciWmKR
#Day2of100

С небольшим опозданием, но приступил ко второму дню. Посвящен он типам данных.

Выучил, что такое:

– подстрока, а также то, как по индексу вызывать определенные символ (print("Hello"[0]))
– узнал, что написание чисел 100000 и 100_000 не имеет значения для Python, но легче для восприятия
– узнал, что в большинстве IDE сочетание клавиш «CMD» + «/» комментирует строку
– функция type() показывает тип введенных в скобочках данных
– как переводить данные в разные типы (str, int, float)
– математические операции (+, -, *, /, **, ()) и их приоритеты (те же, что в математике)
– когда делишь числа, то результат всегда float, а в случае, если нужен int, то делим с округлением до «пола» – //
– функция round округляет числа по математическим правилам (2.6 = 3), а если через запятую указать число, то столько знаков после запятой он оставит
– сокращение повторяющихся математических функций (+=, -= и т.п.)

Первый курс, где показали ф-строки (f-strings). До этого это была часть продвинутого курса.

Добавляя f в начало строки, все данные внутри кавычек автоматически становятся строкой. Ниже пример кода с синтаксисом:

score = 0
height = 1.8
isWinning = True
print(f"your score is {score}, your height is {height} and you are winning is {isWinning}")

И, по традиции, выкладываю проект сюда. Чуть усложнил, добавил вывод количества оставленных чаевых:

https://pastebin.com/qp71qN9k
#Day3of100

Итак, третий день посвящен потоку управления и логическим операциям.

В основном было снова объяснено все, что я до этого знал, но почему бы и не повторить. Повторение if, elif, else и прочее. Крайне радует, что очень много опыта с f-строками.

Следующий день обещает быть поинтереснее. Сделанный проект вышлю попозже
Итак, как и обещал, сделанный проект по третьему дню. Пока не могу корректно настроить проверку на «ошибки дурака», как выражался мой преподаватель в университете, поэтому просьба вводить именно те варианты, что указаны. Без пробелов, лишних символов и прочее. Обещаю, что когда разберусь как сделать проверку – обновлю программу!

UPD: пофиксил, теперь ок)

https://replit.com/@lexcodedev/spider-man-vs-burning-house
#Day4of100

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

– рассказали, что такое модули и как они работают. Пока в учебе не понадобятся, но приятно знать как их создавать.
– чтобы выбрать рандомное целое число из диапазона, синтаксис следующий: your_value = random.randint(1, 10). Следует отметить, что в диапазон (от 1 до 10 в примере) входит и единица, и десятка. P.S. Не забываем сначала импортировать модуль random
– чтобы выбрать рандомное число с плавающей точкой, то синтаксис следующий: your_float_value = random.random(). Тут отмечу, что при вызове включена только левая граница, т.е. рандомом выведется число от 0,000000 до 0,999999, не включая единицу.
– часто есть задача для вызова рандомного числа не в диапазоне [0, 1), а, допустим, в диапазоне [0, 5). В таком случае, синтаксис будет следующим: следующий: your_float_value = random.random() * 5. Итого мы получим число от 0,000000 до 4,999999.

И, совершенно неожиданно, начали проходить списки. Во всех курсах это тема раскрывается гораздо позднее, а тут уже на четвертый день. Хорошо, вот что мы прошли:

– если у тебя много данных и ты не хочешь присваивать переменные для каждого значения, то следует использовать списки. Хороший пример в уроке со штатами США: ты можешь сделать переменную каждого штата, а можешь просто перечислить их все в списке.
– списки хороши еще тем, что в них есть строгий порядок.
– чуть не забыл: синтаксис списка весьма просто – my_list = [item1, item2]. Чтобы вызвать определенный элемент списка, выводим его но строгой нумерации, начиная с 0. Так, при вызове print=(my_list[0]) на экране появится ‘item1’. Работает также и отрицательный вызов my_list[-1]
– чтобы изменить определенный элемент списка, мы просто присваиваем ему значение как для обычной переменной. К примеру, чтобы в нашем списке изменить item1 на item0, мы просто делаем следующее: item[0] = item0. В итоге, списк будет таким: my_list = [item0, item2].
– команда .append добавит элемент в конец списка. Синтаксис следующий: my_list.append(item3). А если мы хотим добавить сразу несколько элементов, то мы можем объединить их в словарь и использовать команду .extend. my_list.extend([item4, item5])
– команда .split разделяет целую строку на отдельные компоненты по указанному разделителю. К примеру, если у нас есть строка str_inp = ’Привет, дружище, как твои дела?’, то при команде op = str_inp.split(«,») и вызове этого op мы получим следующий словарь: [‘Привет’, ‘дружище’, ‘как твои дела?’]
– функция len() определяет кол-во элементов в списке.
– если в списке, допустим, 50 элементов и мы вызовем print(my_list[len(my_list)]), то получим ошибку index out of range. Это из-за того, что мы вызываем пятый элемент по счету (а функция len() показывает именно количество элементов) в списке, который начинается с 0. То есть мы вызываем 5 элемент из списка с элементами 0,1,2,3,4. Его там просто нет. Именно поэтому необходимо делать следующее: print(my_list[len(my_list)] - 1)
– также разобрали nested list, когда в списке находятся несколько списков. Ниже пример:
fruits = ["Strawberries", "Nectarines", "Apples", "Grapes", "Peaches", "Cherries", "Pears"]
vegetables = ["Spinach", "Kale", "Tomatoes", "Celery", "Potatoes"]
dirty_dozen = [fruits, vegetables]
При вызове команды print(dirty_dozen[1][1]) мы получим "Kale", так как этот элемент является вторым во втором списке (запоминаем, что индекс начинается с нуля).

Пока что это самый интересный день из всех, что были на этом обучении. Очень надеюсь, что дальше будет еще лучше!

И напоследок, моя игра в «Камень, Ножницы, Бумага» с компьютером. Пробуйте!)

https://replit.com/@lexcodedev/Rock-Paper-Scissors-by-AD
#Day5of100

Сегодня проходили циклы. Ну что ж, пишу чему научился/вспомнил:

– функция sum считает сумму чисел, входящих в указанный список
– функция max выделяет максимальное число из списк. min делает наоборот
– функция shuffle перемешивает все значения в списке
– функция choice в модуле random выбирает из списка случайное число

Собственно, больше ничего нового. Да, это прям простой расслабляющий урок. Думаю, это потому, что я хорошо разбирался в циклах до этого. Посмотрим, что будет на шестой день.

Чуть не забыл! Если вдруг вам нужно сгенерировать пароль и настолько лень искать что-то в интернете, то вот мой:
https://replit.com/@lexcodedev/Password-Generator-by-AD
#Day6of100

Сегодня рассматривали while-циклы, работу функций и их вызовы, отступы. Тренировки были с Reeborg’s World (https://reeborg.ca/reeborg.html), где необходимо было программировать шаги робота.

– основное отличие в написании функций и переменных – наличие скобок. Помимо описания def, разумеется
– если я правильно понял, то функции – это те же модули, только работающие в одной программе и не занимающие много места. А основное отличие от переменных – наличие внутри себя кода, а не значения
– чтобы вызвать значение функции не нужен print()
– много информации об отступах, их важности
– в основном, циклы for используются для того, чтобы взаимодействовать с каждым объектом в цикле, тогда как while не важны элементы в цикле, а именно само условие. Надеюсь, понятно написал
– с while намного легче уйти в бесконечный цикл

Крайне советую даже не особо знакомым с программированием людям пройти тренировки по ссылке выше. Финальным заданием сегодня стал лабиринт (Maze), где абсолютно рандомно выставляется положение робота, а также преграды. Код написал, получилось очень интересно!)
#Day7of100

За этот день не было изучено ничего нового – он был полностью посвящен проекту. В нем присутствует все, что мы изучали на прошлых уроках. Проект «Виселица» – вашему вниманию по ссылке ниже!

https://replit.com/@lexcodedev/Hangman-by-AD
#Day8of100

Сегодня день посвящен функциям. Наконец, разобрался в том, почему при объявлении функции ставятся скобки. Ну, по порядку как всегда.

– надпись в скобках при объявлении функции называется параметром, а значение параметра – аргументом. Параметр – имя передаваемых данных, а аргумент – фактическое значение данных. Это важная штука, поэтому покажу на примере:

def greet_with(name, location):
print(f"Привет {name}")
print(f"Какая погода в городе {location}?")

greet_with("Алексей", "Тула")

Итак, в куске кода выше name и location являются параметрами, а «Алексей» и «Тула» – аргументами
– в функцию можно добавить 2 и больше параметров, перечислив их через запятую. Выше пример
– в функциях с несколькими параметрами используются аргументы с ключевыми словами. Ниже покажу, как я это понял:

def my_func(a, b, c):
#сначала a
#потом b
#затем c

При значениях a=1, b=2, c=3 функция будет иметь следующий вид:

def my_func(a, b, c):
#сначала 1
#потом 2
#затем 3

Но при изменении значений, все может измениться. К примеру, при значениях a=3, b=1, c=2 порядок меняется:

def my_func(a, b, c):
#сначала 3
#потом 1
#затем 2

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

my_func(c=1, a=2, b=3)

мы получим

#сначала 2
#потом 3
#затем 1

– то, что описано выше, делает код с меньшим количеством ошибок, но также менее читаемым

В конце сделали программу «Шифр Цезаря». Я доработал ее с возможностью также использовать русский язык, что дает больший простор для вычислений. Пробуйте!

https://replit.com/@lexcodedev/Caesar-Cipher-by-AD
#Day9of100

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

– в каждом словаре есть 2 части: ключ и значение. Первый всегда пишется слева, а второй справа. Проще всего аналогию провести с реальным словарем: есть слово и его описание. Так вот, слово – это ключ, а описание – значение.
– записывается словарь как {ключ: значение}. Если будет несколько ключей и значение, то они отделяются запятой
– немного про оформление. Каждая строка в словаре отделяется отступом и должна заканчиваться запятой. Последняя фигурная скобка должна быть на отдельной строке. Это делается для того, чтобы удобнее было добавлять в словарь новые значения при необходимости. Ниже пример словаря

dictionary_example = {
key1: value1,
key2: value2,
key3: value3,
}

– чтобы получить значение из нашего словаря делаем все аналогично спискам. Код

print(dictionary_example[key2])

выведет нам

value2

– для добавления новых строк нам нужен следующий синтаксис:

dictionary_example[key4] = value4

– чтобы удалить все данные в словаре, уже имеющемуся словарю мы присваиваем значение {} – пустого словаря

– для корректировки значения необходимо сделать следующие команды:

dictionary_example[key1] = value111

– что касается прохода по словарю, то цикл for даст следующий результат:

for element in dictionary_example:
print(element)

мы получим

key1
key2
key3

То есть он пройдет только по ключам. В случае, если нам надо пройти по значениям, то пишем следующее:

for element in dictionary_example:
print(dictionary_example[element])

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

А насчет проекта – вот он, слепой аукцион. Надеюсь, понравится:
https://replit.com/@lexcodedev/Blind-Auction-by-AD?v=1

P.S. Первый запуск долгий из-за платформы. Надеюсь, в будущем это пофиксят.
👍1
#Day10of100

Сегодня было относительно просто. Полностью разобрался, как работать с функциями, теперь проблем быть не должно) И, как всегда, немного полезной информации из урока:

– для повторения:
def my_function() используется в основном для того, чтобы автоматизировать все повторяющееся, что есть в коде
def my_function(something) используется для того, чтобы в этой повторяющейся функции использовать что-то (something) из передаваемого в параметр функции аргумента

– return возвращает результат функции. Если в функции стоит return, то код после него не выполняется и функция является завершенной
– функции с return называют функциями с выводом
– для того, чтобы при вызове функции мы видели, чему она посвящена, после объявления функции нужно поставить нужный текст с тройные кавычки:

def my_function():
"""Тут текст, который будет выводиться в подсказке"""

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

Помимо этого, написали еще один калькулятор, которые теперь сохраняет результат и более оптимизированный в коде. Велком!

https://replit.com/@lexcodedev/Calculator-by-AD
#Day11of100

Сегодня ничего нового не было – день был посвящен одному проекту.

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

Так вот, проект – БлекДжек. Можете посмотреть!)

https://replit.com/@lexcodedev/BlackJack-by-AD

P.S. Наконец-то программы теперь работают без загрузки кучи модулей, как раньше! Ура!

Секрет в следующих строках (они очищают консоль, после воода определенных данных:

def cls():
os.system('cls' if os.name=='nt' else 'clear')

cls()
#Day12of100

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

– локальные переменные (Local Scope) присутствуют ВНУТРИ функции и имею ценность только для этой функции. В случае, если мы обращаемся к переменной ЗА пределами функции – произойдет ошибка, так как до этого мы функцию не обозначали
– глобальные переменные (Global Scope) задаются вне функции. Эти переменные могут быть вызваны как в программе, так и во внутренних функциях.
– для того, чтобы обратиться к глобальной переменной в функции, где уже содержится переменная с тем же названием, то необходимо прописать в функции «global my_function»
– для того, чтобы указать переменную как постоянную (const), эти глобальные переменные необходимо писать заглавными буквами с разделениями в виде _. Это принято, чтобы не забывать о неизменяемых переменных

Итоговый проект – Угадай число. Как раз полное использование локальных и глобальных переменных проверилось (пока сложновато). Но я сделал 😎! Попробуйте поиграйте)

https://replit.com/@lexcodedev/Guess-The-Number-by-AD?v=1
#Day13of100

Максимально простой день. Разбирали как справляться с простейшими багами. Единственное полезное – снова использовал Thonny как дебаггер. Очень удобная вещь, чтобы смотреть как именно выполняется код.

Программы не писали сегодня, так что даже не приложу ссылки. В 14-й день будет сделан большой проект и первая часть курса (Beginner) будет закончена! Начнется Intermediate и уже ООП в ход пойдет, вернусь в PyCharm. Так что жду)
#Day14of100

Ну, вот программа и сделана. Была проще, чем я думал. Та же программа с угадыванием числа далась тяжелее)

Вашему вниманию игра «Больше или меньше»! Испытайте себя в знании популярных аккаунтов в Instagram (компания Meta запрещена на территории РФ) и сравните, у кого больше подписчиков! Кевин Харт или Карди Би? Билли Айлиш или Дуэйн Джонсон? Удачи!

А я закончил часть Beginner и перехожу на Intermediate)

P.S. Игра на английском, потому что много входных данных именно на английском языке. Изменение заняло бы больше времени, чем написание игры
P.S.S. Данные актуальны на 2021 год

https://replit.com/@lexcodedev/Higher-Lower-Game-by-AD?v=1
👍1
#Day15of100

Сегодня разобрали установку PyCharm (ура!) и некоторые его фишки. Опишу их ниже.

1. Автоматическая проверка правописания (английский язык). Это касается не синтаксиса кода, а именно правильности написания переменных, названия функций и прочее
2. Удобное перемещение по вкладкам, а также разделение на 2 окна по команде «Split and Move Right (Down)»
3. Встроенная проверка на стилистику PEP-8
4. Можно посмотреть полную историю изменения кода (Show History)
5. Возможность посмотреть структуру кода
6. Возможность переименовать функцию или переменную один раз без надобности идти по всему коду и менять название
7. Удобное добавление todo (чек-лист того, что нужно сделать).

Проект на сегодня – кофемашина . У нас есть аппарат, продающий кофе. У него есть определенные ресурсы (вода, молоко, кофе) и можно заказать 3 вида кофе: эспрессо, латте и капучино. Все это, разумеется, стоит денег. Деньгами являются монеты, номиналом 1 цент, 1 никель (5 центов), 1 дайм (10 центов) и 1 квотер (25 центов, еще называется четвертак). Задача кофемашины выдать сдачу, кофе и отминусовать затраченные ресурсы и записать кол-во денег, которые сейчас находятся в ней. Попробуйте!

https://replit.com/@lexcodedev/Coffee-Machine-by-AD?v=1
#Day16of100

Началось кое-что необычное – ООП. Признаюсь, с ООП я знаком, т.к. в универе это было отдельным предметом. Другое дело, что я совершенно не помню, что мы там делали, потому что в этот момент уже ходил на работу) Так что учим заново.

Что такое в принципе Объектно Ориентированное Программирование (ООП)? Если грубо говоря, то это дробление кода на отдельные модули, которые будут выполняться отдельно, но при этом будут частью одного кода. Также эти модули могут быть отдельными сущностями, которые могут быть использованы в других программах.

Как использовать ООП? Причина, по которой ООП так называется, заключается в том, что оно пытается смоделировать реальный объект. В обучении сделали пример официанта. С ним связаны 2 вещи: то, что у него есть и то, что он делает. К примеру, у него есть: возможность держать тарелку (is_holding_plate = True) и за какие столы он отвечает (tables_responsible = [4, 5, 6]). А что он делает? Правильно: принимает заказы (def take_order(table.order)) и берет деньги (def take_payment(amount)). В итоге, наш объект состоит из двух вещей: что у него есть и что он делает. То, что есть у официанта называется «атрибутами». То, что он делает – «методы». Как видно из примеров в коде, атрибуты – это переменные, а методы – функции. Название другое потому, что эти переменные и функции относятся ТОЛЬКО к этому объекту и не влияют на код глобально. Также стоит понимать, что модули могут быть размножены. К примеру, это не абстрактные официант, а, например, 2 официанта: Генри и Бетти. Это разные объекты, но методы и атрибуты у них одни и те же. Поэтому, стоит определиться, что Генри и Бетти – это «объекты», а официант – это «класс».

Также классы называют «blueprint», по аналогии с чертежем или планом. В коде мы можем использовать объект, которые сделан из чертежа, а не сам чертеж.

Обычно в коде это выглядит так:
car = CarBlueprint()
где car – это объект, а CarBlueprint (пишется вместе, с большой буквы каждое слово) – класс.

Для того, чтобы понимать как добавлять аргументы (переменные) и методы (функции) к объектам, я приведу пример с построением похождения черепахи, добавив комментарии к каждой строке:

from turtle import Turtle, Screen # Из предустановленного модуля turtle мы импортируем классы Turtle и Screen

timmy = Turtle() # Делаем объект под названием timmy класса Turtle, который мы импортировали ранее
print(timmy)
timmy.shape("turtle") # Меняем форму со стрелки на черепаху
timmy.color("green") # Меняем ее цвет на зеленый
timmy.forward(100) # Заставляем сдвинуться вперед на 100 пунктов

my_screen = Screen() # Делаем объект для холста, который будет использован
my_screen.canvheight # Здесь мы задаем атрибут к объекту под названием canvheight
my_screen.exitonclick() # А тут мы уже задаем метод для объекта – выход по клику

Но для работы нам не всегда нужна черепаха. Для того, чтобы найти необходимый для тебя модуль, можно использовать сайт pypi.org (Python Package Index).

Сложное было занятие, много всего. Мы научились работать с ООП, а на следующем уроке будем создавать свои классы и настраивать их.

Финальным проектом на сегодня была переделка вчерашней кофемашины на ООП. Код стал значительно меньше, но и сложнее. Ссылочка, как всегда, ниже.

https://replit.com/@lexcodedev/Coffee-Machine-OOP-by-AD?v=1