Tkinter как сделать игру

Добавил пользователь Alex
Обновлено: 19.09.2024

В Tkinter визуальные контроллы называются виджетами (widget, от англ. window gadget) - стандартизированный компонент графического интерфейса, с которым взаимодействует пользователь.

Класс Tk

Tk является базовым классом любого Tkinter приложения. При создании объекта этого класса запускается интерпретатор tcl/tk и создаётся базовое окно приложения.

Tkinter является событийно-ориентированной библиотекой. В приложениях такого типа имеется главный цикл обработки событий. В Tkinter такой цикл запускается методом mainloop. Для явного выхода из интерпретатора и завершения цикла обработки событий используется метод quit.

Таким образом минимальное приложение на Tkinter будет таким:

from tkinter import *

Какие бывают виджеты?

Label

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

Button

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

Text - это виджет, который позволяет пользователю ввести любое количество текста.

Listbox

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

Entry

Entry - это виджет, позволяющий пользователю ввести одну строку текста. Имеет дополнительное свойство bd (сокращённо от borderwidth), позволяющее регулировать ширину границы.

Checkbutton, Radiobutton, Spinbox, Scrollbar, Scale

Label

Label - это виджет, предназначенный для отображения какой-либо надписи без возможности редактирования пользователем.

Свойства метки во многом схожи с таковыми у кнопки. Однако у меток нет опции command. Клик по метке не обрабатывается Tkinter. На примере объекта типа Label рассмотрим свойство font – шрифт.

Значение шрифта можно передать как строку или как кортеж. Второй вариант удобен, если имя шрифта состоит из двух и более слов. После названия шрифта можно указать размер и стиль.

Также как font свойство bd есть не только у метки. С его помощью регулируется размер границ (единица измерения – пиксель):

Создать карусель Добавьте описание

Создать карусель Добавьте описание

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

from tkinter import *

def take():

l = Label(width=10, height=1)

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

Коды цветов в шестнадцатеричной кодировке:

Button

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

Всего же конструктор Button может принимать следующие параметры:

1Button (master, options)

Параметр master представляет ссылку на родительский контейнер. Однако если в коде создается одно окно, то кнопка и любой другой элемент уже по умолчанию размещаются в этом окне. Поэтому первый параметр мы можем опустить. Если бы у нас в коде создавалось бы несколько окон, тогда мы могли бы передать в конструктор Button ссылку на нужное окно.

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

from Tkinter import *

Разберем этот небольшой код. За создание, собственно, окна, отвечает класс Tk(), и первым делом нужно создать экземпляр этого класса. Этот экземпляр принято называть root, хотя вы можете назвать его как угодно.

Далее создаётся кнопка, при этом мы указываем её свойства (начинать нужно с указания окна, в примере - root). Здесь перечислены некоторые из них:

  • text - какой текст будет отображён на кнопке (в примере - ок)
  • width,height - соответственно, ширина и длина кнопки.
  • bg - цвет кнопки (сокращенно от background, в примере цвет - чёрный)
  • fg - цвет текста на кнопке (сокращённо от foreground, в примере цвет - красный)
  • font - шрифт и его размер (в примере - arial, размер - 14)

Далее, нашу кнопку необходимо разместить на окне. Для этого, в Tkinter используются специальные упаковщики( pack(), place(), grid() ). Поподробнее об упаковщиках узнаем позже. Пока, чтобы разместить несколько виджетов на окне, будем применять самый простой упаковщик pack(). В конце программы, нужно использовать функцию mainloop (см. пример), иначе окно не будет создано.

Самыми важными свойствами виджета класса Button являются text, с помощью которого устанавливается надпись на кнопке, и command для установки действия, то есть того, что будет происходить при нажатии на кнопку. По умолчанию размер кнопки соответствует ширине и высоте текста, однако с помощью свойств width и height эти параметры можно изменить.

В Tkinter существует три способа конфигурирования свойств виджетов: в момент создания объекта, с помощью метода config(), он же configure(), путем обращения к свойству как к элементу словаря.

from tkinter import *

b1 = Button(text="Изменить", width=15, height=3)

def change():

Здесь свойство command устанавливается с помощью метода config(). Однако можно было сделать и так: b1['command'] = change. Вот так будет выглядеть кнопка после запуска программы и после нажатия на нее:

Создать карусель Добавьте описание

Привязка событий

"Всё это хорошо" - наверное, подумали вы. - "Но как сделать так, чтобы мои виджеты что-то делали, а не просто красовались на окне?".

command

Для большинства виджетов, реагирующих на действие пользователя, активацию виджета (например нажатие кнопки) можно привязать с использованием опции command. К таким виджетам относятся: Button, Checkbutton, Radiobutton, Spinbox, Scrollbar, Scale. Выше мы уже неоднократно пользовались этим способом:

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

Обработка нажатия на кнопку

Для обработки нажатия на кнопку необходимо установить в конструкторе параметр command, присвоив ему ссылку на функцию, которая будет срабатывать при нажатии:

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

Создать карусель Добавьте описание

Упаковщики

Упаковщик (менеджер геометрии, менеджер расположения) это специальный механизм, который размещает (упаковывает) виджеты на окне. В Tkinter есть три упаковщика: pack, place, grid.

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

Всем хорош Python: и учить его легко и программы писать можно практически в любом блокноте. Одно плохо — большинство программ работает в командной строке. А хочется чего-нибудь привычного — с меню и кнопками и другими элементами привычных приложений. Именно для этих целей, в Python, служит библиотека tkinter. С еще помощью как раз и создается графический интерфейс пользователя. Она поставляется в комплекте интерпретатора Python для пользователей Windows, а вот пользователям *nix-систем придется установить её самостоятельно. Кстати, именно с помощью tkinter создан редактор IDLE.

Сохраните программу с любым именем (например gui.py) и запустите её. У вас должно появиться окно примерно следующего вида:

Рис 1. Окно программы

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

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

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

Вот и новое слово: виджеты. Виджет, это любой элемент tkinter (кроме главного окна) который мы можем вывести на главный экран. Это поля ввода текста, кнопки, ползунки радиокнопки и многое, многое другое.

В строке 5 мы создаем новый виджет — метку. Она создается с помощью класса tkinterLabel. В качестве параметров, мы передаем ей имя родительского окна (в данном случае root), и текст, который будет отображаться. В дальнейшем мы подробно разберем все возможности класса Label, а пока ограничимся уже приведенной информацией.

Строка 6 — здесь мы производим упаковку созданного виджета при помощи метода pack(). Это еще один очень важный момент: вновь созданные виджеты не появляются автоматически в окне приложения. Нужно сообщить интерпретатору, в каком именно месте и порядке вы хотите их видеть. Метод pack() как раз и выполняет эту функцию.

Фактически, pack() собирает все элементы, которые упакованы с его помощью и выстраивает их как пирамиду — один виджет под другим.

И, наконец, строка 7. Здесь мы запускаем цикл mainloop() для окна root. Без этого действия программа не будет запущена и окно tkinter не появится на вашем мониторе.

Нужно заметить, что работа программы с GUI существенно отличается от аналогичной программы для консоли. При запуске графического интерфейса запускается бесконечный цикл, который ожидает каких-либо, действий пользователя. То есть, если вы попробуете использовать в программе tkinter цикл while, то, с большой вероятностью, она работать не будет. Или зависнет — тут уж зависит от того, какие действия она выполняет.

Настройка окна root.

Снова запустите программу. Вы должны увидеть окно следующего вида:

GUI tkinter

Рис 2. Вид окна tkinter после указания размеров и текста заголовка.

Снова изменим код нашей программы:

окно tkinter gui

Рис. 3 Вид окна после указания фонового цвета root.

А теперь попробуйте сами создать несколько меток и добавить их в окно root.

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

Эти команды (импорт модуля, вызовы функций, цикл) создают своего рода скелет, или каркас, программного кода. Выполнив его, вы получите "пустую" игру. Далее на этот скелет "подвешивается мясо", т. е. объявляются объекты и программируется логика игры.

Первое, что нужно сделать, это импортировать модуль pygame. После этого можно вывести на экран главное графическое окно игры с помощью функции set_mode() модуля display, входящего в состав библиотеки pygame:

Если выполнить этот код, то появится окно размером 600x400 пикселей и сразу закроется (в Linux, в Windows может зависнуть).

Функция set_mode() принимает три аргумента – размер в виде кортежа из двух целых чисел, флаги и глубину цвета. Их можно не указывать. В этом случае окно займет весь экран, цветовая глубина будет соответствовать системной. Обычно указывают только первый аргумент – размер окна.

Флаги предназначены для переключения на аппаратное ускорение, полноэкранный режим, отключения рамки окна и др. Например, команда pygame. display . set_mode ( ( 640 , 560 ) , pygame. RESIZABLE ) делает окно изменяемым в размерах.

Выражение вида pygame.RESIZABLE (вместо RESIZABLE может быть любое другое слово большими буквами) обозначает обращение к той или иной константе, определенной в модуле pygame. Часто можно встретить код, в котором перед константами не пишется имя модуля (вместо, например, pygame.QUIT пишут просто QUIT). В этом случае в начале программы надо импортировать не только pygame, но и содержимое модуля locals через from … import:

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

Функция set_mode() возвращает объект типа Surface (поверхность). В программе может быть множество объектов данного класса, но тот, что возвращает set_mode() особенный. Его называют display surface, что можно перевести как экранная (дисплейная) поверхность. Она главная.

В конечном итоге все отображается на ней с помощью функции pygame.display.update() или родственной pygame.display.flip(), и именно эту поверхность мы видим на экране монитора. Нам пока нечего отображать, мы не создавали никаких объектов. Поэтому было показано черное окно.

Функции update() и flip() модуля display обновляют содержимое окна игры. Это значит, что каждому пикселю заново устанавливается цвет. Представьте, что на зеленом фоне движется красный круг. За один кадр круг смещается на 5 пикселей. От кадра к кадру картинка целого окна изменяется незначительно, но в памяти окно будет перерисовываться полностью. Если частота составляет 60 кадров в секунду (FPS=60), то за секунду в памяти компьютера произойдет 60 обновлений множества значений, соответствующих экранным пикселям, что дает по большей части бессмысленную нагрузку на вычислительные мощности.

Если функции update() не передавать аргументы, то будут обновляться значения всей поверхности окна. Однако можно передать более мелкую прямоугольную область или список таковых. В этом случае обновляться будут только они.

Функция flip() решает проблему иным способом. Она дает выигрыш, если в set_mod() были переданы определенные флаги (аппаратное ускорение + полноэкранный режим – pygame.HWSERFACE|pygame.FULLSCREEN, двойная буферизация – pygame.DOUBLEBUFF, использование OpenGL – pygame.OPENGL). Возможно, все флаги можно комбинировать вместе (через |). При этом, согласно документации, аппаратное ускорение работает только в полноэкранном режиме.

Вернемся к нашим трем строчкам кода. Почему окно сразу закрывается? Очевидно потому, что программа заканчивается после выполнения этих выражений. Ни init(), ни set_mode() не предполагают входа в "режим циклического ожидания событий". В tkinter для этого используется метод mainloop() экземпляра Tk(). В pygame же требуется собственноручно создать бесконечный цикл, заставляющий программу зависнуть. Основная причина в том, что только программист знает, какая часть его кода должна циклически обрабатываться, а какая – нет. Например, код, создающий классы, объекты и функции не "кладут" в цикл.

Итак, создадим в программе бесконечный цикл:

После такого окно уже не закроется, а программа благополучно зависнет насовсем. Многократные клики по крестику не помогут. Только принудительная остановка программы через среду разработки или Ctrl+С, если запускали через терминал.

Как сделать так, чтобы программа закрывалась при клике на крестик окна, а также при нажатии Alt+F4? Pygame должен воспринимать такие действия как определенный тип событий.

Добавим в цикл магии:

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

Рассмотрим выражение pygame.event.get(). Модуль event библиотеки pygame содержит функцию get(), которая забирает список событий из очереди, в которую записываются все произошедшие события. То, что возвращает get() – это список. Забранные события удаляются из очереди, то есть второй раз они уже забираться не будут, а в очередь продолжают записываться новые события.

Цикл for просто перебирает схваченный на данный момент (в текущей итерации цикла) список событий. Каждое событие он присваивает переменной i или любой другой. Чтобы было понятней, перепишем программу таким образом:

На экране вы увидите примерно такое:

Вверху будет множество пустых квадратных скобок, которые соответствуют пустым спискам events, создаваемым на каждой итерации цикла while. И только когда окно закрывается, генерируются два события. Свойство type второго имеет значение 256, что совпадает со значением константы QUIT.

В pygame событие – это объект класса Event. А если это объект, то у него есть атрибуты (свойства и методы). В данном случае мы отслеживаем только те события, у которых значение свойства type совпадает со значением константы QUIT модуля pygame. Это значение присваивается type тогда, когда происходят события нажатия на крестик или Alt+F4. Когда эти события происходят, то в данном случае мы хотим, чтобы выполнилась функция quit() модуля pygame, которая завершает его работу.

Теперь почему возникает ошибка. Функция pygame.quit() отключает (деинициализирует) pygame, но не завершает работу программы. Таким образом, после выполнения этой функции отключаются модули библиотеки pygame, но выхода из цикла и программы не происходит. Программа продолжает работу и переходит к следующей итерации цикла while (или продолжает выполнять тело данной итерации, если оно еще не закончилось).

В данном случае происходит переход к следующей итерации цикла while. И здесь выполнить функцию get() модуля event оказывается уже невозможным. Возникает исключение и программа завершается. По-сути программу завершает не функция pygame.quit(), а выброшенное, но не обработанное, исключение.

Данную проблему можно решить разными способами. Часто используют функцию exit() модуля sys. В этом случае код выглядит примерно так:

Сначала отключается pygame, потом происходит выход из программы. Такой вариант вероятно следует считать наиболее безопасным завершением. Команда pygame.quit() не обязательна. Если завершается программа, то отключится и pygame.

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

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

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

Теперь зададимся вопросом, с какой скоростью крутится цикл while? С большой, зависящей от мощности компьютера. Но в данном случае такая скорость не есть необходимость, она даже вредна, так как бессмысленно расходует ресурсы. Человек дает команды и воспринимает изменения куда медленнее.

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

Поэтому в главном цикле следует выполнять задержку. Делают это либо вызовом функции delay() модуля time библиотеки pygame, либо создают объект часов и устанавливают ему частоту кадров. Первый способ проще, второй – более профессиональный.

Функция delay() принимает количество миллисекунд (1000 мс = 1 с). Если передано значение 20, то за секунду экран обновится 50 раз. Другими словами, частота составит 50 кадров в секунду.

Методу tick() класса Clock передается непосредственно желаемое количество кадров в секунду. Задержку он вычисляет сам. То есть если внутри цикла указано tick(60) – это не значит, что задержка будет 60 миллисекунд или произойдет 60 обновлений экрана за одну итерацию цикла. Это значит, что на каждой итерации цикла секунда делится на 60 и уже на вычисленную величину выполняется задержка.

Нередко частоту кадров выносят в отдельную константоподобную переменную:

В итоге каркас игры на Pygame должен выглядеть примерно так:

Практическая работа

В модуле pygame.display есть функция set_caption(). Ей передается строка, которую она устанавливает в качестве заголовка окна. Сделайте так, чтобы каждую секунду заголовок окна изменялся.

Курс с примерами решений практических работ:
android-приложение, pdf-версия

Игра на Python за 19 строк Python, Игры, Обучение, Программирование

Хеллоу ворлд! Если вам надоели задачки из видео курсов или книг можете сделать эту игру.

Сейчас мы сделаем камень, ножницы, бумага.

Для начала импортируем рандом:

Теперь сделаем бесконечный цикл чтобы не перезапускать игру несколько раз:

Пропишем правила для игроков:

print('Вы играете в камень ножницы бумага. к - камень, н - ножницы, б - бумага. Чтобы выйти напишите: выход.')

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

player = input('Вы выбрали:')

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

if player not in ['к', 'н', 'б', 'выход']:

print('Не правильный ввод!')

if player == 'выход':

Теперь пропишем выбор для бота и тут нам поможет рандом:

comp_choice = gen[random.randint(1, 3)]

Что ж мы сделали почти все шаги в игре, но осталось сделать победные комбинации:

Последний и самый простой шаг обозначаем победу или ничью:

if player == comp_choice:

elif (player,comp_choice) in win_combination:

print('Вы играете в камень ножницы бумага. к - камень, н - ножницы, б - бумага. Чтобы выйти напишите: выход.')

player = input('Вы выбрали:')

if player not in ['к', 'н', 'б', 'выход']:

print('Не правильный ввод!')

if player == 'выход':

comp_choice = gen[random.randint(1, 3)]

if player == comp_choice:

elif (player,comp_choice) in win_combination:

Вот и все вы сделали игру и можете похвастаться перед друзьями.

Телеграм-канал @featuresfordev. Там мы делимся своими мыслями в таком формате.


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

233 поста 7.8K подписчика

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!

Приветствуется:

• уважение к читателям и авторам

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт

Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

Чел, ты рекламируешь свой канал, и даже не вставил свой код нормально. Я редко постам ставлю минусы, но это какое-то жуткое неуважение к читателям.

Вот полный код:
ссылка на гит.
Вы разработчик или где?

код питона без отступов выглядит идеально!

П.С. ты это сделал что бы над ньюбами поиздеваться, да?

Спасибо огромное! Я как раз хотел узнать побольше команд!

Как вариант (исключения не перехватываются, форматирование строк не применяется, Python 3) :
import random

player_win = 0
bot_win = 0

print('Это игра "Камень-ножницы-бумага."\n1 - камень, 2 - ножницы, 3 - бумага,\n4 -выход из игры.')
steps=
combs=
while True:
player=int(input('Ваш ход: '))
if player == 4: break
bot=random.randint(1,3)
comb=(str(player)+str(bot))
print(steps[player],':',steps[bot])
if comb in combs['win']: print('Победа ваша!')
player_win+=1
elif comb in combs['draw']:
print('Ничья!')
else:
print('Победил бот.')
bot_win+=1
print('Статистика игры:',player_win,':',bot_win)

Смысл этого поста? Он обучает разве что копипастить код.

> gen = > comp_choice = gen[random.randint(1, 3)]

Хотя бы так тогда:

while True:
print('Вы играете в камень ножницы бумага. к - камень, н - ножницы, б - бумага.Чтобы выйти напишите: выход.')
player = input('Вы выбрали:')
if player not in patterns.values():
print('Не правильный ввод!')
elif player == 'выход':
break
comp_choice = patterns.get(random.randint(1, 3))
print(f'Бот выбрал: ')

if player == comp_choice:
print('Ничья')
elif (player, comp_choice) in win_combination:
player_win += 1
print('Игрок победил')
else:
bot_win += 1
print('Победа бота')
print(f'Статистика игры:\n игрок - \n бот - ')

Отступы нужны в коде, без них не полетишь..

Мне очень жаль, но на Pikabu не возможно сделать отступы( или я чего-то не знаю если это так, то помогите, пожалуйста) . Я не согласен с утверждением что это реклама, я разместил ссылку в самом низу и это значит что ее могут увидеть лишь заинтересованные .


Микроконтроллер ESP32 MicroPython. Пример первой программы

Рассмотрим распиновку микроконтроллера ESP32 DEVKIT V1.

Микроконтроллер ESP32 MicroPython. Пример первой программы Урок, Видеоблог, Программирование, Esp8266, Esp32, Python, Обучение, Видео, Длиннопост

Более подробную информацию о назначении GPIO ESP32 DEVKIT V1 читайте тут.

Рассмотрим, как можно с помощью консоли REPL проводить отладку кода без загрузки в микроконтроллер.

Микроконтроллер ESP32 MicroPython. Пример первой программы Урок, Видеоблог, Программирование, Esp8266, Esp32, Python, Обучение, Видео, Длиннопост

Определимся с очерёдностью выполнения файлов интерпретатором MicroPython.

Микроконтроллер ESP32 MicroPython. Пример первой программы Урок, Видеоблог, Программирование, Esp8266, Esp32, Python, Обучение, Видео, Длиннопост

Микроконтроллер ESP32 MicroPython. Пример первой программы Урок, Видеоблог, Программирование, Esp8266, Esp32, Python, Обучение, Видео, Длиннопост

Боле подробное описание и исходные материалы к уроку можно посмотреть тут.

Надеюсь моя информация будет полезной.

Спасибо! Всем добра!

Каждый питонист в душе 2Д тян

Каждый питонист в душе 2Д тян Юмор, Мемы, Аниме, Программирование, Python


Небольшой туториал(а может и нет)о том как можно пробиться в IT нишу(опыт junior Django backend разработчика)

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

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

Если есть дополнения: книги, youtube, курсы и т.д. ставьте вызов меня и дополнение, и если я разберусь как тут дополнять, то буду по чуть-чуть расширять пост вашими комментариями с пометкой *комментарий пользователя и ваш ник

Это не таблетка которая работает 100%, а исключительно мой опыт. На всё ушло полтора года(1 год учёбы + пол года поиск работы).

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

Немного о себе:
Для того чтобы представить полноценную картину. Мне 27 лет, работал в Альфа-банке и ушел из-за того, что не могу навязывать людям продукты. Прогорел бизнес в 24 года(ателье). Устроился работать в макдоналдс в ночную смену(так называемый "ночник"- что-то типа уборщицы и посудомойки), проработал год и понял что хватит плыть по течении и надо брать жизнь в руки.
Высшего образования не имею(Ушел с 5 курса 'Эконом безопасности'), в дальнейшем не восстанавливался, так как хотел доказать себе, что обладание дипломом, а не знаниями это уже прошлый век, но это отступление.

Собственно информация ради которой был создан пост:

Как искал работу:

На поиск работы ушло около полугода. Запаситесь терпением и будьте настойчивы, рынок около-джунами переполнен, а в мидлах-сеньорах в дефиците, вот такая вот штука.
Отшивать будут часто, много. Искал работу по РФ с возможностью переезда куда угодно, хоть за границу, хоть куда.
Типичные вопросы:
- Рассказать несколько алгоритмов
- Решить логическую задачку (у меня была часто задачка 'Задача с девятью шарами' в гугле можно найти спокойно)
- Рассказать про структуры данных
- Ревью моего кода (или их кода) с человеком( почему так, почему сяк) проговаривая в слух мою логику
- Тестовая задачка ( задачи достаточно легкие, смог решить задачу на Golang не зная этого языка)
Типичные отказы:
- Мало / Нет опыта разработки в команде
- Рассматриваем кандидатов только из своего города
- Мы уже наняли
- Без диплома не рассматриваем
- Бесплатная стажировка(тут уже отказывался я)

На данный момент уже требуется еще front часть от меня (css, js, ajax), так как планируется перевести на зп по выше в фулл-стак разраба, но на начальном этапе требовался исключительно back(sql, django,drf, unix(просто умение поставить сервер),docker) всё на базовом уровне

Составить резюме, набраться определенного багажа знаний, иметь гитхаб и gist гитхаб ну и просто пробивать себе путь, так как дорогу осилит идущий:)

Спасибо за внимание!


Почему бы не написать свой блог на Django

Почему бы не написать свой блог на Django Программирование, IT, Python, Веб-разработка

Код открыт. В Readme подробно расписал, как запустить на локальном хосте. С удовольствием отвечу на вопросы если кого-то заинтересует проект.

Немного расскажу о процессе написания. Оказалось, что написать блог, которым будет удобно пользоваться администратору и читателю не совсем тривиальная задача. Не то чтобы сложно, но и не так просто как в любом туториале по созданию блога, которым не планируется пользоваться. Например, при внедрении WYSIWYG редактора оказалось, что нет удобных решения по вставке картинок в текст. Вернее картинку вставить не проблема, а вот с удалением возникают трудности. Убрав картинку с текста, она никуда не девается с сервера. Искать её файловым менеджером то ещё удовольствие, а если их на сервере будут храниться десятки или сотни? Пришлось придумывать своё решение. В моём варианте всё делается через стандартный административный интерфейс без сторонних файловых менеджеров. И таких мелочей попадалось по пути достаточно много, короче было интересно. Особенности приложения расписал в readme, здесь повторятся не буду.

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


Урок 1. MicroPython ESP32. Установка и настройка IDE

В этом уроке поговорим о том, с чего начать работу с MicroPython. Установим необходимое программное обеспечение.

Если вы считаете этот учебный курс полезным, пожалуйста, поделитесь им! Чтобы он мог охватить больше людей, которым это может быть интересно.

1. Установка Thonny Python IDE.

Урок 1. MicroPython ESP32. Установка и настройка IDE Esp8266, Esp32, Python, Видеоблог, Обучение, Видео, Урок, IDE, Программирование, Длиннопост

2. USB-драйвер для ESP8266 и ESP32.

Урок 1. MicroPython ESP32. Установка и настройка IDE Esp8266, Esp32, Python, Видеоблог, Обучение, Видео, Урок, IDE, Программирование, Длиннопост

3. Загрузите прошивку MicroPython.

Сейчас прошивку для ESP8266 или ESP32 можно с официального сайта.

Урок 1. MicroPython ESP32. Установка и настройка IDE Esp8266, Esp32, Python, Видеоблог, Обучение, Видео, Урок, IDE, Программирование, Длиннопост

Установка прошивки для ESP32 с помощью Thonny Python.

Урок 1. MicroPython ESP32. Установка и настройка IDE Esp8266, Esp32, Python, Видеоблог, Обучение, Видео, Урок, IDE, Программирование, Длиннопост

Подробное описание читайте тут.

Надеюсь моя информация будет полезной.

Спасибо! Всем добра!


It обучение (с 0 до готового проекта)

Также хотелось бы услышать бывалых, как искать работу в моей ситуации или ещё рано и надо подучиться. На данный момент знаю, как мне кажется, достаточно хорошо: питон, sql, джанго, git, а также различные мелкие библиотеки.

Читайте также: