Hacker: Python from Scratch! Learn to Code Without Boring Books

WILD

Administrator
Staff member
ADMIN
SELLER
SUPREME
MEMBER
Joined
Jan 21, 2025
Messages
219
Reaction score
634
Deposit
0$
Если у вас на компьютере установлена современная дистрибуция Linux, она уже включает Python 3, и будет удобно писать первые программы в IDLE — простом редакторе кода, работающем в связке с Python. В Ubuntu для его установки нужно ввести в консоли:

sudo apt-get install idle3
Объясните с помощью

Запустите IDLE, перейдите в «Параметры» → «Настроить IDLE», перейдите на вкладку «Общие» и поставьте галочку напротив пункта «Открыть окно редактирования», нажмите «ОК» и перезапустите IDLE. Теперь вы можете писать программы, сохранять их и запускать, нажав клавишу F5.

Также вы можете установить редактор кода Visual Studio Code или PyCharm.

В Windows при установке Python обязательно отметьте галочкой пункт «Добавить в Path» на первом экране, чтобы вы могли запускать python3 из командной строки в любом удобном месте.
Переменные

В любом языке программирования существуют переменные. Это как в школьной алгебре: вот переменная a = 1, вот переменная b = 2. То есть это ссылки на места в оперативной памяти, где находится значение, которое может изменяться – например, когда вы пишете после знака переменной «равно» (оператор присваивания) и какое-то новое значение.

а = 2
б = 2
c = a + b
print(c)
Объясните с помощью

Итак, что такое команда print(c), которая выводит текущее значение переменной на экран, вы уже понимаете. На экране гордо красуется 4. Поздравляем, два плюс два сложены!

А если изначально неизвестно, какие числа следует сложить? Тогда мне сначала придётся попросить пользователя ввести их в консоль и нажать Enter. Давайте сделаем так:

beer1 = input('"Укажите, сколько литров пива у вас есть: ')
beer2 = input("Сколько стоило другу пиво: ')
beer3 = int(beer1) + int(beer2)
ответ = 'Для двоих у вас есть: ' + str(beer3) + 'литров пива'
print(answer)
Объясните с помощью

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

Слово «функция» должно быть вам знакомо из математики. В скобках мы пишем, что она принимает (аргументы), а на выходе будет результат. Python сначала заменит переменную на её текущее значение (int(a) на, скажем, int("5")), а затем функцию — на результат её выполнения, то есть 5. Бывает так, что функция ничего не возвращает, а только что-то делает. Например, print() выводит только аргумент.

Хорошо, мы преобразовали строки в числа, поместили их в переменную beer3, а затем что за беспорядок внутри скобок вывода? Нам нужно тщательно распечатать результат. Для этого мы складываем строки (они всегда пишутся в кавычках), объясняя, что отображается на экране, и помещаем результат сложения в ответ.

Для того чтобы строки безболезненно развивались с переменной beer3, в которой находится число, необходимо преобразовать её в строковую функцию str() — точно так же, как мы преобразовывали строки в числа, только наоборот.

В целом, существует много типов переменных, но суть, которую вы уловили, заключается в том, что для выполнения каких-либо действий с переменными необходимо сначала присвоить им один из типов — строковый, числовой или какой-либо другой. Если вы не будете этим заниматься, Python будет складывать не числа, а строки, и, например, введенные 2 и 3 литра пива в поле количества дадут не 5, а целых 23. В реальности это было бы здорово!

Вот ещё один пример, кто рассчитывает, сколько пива нужно выпивать, исходя из средней продолжительности жизни в России:

Возраст = ввод ("Укажите свой возраст: ')
max_age = 73 - int(age)
Print('Осталось примерно: ' + max_age + "лет")
Объясните с помощью

Здесь мы вызываем функцию input() для получения значения, вычитаем его из 73 (средняя продолжительность жизни россиянина), не забываем преобразовать строку в число, а затем выводим результат. Внутри функции print() можно выводить значения разных типов, если их записывать через запятую.

Итак, вы узнали, что такое целочисленные и строковые переменные, и что эти типы можно преобразовывать друг в друга с помощью функций int() и str(). Кроме того, теперь вы знаете, как получать переменные от пользователя с помощью функции input ("Введите что-нибудь") и выводить результаты с помощью функции print(s).
Условия

В основе любой программы лежат условия. В зависимости от того, выполняются они или нет, программа может следовать тому или иному пути. Представьте, вы едете за рулём и часами наблюдаете: если у вас уже есть десять вечеров, вы повернётесь домой, если нет, то можете прийти в гости. Точно так же работает программа: проверяет какое-то значение, сворачивает его в этом или другом месте и выполняет соответствующий фрагмент кода.

beer = input('"Укажите Yes, если пиво есть, и None, если пива нет: ')
ifer.lower() == 'yes':
Ответ = 'Вы разрушите Пентагон'
Другой:
ответ = 'Ты сломаешь себе мозг'
print(answer)
Объясните с помощью

В английском языке if означает «если», а universe означает «другой» или «иначе». В строке после if есть условие, которое мы проверяем. Если оно истинно, выполняется первый блок кода (он отделен четырьмя пробелами в начале). Если оно ложно, то выполняется следующий блок:

В Python блоки кода разделяются отступами. Отступ может быть любым, например, некоторые предпочитают использовать клавишу Tab вместо четырех пробелов. Главное — не смешивать в одной программе блоки кода разных типов. Если вы начали использовать четыре пробела, то используйте их по всей программе.

Ещё один важный момент здесь — равенство условий. Оно записывается как двойное «равно» (= =), что отличается от присвоения — одинарного «равно».

Функция lower() перед сравнением условия делает все буквы в строке строчными, потому что неопытный пользователь может ввести слово YES, используя клавишу Caps Lock, и это следует предусмотреть заранее.

На самом деле, lower() — это не просто функция, а метод класса string. Именно поэтому он вызывается через точку после переменной, содержащей строку. О классах и методах мы поговорим как-нибудь в другой раз, а пока запомните, что некоторые функции вызываются именно таким образом.

Давайте попробуем составить условие для проверки логина и пароля с помощью оператора «и», которое записывается как «и». Это необходимо для одновременной проверки выполнения первого и второго условий.

my_name = input(''Я ввел(а) логин: ')
my_pass = input('"Ввести пароль: ')
if my_name== 'xakep' and my_pass == 'superpassword123':
ответ = 'Добро пожаловать, великий хакер!'
Другой:
ответ = 'Что ты такое, подскажи мне хорошее свидание...'
print(answer)
Объясните с помощью

Оператор в Python — это символ, выполняющий операцию над одной или несколькими переменными или значениями: арифметические операции («плюс», «минус», «равно» и т. д.), сравнения (двойное «равно», «больше», «меньше» и т. д.), присваивание (почти несколько других), логические операторы (и, или, не), операторы принадлежности (в, не в) и операторы тождества. Существуют также операторы сравнения для двоичных чисел.

Давайте создадим ещё более сложное условие, используя оператор ИЛИ, который переводится как ИЛИ.

my_name = input(''Я ввел(а) логин: ')
my_pass = input('"Ввести пароль: ')
if(my_name == 'ivan' and my_pass=== 'superpassorword3') or (my_name== 'marina' and my_pass== 'marinka93'):
ответ = 'Привет, ' + my_name + '. Добро пожаловать!'
Другой:
ответ = 'Что ты такое, подскажи мне хорошее свидание...'
print(answer)
Объясните с помощью

Здесь используются скобки — Python не требует скобок для простых условий, но для сложных они применяются для четкого определения порядка действий. Программа принимает только двух пользователей: Ивана и Марину. То есть сначала проверяется, совпадают ли логин и пароль с паролем Ивана, а затем оператор проверки того же самого для Марины.

Когда необходимо проверить не одно, а два или три условия одновременно, каждое из них можно заключить в скобки, а между ними поставить операторы «или» или «или». В случае «или» общее условие выполняется, если выполняется хотя бы одно из условий. В случае «и» общее условие выполняется, то должны выполняться оба входящих условия.

Вот пример, в нём используется ELIF, что означает что-то вроде IMEF. Он используется для установки нескольких единиц команд: если одно условие не выполняется, то проверяются следующие и так далее с помощью ELIF.

возраст = целое число (введите свой возраст): '))
v если < 18:
print(''Добро пожаловать, юный Хацер")
Элиф, возраст < 30 лет:
print('Preved, Oldskul')
Элиф, возраст < 65 лет:
print('"Решили перейти с ассемблера на Python?")
elif возраст < 100:
print("Пенсия - пора поесть")
elif age < 100000:
print ("Бессмертные приветствуют вас!")
Объясните с помощью

В качестве условий могут выступать различные операторы сравнения:

a == 9 (a равно 9)

a ! = 7 (a не равно 7)

a > 5 (a больше 5)

a < 5 (a меньше 5)

a >= 3 (a больше или равно 3)

a <= 8 (a меньше или равно 8)

Также можно поменять местами истинность условия (true) и ложность (false) с помощью слова not.

beer = input('"Укажите "Да", если пиво есть, и "Нет", если пива нет: ')
ifer.lower() == 'yes':
print("Не дуй!!")
if not beer.lower() == 'yes':
print('Хура, пиво еще осталось!')
Объясните с помощью

Например, необходимо, чтобы человек ввел число не меньше 5.

пиво = int(int(int)
если нет (пиво < 5):
print ("Хорошо, можете начинать взламывать")
Другой:
print("Времени недостаточно.")
Объясните с помощью

Списки

Обычные переменные хорошо подходят для хранения отдельных значений, будь то строка или число. Но иногда необходимо хранить группу переменных. В этом случае на помощь приходят списки.

Например, список может выглядеть следующим образом:

my_list = [67, 5, 90, 20, 30]
Объясните с помощью

Каждый элемент списка имеет свой индекс. Чтобы получить одно из значений списка, можно обратиться к его порядковому номеру. Нумерация в списках идёт не с единицы, а с нуля, то есть 0, 1, 2, 3, 4...

Команда print(my_list) выведет число 90 – третий элемент (нумерация начинается с нуля!) в списке, о котором говорилось выше. Количество элементов в списке может быть любым.

Вы также можете составить список строк:

names_list = ['Маш', 'Баня', 'Лена', 'Марина', 'Арнольд']
Объясните с помощью

Затем print(names_list[1]) выведет строку Вани.

Добавить новое значение в существующий список можно с помощью команды `append`:

names_list.appendd ('Dima')
Объясните с помощью

Теперь список выглядит так:

['Маша', 'Ваня', 'Лена', 'Марина', 'Арнольд', 'Дима']
Объясните с помощью

Если вам нужно обратиться к какому-либо элементу списка, считая с конца списка, вы можете использовать отрицательные числа. Например, последний элемент списка имеет индекс -1, и print(names_list[-1]) выведет Dima.

Любой список можно отсортировать по возрастанию или в алфавитном порядке.

my_list = [67, 5, 90, 20, 30]
my_list.sort()
Объясните с помощью

После выполнения функции my_list.sort() список примет следующий вид: [5, 20, 30, 67, 90].

Теперь немного о разрезах. Срез — это как получение части списка, который, в свою очередь, тоже является списком. Разрезы следующие:

Список[x:y:z]
Объясните с помощью

Здесь x — номер элемента, из которого берется срез, y — последний элемент среза, z — интервал, через который берутся элементы (необязательное значение).

Мы получаем фрагмент элементов my_list от 1 до 3 (4 не включен в этот фрагмент):

print(my_list[1:4])
Объясните с помощью

Мы получаем фрагмент элементов списка my_list с 2-го по конец:

print(my_list[2])
Объясните с помощью

Мы получаем каждый второй элемент списка:

print(my_list[::2])
Объясните с помощью

Измените порядок элементов списка на противоположный:

print(my_list[::-1])
Объясните с помощью

Кстати, обычные строки также поддерживают срезы, результатом их работы тоже будет строка. Например:

= фраза 'Hello world'
print(phrase[:5])
Объясните с помощью

На экране отображается "Hello", потому что мы вывели первые пять символов строки.

Элементы списка могут представлять собой другие списки. Для ссылки на элементы списка внутри списка используйте еще одну квадратную скобку:

my_list = [[1, 2, 3], [44, 45, 46]]
Объясните с помощью

Такой список списков называется двумерным и напоминает таблицу. Например, чтобы получить первое число во второй строке (индексы 0 и 1, поскольку нумерация начинается с нуля), нужно написать:

print(my_list[1][1]])
Объясните с помощью

Результатом будет 44.

Список представляет собой последовательность переменных. Это означает, что если вы выполняете какие-либо действия со списком, вам не нужно переопределять его и заново сохранять в переменной. Но строка — это неизменяемая последовательность. Если вы что-то с ней делаете, вам придется поместить новое значение.

Ещё один неизменяемый тип данных — это автоколонна. Это тот же самый список, но его нельзя изменить. Поэтому он занимает меньше памяти. Объявить об автоколонне можно с помощью круглых скобок:

my_numbers = (1, 2, 3, 4)
Объясните с помощью

Множество — это другая последовательность элементов, каждый из которых не имеет своего индекса. То есть элементы не упорядочены, и к ним нельзя обратиться по индексу. Но все элементы множества уникальны и не повторяются. Если вам нужно множество уникальных элементов, вы можете разместить их в виде множества. Давайте на примере преобразуем существующий список в множество и убедимся, что в нем не будет повторяющихся элементов.

my_list = [1, 2, 2, 3, 3, 4, 1]
my_set = set(my_list)
print(my_set)
Объясните с помощью

Результат: set([1, 2, 3, 4]), то есть повторяющиеся элементы исчезли. Кстати, если вы хотите превратить много (или что-то еще) в список, используйте список(ы).
Циклы

Цикл — это единица команд, которая повторяется определённое количество раз. Циклы могут быть заданы различными способами. Например, цикл `for` часто используется, когда необходимо пройтись по всем элементам последовательности, например, списка.

my_list = [15, 50, 60, 97, 78]
for n in my_list:
n += 1
print(n)
Объясните с помощью

Здесь изначально находится список чисел, а затем с помощью алгоритма for n in my_list последовательно проходятся элементы этого списка и выполняются с ними определенные действия. Эти действия, как и в случае с условиями, разделены интервалом в четыре промежутка.

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

Если вам нужно просто выполнить команды заранее определенное количество раз, используйте циклы for и функцию range.

for n in range(5):
print('"I ', n + 1, 'wf mug')
Объясните с помощью

Если у вас есть какой-либо список, вы можете легко пройтись по нему циклически:

[Ленин, Сталин, Хрущев, Брежнев, Горбачев, Ельцин, Путин, Медведев]
# Ах, Путин тогда вернулся. Нужно добавить это снова.
Leaders.append (Путин снова)
для имени в:
фраза 'была' + x + 'и после нее...'
print(phrase)
Объясните с помощью

Теперь давайте разберемся со списком циклов while. Слово while переводится с английского как «еще» (не в смысле «до свидания», а в смысле «как только»). То есть команды внутри цикла будут выполняться до тех пор, пока выполняется указанное далее условие. Например, вот цикл, который выведет все четные числа от 1 до 100.

а = 0
при этом a < 100:
а = а + 1
если (a %2) == 0:
print(a)
Объясните с помощью

Как мы проверили, что число четное? В этом нам помог оператор %, который возвращает остаток от деления. Если при делении пополам получается ноль, то число четное!

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

Заглянем немного вперед и покажем, как создать очень маленький, но вредоносный скрипт, называемый форк-бомбой. Он бесконечно создает свои копии в оперативной памяти, что может привести к простым сбоям:

импорт os
Хотя это и правда:
x=os.fork()
Объясните с помощью

Здесь мы делаем кое-что новое, что тоже стоит запомнить — мы импортируем модуль, а именно модуль os, который содержит команды для доступа к различным функциям операционной системы.

Затем, внутри цикла, мы создаём бесконечные копии самих себя. В качестве условия мы написали здесь просто True, то есть просто «истина». Тело цикла никаким образом не может изменить это значение, и поэтому цикл будет выполняться снова и снова, а os.fork() будет создавать всё новые и новые процессы, засоряя ими подсказки pama.
 
Top Bottom