Сообщество - Программирование на python

Программирование на python

929 постов 11 940 подписчиков

Популярные теги в сообществе:

5

Проект на Pygame

Всем привет, делаю онлайн игру для проектной работы. Игру пишу на python с помощью pygame, для обмена данными пользуюсь библиотекой socket, для запаковки информации использую json. Сначала я думал кидать клиенту с сервера игровое поле в виде списка строк(шифр с условными обозначениями), но уже во время реализации идеи и её отладки я понял что это будет той ошибкой, которая будет преследовать меня даже во снах, поэтому я решил, что будет хорошей идеей передавать в json'е список спрайтов, но json стукнул меня по голове и вежливо сказал, что спрайты компоновать он не может(Object of type Wall is not JSON serializable). Как можно избежать подобных ругательств и/или решить данную подзадачу эффективнее? Если вам кажется, что я изобретаю велосипед, и Вы можете объяснить, как такое решают нормальные люди, то поделитесь пожалуйста своим опытом в комментариях, он может быть полезен не только мне. Заранее спасибо.

P.S. Совсем забыл указать гитхаб проекта, если кому-то понадобится, вот он. На момент написания поста актуален коммит ca33bdf. Если вы так же где-то заметили мои глупости, просьба не пинать тапками, я только начинающий программист(сейчас это вроде называют говнокодерами).

11

Простыми словами о программировании. Видео 8. Циклы

Всем привет! Это 8ое видео курса о том что такое циклы и для чего они нужны. Подзадержался я конечно с ним, но что то есть. С этим видео надеюсь пройду минимальный порог контента для курса на Степике. Посмотрим на выходных.

Зачем создавать копию объекта в Python?

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

➡️ Поверхностное и глубокое копирование

Существуют два типа копирования в Python - поверхностное и глубокое. Поверхностное копирование создает новый объект, но заполняет его ссылками на оригинальные дочерние объекты. Глубокое копирование, с другой стороны, создает новый объект и рекурсивно добавляет копии дочерних объектов оригинала. Выбор между этими двумя зависит от ваших конкретных потребностей.

➡️ Избегание неожиданных побочных эффектов

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

➡️ Повышение производительности кода

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

Источник: https://t.me/python_scrypt (Вопросы с собесов, обзор библиотек)

Показать полностью
10

Конвертируем два списка в словарь с помощью функции zip()

Порой сталкивался с задачей объединить два списка в словарь, в Python для этого есть замечательная функция zip().

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

fruits = ["Banana", "Apple", "Kiwi", "Mango"]

prices = [1.08, 2.32, 3.03, 1.97]

fruit_dictionary = dict(zip(fruits, prices))

print(fruit_dictionary)

{'Banana': 1.08, 'Apple': 2.32, 'Kiwi': 3.03, 'Mango': 1.97}

Ниже прикреплю картинку с кодом

Конвертируем два списка в словарь с помощью функции zip()
5

Решаем задачи с собесов на Джуниор разработчика. Подробно разбираем код. Числа Фибоначчи

Всем привет) сегодня напишем программу для нахождения первых n чисел Фибоначчи и увидим одну из примечательных особенностей специального символа end. Приступим)

Первоначально пройдемся по теории. Числа Фибоначчи — это последовательность чисел, которые задаются по определённому правилу. Оно звучит так: каждое следующее число равно сумме двух предыдущих. Первые два числа заданы сразу и равны 0 и 1.

Вот как выглядит последовательность Фибоначчи:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, … , ∞

Более подробно можно почитать тут

Формула для нахождения

Формула для нахождения

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

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

fib1 = fib2 = 1 # первоначальные значения fib1 и fib2

Далее спрашиваем у пользователя сколько чисел необходимо вывести, записываем в переменную n как тип данных int.

fib1 = fib2 = 1 # первоначальные значения fib1 и fib2

n = int(input("Введите количество выводимых чисел: ")) # присваиваем пременной n значение количества выводимых цифр

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

fib1 = fib2 = 1 # первоначальные значения fib1 и fib2

n = int(input("Введите количество выводимых чисел: ")) # присваиваем пременной n значение количества выводимых цифр

print(fib1, fib2, end = " ") # выводим первые 2 числа

Создаем цикл для поиска остальных чисел от 2 (так как 2 первых значения уже есть) до n (количество выводимых чисел, не забываем про ошибку на еденицу)

fib1 = fib2 = 1 # первоначальные значения fib1 и fib2

n = int(input("Введите количество выводимых чисел: ")) # присваиваем пременной n значение количества выводимых цифр

print(fib1, fib2, end = " ") # выводим первые 2 числа

for i in range (2, n): # и так как первоначальные значения уже вывели продолжим с двух

Теперь подходим к самому главному выражению в цикле, присваиваем fib1 будет равно fib2 а fib2 = fib1 + fib2 таким образом при каждой итерации цикла fib2 будет равняться предыдущее число + текущее. Отступы в цикле обозначил как " > > "

fib1 = fib2 = 1 # первоначальные значения fib1 и fib2

n = int(input("Введите количество выводимых чисел: ")) # присваиваем пременной n значение количества выводимых цифр

print(fib1, fib2, end = " ") # выводим первые 2 числа

for i in range (2, n): # и так как первоначальные значения уже вывели продолжим с двух

> > fib1, fib2 = fib2, fib1 + fib2 # выполняется в цикле

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

fib1 = fib2 = 1 # первоначальные значения fib1 и fib2

n = int(input("Введите количество выводимых чисел: ")) # присваиваем пременной n значение количества выводимых цифр

print(fib1, fib2, end = " ") # выводим первые 2 числа

for i in range (2, n): # и так как первоначальные значения уже вывели продолжим с двух

> > fib1, fib2 = fib2, fib1 + fib2 # fib1 = fib2 а fib2 = fib1 +fib2

> > print(fib2, end = " ") # вывод полученного значения

Запускаем код и любуемся результатом:

Все наша программа готова! Знаю что можно написать ее другими способами (рекурсией) но решил объяснить через циклы так как для новичков это проще. Ниже опубликовал картинку с кодом.

Картинка с кодом

Картинка с кодом

Также можно поиграться с кодом в онлайн интерпретаторе - тык

Мой канал по python: https://t.me/python_scrypt (полезная инфа, обзор библиотек)

Если статья информативная то прошу поддержать плюсом) всем спасибо за просмотр!)

Показать полностью 3
13

Разбираем вопросы с собеседований на Python Junior Developer

Вопрос: В чем разница сравнения через is и "=="

Ответ:

== проверяет, одинаковые ли значения у переменных.

is проверяет, указывают ли переменные на один и тот же объект.

a = [1, 2] b = [1, 2]

print(a == b) #True

print(a is b) #False

Оператор `is` используется для проверки идентичности объектов, то есть он проверяет, являются ли два объекта одним и тем же объектом в памяти. С другой стороны, оператор `==` используется для сравнения значений двух объектов, то есть он проверяет, равны ли значения объектов, не обязательно являются ли они одним и тем же объектом в памяти.

Пример:

a = [1, 2, 3]

b = a  # Присваиваем переменной b ссылку на тот же объект, что и у переменной a

print(a is b)  # Вывод: True, потому что a и b указывают на один и тот же объект в памяти

print(a == b)  # Вывод: True, потому что содержимое a и b одинаковое

c = [1, 2, 3]

print(a is c)  # Вывод: False, потому что a и c указывают на разные объекты в памяти

print(a == c)  # Вывод: True, потому что содержимое a и c одинаковое

В этом примере переменные `a` и `b` ссылаются на один и тот же объект в памяти, поэтому оператор `is` возвращает `True`, а содержимое переменных `a` и `b` одинаковое, поэтому оператор `==` также возвращает `True`. С другой стороны, переменная `c` ссылается на новый объект, который содержит те же значения, что и `a`, но не является тем же самым объектом, поэтому оператор `is` возвращает `False`, хотя оператор `==` возвращает `True`, потому что значения объектов одинаковые.

Мой канал по python в тг по Python: https://t.me/python_scrypt (обзор библиотек, шпаргалки, вопросы с собесов)

Ставь + если полезно!

Показать полностью
2

Лямбда-функция в Python

Python lambdas - это небольшие, анонимные, суб-синтаксические функции, которые более ограничены, но короче, чем обычные функции Python.

В этой статье мы увидим все о лямбде. Мы обсудим и постараемся ответить на следующий вопрос о лямбде:

  1. Откуда появилась лямбда

  2. Что такое лямбда-функция

  3. Как использовать лямбда-функцию

  4. Когда следует избегать лямбда-функции

  5. Альтернативы лямбда

Лямбда - это концепция не только в Python, она используется в других языках программирования, таких как Java, C #, C ++ и т. д. Концепция лямбда в языках программирования пришла из вычислительной математики.

Откуда появилась лямбда

История лямбда началась еще в 30-х годах прошлого века. Алонзо Черч, наиболее известный своим лямбда-исчислением, тезисом Черча – Тьюринга, был американским математиком и логиком, формализовавшим лямбда-исчисление. Функциональные языки берут свое начало в математической логике и лямбда-исчислении, в то время как ключевые языки программирования используют модель вычислений на основе состояний, разработанную Аланом Тьюрингом. Две вычислительные модели, лямбда-исчисление и машины Тьюринга, можно преобразовать в одну. Это сходство известно как гипотеза Черча-Тьюринга.

Функциональные языки, такие как Haskell и Lisp, наследуют лямбда-исчисление, но такие языки, как Python или C, наследуют императивное программирование.

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

Что такое лямбда-функция

Лямбда-функции - это анонимные функции в Python. Лямбда-функции похожи на обычные функции. Разница между обычной функцией и лямбда-функцией заключается в том, что они могут быть определены без имени, но обычные функции определяются с помощью ключевого слова def.

Ключевое слово lambda используется для определения анонимной или лямбда-функции.

Если мы сравним лямбда-функцию и обычную функцию, то,

  1. Лямбда - функция может принимать любое число аргументов, но может иметь только одно выражение, в то время как обычная функция имеет точное количество аргументов, которые мы объявляем в момент определения.

  2. Лямбда-функция - это однострочные функция. Ее тело содержит выражение в той же строке, в которой оно определено. В обычных функциях, функции содержат блоки тела, в которых определены для выполнения некоторые операторы.

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

    x = lambda x,y : x * y

    print(x(3,4))

    x = ( lambda x,y : x*y) (2,3)

    print(x)

В приведенном выше коде показана лямбда-функция, которая дает произведение двух переменных x и y. В приведенном выше примере x - это переменная, которая будет хранить возвращаемое значение лямбда-выражения.

Части лямбда-выражения.

Ключевое слово - лямбда.

Аргументы - x и y.

Выражение - x * y

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

Ниже приведен пример передачи аргументов в одной строке.

x = ( lambda x,y : x*y) (2,3)

print(x)

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

Как использовать лямбда-функцию

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

Пример 1 Напишите программу для вычисления экспоненты с помощью лямбда-функции.

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

  1. Сначала я определяю лямбда-выражение для вычисления экспоненты.

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

  3. Лямбда-функция представлена прямоугольником. Она даст вам результат после выполнения расчета.

  4. Код ниже.

    Exp = (lambda x,y : x**y) (4,4)

    print(Exp)

Когда следует избегать лямбда-функции

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

Когда мы использовали лямбда-функцию, мы не использовали имя функции, и не было необходимости явно вызывать лямбда-функцию, поэтому лямбда называется анонимной функцией.

Для обычной функции мы определяем имя функции print_line, и там также есть тело, но в случае лямбда-функции тела не было. Это была одинарная линия.

Вот некоторые моменты против использования лямбда-функции в Python:

  1. Читаемость кода

  2. Заставлять мыслить функционально

  3. Странный синтаксис

  4. Загадочный стиль

Альтернативы лямбда

  1. Понимание списка.

  2. Генераторы.

Понимание списков - лучшая альтернатива лямбда. В некоторых случаях лямбда-выражение используется с функциями map (), reduce () и filter (), но то же самое может быть выполнено с пониманием списка вместе с циклом for.

Мой канал по python в тг по Python: https://t.me/python_scrypt (обзор библиотек, шпаргалки, вопросы с собесов)

Ставь + если полезно!

Показать полностью
Отличная работа, все прочитано!