Шпаргалка по Python

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

Запрос данных у пользователя, и вывод на экран

x = input("Как вас зовут? ")
print(f"Привет, {x}") # вместо x подставляется имя 

или, например, так:

x = input("Введите значение")  # запросили

print("Вы ввели ", x, " число") # ну а теперь выводим

# то же самое, но в более читабельном виде
# в этом случае ставим f перед кавычкой, 
# а "х" оборачиваем в фигурные скобки 
print(f"Вы ввели {x} число")

вот так работает:

Обработка числового ввода

если работаем с числами, то должны не забывать про конвертацию

x = input("Введите значение: ")
x = int(x) # превращаем в число, если не превратить, то работать с числами не получится

sum = x + x
print(f"Сумма {x} + {x} = {sum}")

вот так оно работает

а вот если не превратить в число, то есть сделать вот так

x = input("Введите значение: ")
sum = x + x
print(f"Сумма {x} + {x} = {sum}")

вот что получится:

то есть, без преобразования в число, складываются строки что эквивалентно склеиванию и совсем не то что нам надо

Проверка простого условия

Если нам надо проверить ввел ли пользователь, то что нам хочется, мы используем конструкцию if

x = input("Подтвердите что вы не робот? ")

if x == "Я не робот":
    print("Проходите! =)")
else:
    print("Извините, вход только для людей")

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

Проверка нескольких условий

Если хочется проверить больше чем одно условие, то используем elif

x = input("Подтвердите что вы не робот? ")

if x == "Я человек":
    print("Проходите! =)")
elif x == "У меня лапки":
    print("Мурмяу :3")
elif x == "V●ᴥ●V":
    print("Кто хороший мальчик?")
else:
    print("Извините, вход только для людей")

в этом случае сработает первое выполнившиеся условие

Проверка сложного условия

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

В этом случае мы пишем несколько условий и объединяем их через and

x = input("Введите число: ")
x = int(x) # не забываем превратить ввод в число

if x >= 0 and x <= 10:
    print(f"Число {x} в промежутке от 0 до 10")
else:
    print(f"Число {x} ВНЕ промежутка от 0 до 10")

Работа со списком

Вывод элементов по индексу

Список, это замечательный способ работы с набором однотипных объектов

array = ['Зима', 'Весна', 'Лето', 'Осень']

# вывод конкретного элемента списка по номеру
print(array[0]) # нумерация с нуля, поэтому array[0] выдаст Зима
print(array[1]) # напечатает Весна
print(array[2]) # напечатает Лето
print(array[3]) # напечатает Осень

можно, например, запрашивать номер у пользователя и по этому номеру выводить элемент:

array = ['Зима', 'Весна', 'Лето', 'Осень']

x = input("введите номер элемента: ")
x = int(x) # конвертим в число

print(array[x])

еще раз обратим внимание что запрашиваем 2 элемент, а получаем в ответ третий, это потому что нумерацию с нуля.

Если хочется работать с более привычной естественной нумерацией, то надо вычитать из x единицу

array = ['Зима', 'Весна', 'Лето', 'Осень']

x = input("введите номер элемента: ")
x = int(x) # конвертим в число

print(array[x - 1]) # вычитаем единицу

Проверка индекса на корректность

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

Вот что будет если запросить некорректный индекс

поэтому, запрашивая очередной элемент, важно проверить, что он не выходит за границы:

array = ['Зима', 'Весна', 'Лето', 'Осень']

x = input("введите номер элемента: ")
x = int(x) # конвертим в число

if x >= 0 and x < len(array):
    print(array[x])
else:
    print("Вы ввели некорректный индекс")

len(array) – это специальная функция которая позволяет узнать количество элементов в списке

если же ввести корректный номер, то все работает как обычно

Циклы

Циклы это штука непосредственно связанная со списками. Если например есть список

array = ['Зима', 'Весна', 'Лето', 'Осень']

и хочу я вывести на экран его элементы так чтобы каждый был в новой строке, то я могу сделать так:

array = ['Зима', 'Весна', 'Лето', 'Осень']

print(array[0])
print(array[1])
print(array[2])
print(array[3])

и в принципе ок, но это только пока элементов мало, а если их 100 или 1000, тогда как-то писать стопятсот строк уже не весело. Поэтому человечество придумало циклы.

Работают они так, мы просто берем и заменяем наш код на такой:

array = ['Зима', 'Весна', 'Лето', 'Осень']

for el in array:
    print(el)

получаем тоже самое в ответ:

что можно прочитать как для каждого элемента el в массиве выполни команду print(el) и таким образом мне уже не важно сколько у меня элементов 10 или миллиард.

Иногда хочется вывести номер элемента, я в прошлом семестре показывал немного кривой способ через использование index типа так:

array = ['Зима', 'Весна', 'Лето', 'Осень']

for el in array:
    print(array.index(el), el)

на самом деле это не очень эффективный способ, так как он каждый раз ищет элемент в исходным массиве и выводит его номер.

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

array = ['Зима', 'Весна', 'Лето', 'Осень']

for i, el in enumerate(array):
    print(i, el)

тот же результат

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

Первое мы кладем в переменную i, а второе в переменную el

ну а так как это простые переменные мы можем делать с этим что хотим:

например, вывести только значения стоящие на четных позициях:

array = ['Зима', 'Весна', 'Лето', 'Осень']

for i, el in enumerate(array):
    if i % 2 == 0:
        print(i, el)

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

array = ['Зима', 'Весна', 'Лето', 'Осень']

for i, el in enumerate(array):
    if i % 2 == 1:
        print(i, el)

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

array = ['Зима', 'Весна', 'Лето', 'Осень']

for i, el in enumerate(array, 1):
    print(i, el)    

и тогда четную позицию можно уже проверять по-человечески

array = ['Зима', 'Весна', 'Лето', 'Осень']

for i, el in enumerate(array, 1):
    if i % 2 == 0:
        print(i, el)    

вот такие дела =)

Интерфейс

Болванка под любой интерфейс

import requests 
from tkinter import *
from tkinter import ttk   # импорт для расширеных компонент tk
from PIL import Image, ImageTk  # импорт для работы с картинками


class UI():
    def __init__(self, gui):  
        gui.geometry("400x230")


gui = Tk()
UI(gui)
gui.mainloop()

Функция для создания поля для ввода с лейблом

def create_entry(x, y, label_text, entry_width):
    label = Label(gui, text=label_text)
    label.place(x=x, y=y)
    gui.update()
    
    entry = Entry(gui)
    entry.place(x=x + label.winfo_width() + 10, y=y, width=entry_width)
    gui.update() # еще раз обновим интерфейс
    
    return entry # вернем метку