60+ готовых проектов и софтов на Python которые смогут превратить в кодера даже лягушку.
Тебя приветствуют Max Wayld и Asynco! Для написания этой работы мы объединили наши умы (в сумме у нас на двоих 30 IQ, кстати) и собрали для тебя кучу небольших проектов и/или софтов на нашем любимом Python.
Всё это дело ты можешь поразбирать и за счёт этого учиться тем или иным кодерским штуковинам непосредственно на практике, чтобы стать кодером be like *вставьтеимя*.
Эта статья преимущественно будет очень полезна новичкам, но некоторая часть ресурсов также может облегчить жизнь и ребятам с средним уровнем знаний, так что если ты уже умеешь что-то в питоне - не скипай всё и сразу.
Навигация по статье:
20 готовых проектов на Python
1. Генератор паролей
Классический пример генерации простых паролей заданной длины. Будет полезен для написания авторегеров почт или аккаунтов в тот же Sandbox.
Дополнительных библиотек не нужно, пароль генерируется из чисел, символов и букв
import random import string total = string.ascii_letters + string.digits + string.punctuation length = 16 password = "".join(random.sample(total, length)) print(password)
2. Парсинг и загрузка всех изображений со страницы
Код может быть полезен для наполнения своего сайта картинками, украденными с другого сайта. Так все делают! И точка! Вкусно.
Для работы понадобятся библиотеки selenium, bs4 и requests, а также chromedriver.
from selenium import webdriver import requests as rq import os from bs4 import BeautifulSoup import time # path= E:\web scraping\chromedriver_win32\chromedriver.exe path = input("Enter Path : ") url = input("Enter URL : ") output = "output" def get_url(path, url): driver = webdriver.Chrome(executable_path=r"{}".format(path)) driver.get(url) print("loading.....") res = driver.execute_script("return document.documentElement.outerHTML") return res def get_img_links(res): soup = BeautifulSoup(res, "lxml") imglinks = soup.find_all("img", src=True) return imglinks def download_img(img_link, index): try: extensions = [".jpeg", ".jpg", ".png", ".gif"] extension = ".jpg" for exe in extensions: if img_link.find(exe) > 0: extension = exe break img_data = rq.get(img_link).content with open(output + "\\" + str(index + 1) + extension, "wb+") as f: f.write(img_data) f.close() except Exception: pass result = get_url(path, url) time.sleep(60) img_links = get_img_links(result) if not os.path.isdir(output): os.mkdir(output) for index, img_link in enumerate(img_links): img_link = img_link["src"] print("Downloading...") if img_link: download_img(img_link, index) print("Download Complete!!")
3. Конвертация JSON в CSV
Будет полезно при парсинге различных данных и последующего сохранения их. Как идея - ежедневное получение цены токена, запись в CSV файл и анализ изменения стоимости за неделю/месяц/год.
Библиотеку json устанавливать не нужно, она уже встроена в пакет Python
import json if __name__ == '__main__': try: with open('input.json', 'r') as f: data = json.loads(f.read()) output = ','.join([*data[0]]) for obj in data: output += f'\n{obj["Name"]},{obj["age"]},{obj["birthyear"]}' with open('output.csv', 'w') as f: f.write(output) except Exception as ex: print(f'Error: {str(ex)}')
4. Поиск строки по файлам
Скрипт проходится по папке с файлами и ищет заданную строку. Может быть полезно для быстрого поиска своих логов в списках победителей (если таких списков много)
Достаточно ввести искомые значения и папку с файлами
import os text = input("input text : ") path = input("path : ") # os.chdir(path) def getfiles(path): f = 0 os.chdir(path) files = os.listdir() # print(files) for file_name in files: abs_path = os.path.abspath(file_name) if os.path.isdir(abs_path): getfiles(abs_path) if os.path.isfile(abs_path): f = open(file_name, "r") if text in f.read(): f = 1 print(text + " found in ") final_path = os.path.abspath(file_name) print(final_path) return True if f == 1: print(text + " not found! ") return False getfiles(path)
5. Установка водяных знаков на изображения
Иногда проще запустить скрипт, чем фотошоп. Если картинок много — тем более. Код сам расставит водяные знаки на ваши изображения.
В скрипте вы можете задать степень прозрачности, расположение знака и так далее. В качестве переменных подаются папка с картинками, путь до водяного знака (лучше формат .png) и папка вывода.
Потребуется библиотека Pillow, ссылка на команду --> (тык)
import os from PIL import Image def watermark_photo(input_image_path,watermark_image_path,output_image_path): base_image = Image.open(input_image_path) watermark = Image.open(watermark_image_path).convert("RGBA") # add watermark to your image position = base_image.size newsize = (int(position[0]*8/100),int(position[0]*8/100)) # print(position) watermark = watermark.resize(newsize) # print(newsize) # return watermark new_position = position[0]-newsize[0]-20,position[1]-newsize[1]-20 # create a new transparent image transparent = Image.new(mode='RGBA',size=position,color=(0,0,0,0)) # paste the original image transparent.paste(base_image,(0,0)) # paste the watermark image transparent.paste(watermark,new_position,watermark) image_mode = base_image.mode print(image_mode) if image_mode == 'RGB': transparent = transparent.convert(image_mode) else: transparent = transparent.convert('P') transparent.save(output_image_path,optimize=True,quality=100) print("Saving"+output_image_path+"...") folder = input("Enter Folder Path:") watermark = input("Enter Watermark Path:") os.chdir(folder) files = os.listdir(os.getcwd()) print(files) if not os.path.isdir("output"): os.mkdir("output") c = 1 for f in files: if os.path.isfile(os.path.abspath(f)): if f.endswith(".png") or f.endswith(".jpg"): watermark_photo(f,watermark,"output/"+f)
6. Уведомление о разрядке батареи
Библиотека psutil является мощным инструментом для аналитики всех запущенных процессов и мониторинга системы в целом. Как идея — сделать приложение для удаленного мониторинга нод и ежедневной отсылкой информации вам в телеграмм
Пример с анализом уровня заряд батареи ноутбука, потребуется установить psutil
# pip install psutil import psutil battery = psutil.sensors_battery() plugged = battery.power_plugged percent = battery.percent if percent <= 30 and plugged!=True: # pip install py-notifier # pip install win10toast from pynotifier import Notification Notification( title="Battery Low", description=str(percent) + "% Battery remain!!", duration=5, # Duration in seconds ).send()
7. Сортировка папки "Загрузки"
Самый лучший скрипт в этой подборке. Если у вас все аниме картинки и хентай обучающие видео перемешаны в кучу, то запустив скрипт на выходе получите организованное рабочее место настоящего программиста!
И опять используем ту самую библиотеку psutil
import os import shutil os.chdir("E:\downloads") #print(os.getcwd()) #check number of files in directory files = os.listdir() #list of extension (You can add more if you want) extentions = { "images": [".jpg", ".png", ".jpeg", ".gif"], "videos": [".mp4", ".mkv"], "musics": [".mp3", ".wav"], "zip": [".zip", ".tgz", ".rar", ".tar"], "documents": [".pdf", ".docx", ".csv", ".xlsx", ".pptx", ".doc", ".ppt", ".xls"], "setup": [".msi", ".exe"], "programs": [".py", ".c", ".cpp", ".php", ".C", ".CPP"], "design": [".xd", ".psd"] } #sort to specific folder depend on extenstions def sorting(file): keys = list(extentions.keys()) for key in keys: for ext in extentions[key]: # print(ext) if file.endswith(ext): return key #iterat through each file for file in files: dist = sorting(file) if dist: try: shutil.move(file, "../download-sorting/" + dist) except: print(file + " is already exist") else: try: shutil.move(file, "../download-sorting/others") except: print(file + " is already exist")
8. Массовая рассылка писем по Email
То, чем пользуются спамеры. Данные берутся из CSV файла и после формируется сообщения для отправки по почте.
Нужна вроде эта библиотека --> (тык)
import csv from email.message import EmailMessage import smtplib def get_credentials(filepath): with open("credentials.txt", "r") as f: email_address = f.readline() email_pass = f.readline() return (email_address, email_pass) def login(email_address, email_pass, s): s.ehlo() # start TLS for security s.starttls() s.ehlo() # Authentication s.login(email_address, email_pass) print("login") def send_mail(): s = smtplib.SMTP("smtp.gmail.com", 587) email_address, email_pass = get_credentials("./credentials.txt") login(email_address, email_pass, s) # message to be sent subject = "Welcome to Python" body = """Python is an interpreted, high-level, general-purpose programming language.\n Created by Guido van Rossum and first released in 1991, Python's design philosophy emphasizes code readability\n with its notable use of significant whitespace""" message = EmailMessage() message.set_content(body) message['Subject'] = subject with open("emails.csv", newline="") as csvfile: spamreader = csv.reader(csvfile, delimiter=" ", quotechar="|") for email in spamreader: s.send_message(email_address, email[0], message) print("Send To " + email[0]) # terminating the session s.quit() print("sent") if __name__ == "__main__": send_mail()
9. Красивый прогресс бар
Если красиво, значит не нужно объяснять зачем оно нужно! И точка.
Библиотека tqdm помогает по-разному анимировать прогресс-бары
from tqdm import tqdm from PIL import Image import os from time import sleep def Resize_image(size, image): if os.path.isfile(image): try: im = Image.open(image) im.thumbnail(size, Image.ANTIALIAS) im.save("resize/" + str(image) + ".jpg") except Exception as ex: print(f"Error: {str(ex)} to {image}") path = input("Enter Path to images : ") size = input("Size Height , Width : ") size = tuple(map(int, size.split(","))) os.chdir(path) list_images = os.listdir(path) if "resize" not in list_images: os.mkdir("resize") for image in tqdm(list_images, desc="Resizing Images"): Resize_image(size, image) sleep(0.1) print("Resizing Completed!")
10. Снимок выбранного сайта
Будет лучше, если реализовать в headless режиме. Как идея — бот для автоматического создания контента:
- Взять текст, обработать его;
- По ключевому слову найти картинку;
- Заскринить её;
- Сформировать в единый пост;
Нужен лишь selenium, для хеадлесс режима можно PhantomJS
import sys from selenium import webdriver from selenium.webdriver.chrome.options import Options import chromedriver_binary script_name = sys.argv[0] options = Options() options.add_argument('--headless') driver = webdriver.Chrome(options=options) try: url = sys.argv[1] driver.get(url) page_width = driver.execute_script('return document.body.scrollWidth') page_height = driver.execute_script('return document.body.scrollHeight') driver.set_window_size(page_width, page_height) driver.save_screenshot('screenshot.png') driver.quit() print("SUCCESS") except IndexError: print('Usage: %s URL' % script_name)
11. Шифрование и дешифрование текста
Это можно объединить с кодом из пункта 2 и сделать менеджер паролей, это действительно круто.
Библиотека binascii установлена в python, а вот библиотеку pycrypto надо поставить.
from Crypto.Cipher import AES from Crypto import Random from binascii import b2a_hex import sys # get the plaintext plain_text = sys.argv[1] # The key length must be 16 (AES-128), 24 (AES-192), or 32 (AES-256) Bytes. key = b'this is a 16 key' # Generate a non-repeatable key vector with a length # equal to the size of the AES block iv = Random.new().read(AES.block_size) # Use key and iv to initialize AES object, use MODE_CFB mode mycipher = AES.new(key, AES.MODE_CFB, iv) # Add iv (key vector) to the beginning of the encrypted ciphertext # and transmit it together ciphertext = iv + mycipher.encrypt(plain_text.encode()) # To decrypt, use key and iv to generate a new AES object mydecrypt = AES.new(key, AES.MODE_CFB, ciphertext[:16]) # Use the newly generated AES object to decrypt the encrypted ciphertext decrypttext = mydecrypt.decrypt(ciphertext[16:]) # output file_out = open("encrypted.bin", "wb") file_out.write(ciphertext[16:]) file_out.close() print("The key k is: ", key) print("iv is: ", b2a_hex(ciphertext)[:16]) print("The encrypted data is: ", b2a_hex(ciphertext)[16:]) print("The decrypted data is: ", decrypttext.decode())
12. CLI блокнот для заметок
Каждый программист должен и калькулятор сделать и блокнот написать. А блокнот, написанный с CLI ценнее вдвойне!
Для работы надо установить click, который помогает делать красивые интерфейсы в командной строке
import click @click.group() @click.pass_context def todo(ctx): '''Simple CLI Todo App''' ctx.ensure_object(dict) #Open todo.txt – first line contains latest ID, rest contain tasks and IDs with open('./todo.txt') as f: content = f.readlines() #Transfer data from todo.txt to the context ctx.obj['LATEST'] = int(content[:1][0]) ctx.obj['TASKS'] = {en.split('``` ')[0]:en.split(' ```')[1][:-1] for en in content[1:]} @todo.command() @click.pass_context def tasks(ctx): '''Display tasks''' if ctx.obj['TASKS']: click.echo('YOUR TASKS\n**********') #Iterate through all the tasks stored in the context for i, task in ctx.obj['TASKS'].items(): click.echo('• ' + task + ' (ID: ' + i + ')') click.echo('') else: click.echo('No tasks yet! Use ADD to add one.\n') @todo.command() @click.pass_context @click.option('-add', '--add_task', prompt='Enter task to add') def add(ctx, add_task): '''Add a task''' if add_task: #Add task to list in context ctx.obj['TASKS'][ctx.obj['LATEST']] = add_task click.echo('Added task "' + add_task + '" with ID ' + str(ctx.obj['LATEST'])) #Open todo.txt and write current index and tasks with IDs (separated by " ``` {% endraw %} ") curr_ind = [str(ctx.obj['LATEST'] + 1)] tasks = [str(i) + ' {% raw %} ```' + t for (i, t) in ctx.obj['TASKS'].items()] with open('./todo.txt', 'w') as f: f.writelines(['%s\n' % en for en in curr_ind + tasks]) @todo.command() @click.pass_context @click.option('-fin', '--fin_taskid', prompt='Enter ID of task to finish', type=int) def done(ctx, fin_taskid): '''Delete a task by ID''' #Find task with associated ID if str(fin_taskid) in ctx.obj['TASKS'].keys(): task = ctx.obj['TASKS'][str(fin_taskid)] #Delete task from task list in context del ctx.obj['TASKS'][str(fin_taskid)] click.echo('Finished and removed task "' + task + '" with id ' + str(fin_taskid)) #Open todo.txt and write current index and tasks with IDs (separated by " ``` {% endraw %} ") if ctx.obj['TASKS']: curr_ind = [str(ctx.obj['LATEST'] + 1)] tasks = [str(i) + ' {% raw %} ```' + t for (i, t) in ctx.obj['TASKS'].items()] with open('./todo.txt', 'w') as f: f.writelines(['%s\n' % en for en in curr_ind + tasks]) else: #Resets ID tracker to 0 if list is empty with open('./todo.txt', 'w') as f: f.writelines([str(0) + '\n']) else: click.echo('Error: no task with id ' + str(fin_taskid)) if __name__ == '__main__': todo()
13. Конвертер валют
Младший брат тг-бота @anything_notslava_bot, который сможет перевести рубли в драхмы за 5 секунд.
В коде слишком длинный список, так что фулл код по ссылке --> (тык)
import requests import json import sys from pprint import pprint # The below 4 lines bring out the value of currency from the api at fixer.io. I had to register there, the key is unique to me. url = "http://data.fixer.io/api/latest?access_key=33ec7c73f8a4eb6b9b5b5f95118b2275" data = requests.get(url).text data2 = json.loads(data) #brings whether request was successful,timestamp etc fx = data2["rates"] currencies = [ "AED : Emirati Dirham,United Arab Emirates Dirham", ............ "ZWL : Zimbabwean Dollar,Zimbabwe Dollar", ] # The below function calculates the actual conversion def function1(): query = input( "Please specify the amount of currency to convert, from currency, to currency (with space in between).\nPress SHOW to see list of currencies available. \nPress Q to quit. \n" ) if query == "Q": sys.exit() elif query == "SHOW": pprint(currencies) function1() else: qty, fromC, toC = query.split(" ") fromC = fromC.upper() toC = toC.upper() qty = float(round(int(qty), 2)) amount = round(qty * fx[toC] / fx[fromC], 2) print(f"{qty} of currency {fromC} amounts to {amount} of currency {toC} today") try: function1() except KeyError: print("You seem to have inputted wrongly, retry!") function1()
14. Секундомер
Если сделали блокнот, то и секундомер тоже нужно, тем более с графическим интерфейсом. Разобрать этот код — хорошая практика.
Нужно установить тот же Pillow --> (тык)
import tkinter as Tkinter from datetime import datetime counter = 0 running = False def counter_label(label): def count(): if running: global counter # To manage the intial delay. if counter == 0: display = 'Ready!' else: tt = datetime.utcfromtimestamp(counter) string = tt.strftime('%H:%M:%S') display = string label['text'] = display # label.after(arg1, arg2) delays by # first argument given in milliseconds # and then calls the function given as second argument. # Generally like here we need to call the # function in which it is present repeatedly. # Delays by 1000ms=1 seconds and call count again. label.after(1000, count) counter += 1 # Triggering the start of the counter. count() # start function of the stopwatch def Start(label): global running running = True counter_label(label) start['state'] = 'disabled' stop['state'] = 'normal' reset['state'] = 'normal' # Stop function of the stopwatch def Stop(): global running start['state'] = 'normal' stop['state'] = 'disabled' reset['state'] = 'normal' running = False # Reset function of the stopwatch def Reset(label): global counter counter = 0 # If reset is pressed after pressing stop. if not running: reset['state'] = 'disabled' label['text'] = '00:00:00' # If reset is pressed while the stopwatch is running. else: label['text'] = '00:00:00' root = Tkinter.Tk() root.title("Stopwatch") # Fixing the window size. root.minsize(width=250, height=70) label = Tkinter.Label(root, text='Ready!', fg='black', font='Verdana 30 bold') label.pack() f = Tkinter.Frame(root) start = Tkinter.Button(f, text='Start', width=6, command=lambda: Start(label)) stop = Tkinter.Button(f, text='Stop', width=6, state='disabled', command=Stop) reset = Tkinter.Button(f, text='Reset', width=6, state='disabled', command=lambda: Reset(label)) f.pack(anchor='center', pady=5) start.pack(side='left') stop.pack(side='left') reset.pack(side='left') root.mainloop()
15. Сжатие папок и файлов
Может быть полезно, если под рукой нет 7zip или вы крутой программист и решили с нуля написать все инструменты.
Все библиотеки — стандарты python
import zipfile import sys import os # compress file function def zip_file(file_path): compress_file = zipfile.ZipFile(file_path + '.zip', 'w') compress_file.write(path, compress_type=zipfile.ZIP_DEFLATED) compress_file.close() # Declare the function to return all file paths of the particular directory def retrieve_file_paths(dir_name): # setup file paths variable file_paths = [] # Read all directory, subdirectories and file lists for root, directories, files in os.walk(dir_name): for filename in files: # Create the full file path by using os module. file_path = os.path.join(root, filename) file_paths.append(file_path) # return all paths return file_paths def zip_dir(dir_path, file_paths): # write files and folders to a zipfile compress_dir = zipfile.ZipFile(dir_path + '.zip', 'w') with compress_dir: # write each file separately for file in file_paths: compress_dir.write(file) if __name__ == "__main__": path = sys.argv[1] if os.path.isdir(path): files_path = retrieve_file_paths(path) # print the list of files to be zipped print('The following list of files will be zipped:') for file_name in files_path: print(file_name) zip_dir(path, files_path) elif os.path.isfile(path): print('The %s will be zipped:' % path) zip_file(path) else: print('a special file(socket,FIFO,device file), please input file or dir')
16. Парсинг рейтинга фильма с IMDB
Нет, ну а вдруг пригодится? Такие парсеры всегда можно вставить в ботов для автоматического постинга на каналы, получается у вас уже может быть сеть из каналов про фильмы.
pandas и bs4 нужно будет установить
from bs4 import BeautifulSoup import requests import pandas as pd import os # Setting up session s = requests.session() # List contaiting all the films for which data has to be scraped from IMDB films = [] # Lists contaiting web scraped data names = [] ratings = [] genres = [] # Define path where your films are present # For eg: "/Users/utkarsh/Desktop/films" path = input("Enter the path where your films are: ") # Films with extensions filmswe = os.listdir(path) for film in filmswe: # Append into my films list (without extensions) films.append(os.path.splitext(film)[0]) # print(os.path.splitext(film)[0]) for line in films: # x = line.split(", ") title = line.lower() # release = x[1] query = "+".join(title.split()) URL = "https://www.imdb.com/search/title/?title=" + query print(URL) # print(release) try: response = s.get(URL) #getting contect from IMDB Website content = response.content # print(response.status_code) soup = BeautifulSoup(response.content, features="html.parser") #searching all films containers found containers = soup.find_all("div", class_="lister-item-content") for result in containers: name1 = result.h3.a.text name = result.h3.a.text.lower() # Uncomment below lines if you want year specific as well, define year variable before this # year = result.h3.find( # "span", class_="lister-item-year text-muted unbold" # ).text.lower() #if film found (searching using name) if title in name: #scraping rating rating = result.find("div",class_="inline-block ratings-imdb-rating")["data-value"] #scraping genre genre = result.p.find("span", class_="genre") genre = genre.contents[0] #appending name, rating and genre to individual lists names.append(name1) ratings.append(rating) genres.append(genre) except Exception: print("Try again with valid combination of tile and release year") #storing in pandas dataframe df = pd.DataFrame({'Film Name':names,'Rating':ratings,'Genre':genres}) #making csv using pandas df.to_csv('film_ratings.csv', index=False, encoding='utf-8')
17. Текст в речь
Библиотека gTTS использует гугловские технологии конвертации текста в речь. Не знаю где может быть полезно, но это действительно круто.
Надо будет установить gTTS --> (тык)
from gtts import gTTS import os file = open("abc.txt", "r").read() speech = gTTS(text=file, lang='en', slow=False) speech.save("voice.mp3") os.system("voice.mp3")
18. Поиск в гугл
Если перейти на google.com является для тебя тяжелой задачей, тебя могут спасти эти 3 строчки кода.
Чтобы всё работало как швейцарские часы --> pip install google
from googlesearch import search query = "best hentai videos with Asynco and Max Wayld" for i in search(query, tld="co.in", num=10, stop=10, pause=2): print(i)
19. Сокращение ссылок
Чтобы не использовать сторонние сервисы по типу bit.ly, ты всегда можешь сделать собственную "сокращалку" в пару строчек.
Надо будет установить pyshorteners --> (тык)
import pyshorteners s=pyshorteners.Shortener() url = "type your hentai videos here" print(s.tinyurl.short(url))
20. Загрузка видео с Youtube
Сначала ты учишься загружать видео с ютуба, а потом делаешь свои софты для выгрузки хентая в огромных количествах. Народная мудрость. И точка.
Чтобы всё работало --> pip install pytube
from pytube import YouTube link = input("Enter the link of youtube video: ") yt = YouTube(link) ys = yt.streams.get_highest_resolution() print("Downloading...") ys.download("Downloads\python") print("Download completed!!")
Деген-софты от наших ру кодеров.
Мы собрали здесь некоторые софты от наших ру кодеров, которыми они делились в своих каналах. Почти все темы для которых предназначались эти софты - уже неактуальны, но большинству людей, которые пробуют себя в кодинге, будет полезно поразбирать такие штуковины.
P.S: ни Макс, ни Асинка, не отвечают за качество кода здесь! :)
От Nazavod`a:
От KyouKisu:
От Paranoik`a:
От Svinarnika:
От Itachi:
От кодим ~ криптуем:
От ArteMm `へ´:
40 дополнительных мини-проектов.
Эти проекты идут отдельного от первого блока в статье, так как здесь мы просто делаем большой сборник из материалов, в которых сразу есть и код, и описание того, зачем собственно этот код нужен и как он работает.
Список большой, так что просто в быстром формате пробегайся по всем названиям, а потом уже полноценно разбирай то, что вызывает тепло в районе сердечка.
1. Создание акронимов
Link: https://thecleverprogrammer.com/2021/01/13/acronyms-using-python
2. Парсинг твиттера без его API
Link: https://thecleverprogrammer.com/2020/08/17/scraping-twitter-with-python
3. Будильников много не бывает!
Link: https://thecleverprogrammer.com/2021/01/13/alarm-clock-with-python
4. Слайсер для почты
Link: https://thecleverprogrammer.com/2021/01/12/email-slicer-with-python
5. Генератор историй
Link: https://thecleverprogrammer.com/2021/01/11/story-generator-with-python
6. Генератор рандомных паролей
Link: https://thecleverprogrammer.com/2021/01/11/python-program-to-generate-password
7. Камень ножницы бумага
Link: https://thecleverprogrammer.com/2021/01/10/rock-paper-and-scissors-game-with-python
8. Симулятор броска костей
Link: https://thecleverprogrammer.com/2021/01/10/dice-roll-simulator-with-python
9. Генератор QR-кодов
Link: https://thecleverprogrammer.com/2021/01/09/qr-codes-with-python
10. Создание квиз-викторины
Link: https://thecleverprogrammer.com/2021/01/03/create-a-quiz-game-with-python
11. Печать цветного текста
Link: https://thecleverprogrammer.com/2020/12/23/print-colored-text-with-python
12. Больше калькуляторов богу калькуляторов!
Link: https://thecleverprogrammer.com/2020/12/21/bmi-calculator-with-python
13. Преобразование градусов Фаренгейта в градусы Цельсия
Link: https://thecleverprogrammer.com/2020/11/30/convert-fahrenheit-to-celsius-with-python
14. Цифровые часы
Link: https://thecleverprogrammer.com/2021/01/09/digital-clock-with-python
15. Использование камеры телефона
Link: https://thecleverprogrammer.com/2021/01/05/use-phone-camera-with-python
16. Музыкальный плеер
Link: https://thecleverprogrammer.com/2020/12/27/music-player-gui-with-python
17. Игра жизни
Link: https://thecleverprogrammer.com/2020/12/25/game-of-life-with-python
18. Извлечение текста из видео
Link: https://thecleverprogrammer.com/2020/12/25/extract-text-from-videos-using-python
19. Создание игр
Link: https://thecleverprogrammer.com/2020/12/23/create-a-game-with-python
20. Исправление орфографии
Link: https://thecleverprogrammer.com/2020/12/18/spelling-correction-with-python
21. Черепашья графика
Link: https://thecleverprogrammer.com/2020/12/10/turtle-graphics-with-python
22. Моделирование задачи Монти Холла
Link: https://thecleverprogrammer.com/2020/12/09/monty-hall-problem-with-python
23. Конвертация видео в аудио
Link: https://thecleverprogrammer.com/2020/12/08/video-to-audio-converter-with-python
24. Крестики-нолики с графическим интерфейсом
Link: https://thecleverprogrammer.com/2020/12/06/tic-tac-toe-gui-with-python
25. Калькулятор с графическим интерфейсом
Link: https://thecleverprogrammer.com/2020/12/05/calculator-gui-with-python
26. Игра в угадывание чисел
Link: https://thecleverprogrammer.com/2020/12/04/number-guessing-game-with-python-and-c
27. Интерфейс для конвентера изображений
Link: https://thecleverprogrammer.com/2020/12/02/image-converter-gui-with-python
28. Шахматная доска
Link: https://thecleverprogrammer.com/2020/11/27/chessboard-with-python
29. Считыватель QR-кодов и штрих-кодов
Link: https://thecleverprogrammer.com/2020/10/23/barcode-and-qr-code-reader-with-python
30. Извлечь текст из PDF
Link: https://thecleverprogrammer.com/2020/10/06/extract-text-from-pdf-using-python
31. Карточная игра
Link: https://thecleverprogrammer.com/2020/10/04/card-game-with-python
32. Веб-парсер
Link: https://thecleverprogrammer.com/2020/10/01/web-scraper-with-python
33. Интерфейс текстового редактора
Link: https://thecleverprogrammer.com/2020/09/25/text-editor-gui-with-python
33. Автоматическая отправка писем
Link: https://thecleverprogrammer.com/2020/09/15/send-emails-with-python
34. Чат-бот
Link: https://thecleverprogrammer.com/2020/08/21/deploy-a-chatbot-with-python
35. Создание телеграм-бота
Link: https://thecleverprogrammer.com/2020/08/18/telegram-bot-with-python
36. Преобразование текста в речь
Link: https://thecleverprogrammer.com/2020/08/16/text-to-speech-with-python
37. Парсинг Instagram
Link: https://thecleverprogrammer.com/2020/07/30/scraping-instagram-with-python
38. Веб-парсинг для создания CSV
Link: https://thecleverprogrammer.com/2020/08/08/web-scraping-to-create-csv
39. Построение трехмерных график
Link: https://thecleverprogrammer.com/2020/05/02/3d-graphs-with-matplotlib
40. Устройство системы рекомендаций Netflix
Link: https://thecleverprogrammer.com/2022/07/05/netflix-recommendation-system-using-python
Бонусная часть
Материалы которые мы разобрали для написания этой статьи:
Немного бонусов:
Все эти большие и маленькие строчки кода для тебя с любовью и заботой упаковали Max Wayld и Asynco.
Послесловия для статей такого формата будут лишними, так что просто ещё раз упомяну что мы будем рады любому твоему фидбеку! Спасибо что прочитал всё это и (надеюсь) разобрал хотя-бы часть проектов.