Algoritmos e Estruturas de Dados

Hoje vim apenas compartilhar um repositório contendo um conjunto de algoritmos e estruturas de dados em C, Java, Python e Go.

O repositório pode ser acessado através do seguinte link: https://github.com/kelvins/Algoritmos-e-Estruturas-de-Dados

No repositório podemos encontrar diversos algoritmos, como por exemplo:

  • Algoritmo Dijkstra
  • Algoritmo Floyd Warshall
  • Caixeiro Viajante
  • Ciclo Hamiltoniano
  • Componentes Conexos
  • Grafo
  • Algoritmo de Ordenação BubbleSort
  • Algoritmo de Ordenação InsertionSort
  • Algoritmo de Ordenação SelectionSort
  • Algoritmo de Ordenação ShellSort
  • Torre de Hanói
  • Sequência de Fibonacci
  • Algoritmo de Ordenação InsertionSort Recursivo
  • Passeio do Cavalo
  • Entre outros…

Espero que gostem!!!

Pygame – Drag and Drop

Hoje irei apresentar um exemplo de como carregar imagens com a biblioteca Pygame e como movimentar estas imagens utilizando o mouse (Drag and Drop).

Resumidamente, este exemplo tem o objetivo de mostrar como carregar uma imagem com fundo transparente, como redimensionar esta imagem utilizando a função SCALE da Pygame e como utilizar os eventosde mouse (MOUSEBUTTONDOWN e MOUSEBUTTONUP).

Bom, primeiramente é necessário carregar uma imagem. No exemplo foi utilizada a seguinte imagem:

chew

Neste exemplo a imagem deve estar na mesma pasta do arquivo fonte, caso contrário é necessário definir o caminho correto da imagem.

Ok, imagem salva, vamos ao código:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Importa as bibliotecas utilizadas
import sys, pygame
from pygame import mouse

# Define uma cor padrao em RGB
WHITE = (255, 255, 255)

# Cria uma classe para armazenar os atributos do nosso heroi
class Hero(object):
    # Deixei alguns valores por padrao apenas por comodidade
    def __init__(self, image_path = "chew.png", scale = (100,160), position = [100, 200]):
        # Caminho para a imagem que ira representar o heroi
        self.image_path = image_path
        # Posicao inicial do heroi na tela
        self.position = position
        # Escala fixa do heroi
        self.scale = scale
        # Variavel utilizada para saber se o heroi esta selecionado ou nao
        self.held = False

        # Carrega a imagem do heroi
        self.image = pygame.image.load(self.image_path).convert_alpha()
        # Redimensiona a imagem para a escala definida
        self.image = pygame.transform.scale(self.image, self.scale)

# Classe principal responsavel pela logica do jogo
class Game(object):
    def __init__(self):
        # Inicializa a biblioteca pygame
        pygame.init()

        # Define a largura e altura da janela em pixels 600x400
        self.main_window = pygame.display.set_mode((600, 400))

        # Define um nome para a janela
        pygame.display.set_caption("Drag and Drop")

        # Utiliza uma lista para armazenar os herois do jogo
        self.heroes = []

        # Utilizado para controlar a velocidade de quadros (de atualizacoes da tela)
        self.clock = pygame.time.Clock()

    # Funcao utilizada para criar e carregar a imagem de todos os herois
    def create_heroes(self):
        self.heroes.append(Hero("chew.png", (100, 160), [100, 200]))
        self.heroes.append(Hero("chew.png", (80, 128), [50, 100]))
        self.heroes.append(Hero("chew.png", (50, 80), [400, 300]))
        self.heroes.append(Hero("chew.png", (25, 40), [300, 250]))

    # Funcao utilizada para verificar se a posicao do mouse esta em cima
    # de um heroi (passado por parametro)
    def is_over(self, mouse_pos, hero):
        # Verifica a posicao no eixo X
        if mouse_pos[0] > hero.position[0] and mouse_pos[0] < hero.position[0] + hero.scale[0]:
            # Verifica a posicao no eixo Y
            if mouse_pos[1] > hero.position[1] and mouse_pos[1] < hero.position[1] + hero.scale[1]:
                return True
        return False

    # Funcao chamada quando o usuario clica com o mouse
    def mouse_button_down(self):
        # Obtem a posicao atual do mouse
        mouse_pos = mouse.get_pos()

        for i in xrange(0, len(self.heroes)):
            # Somente "ativa" a imagem_selecionada se o usuario clicou em cima da imagem
            if self.is_over(mouse_pos, self.heroes[i]):
                self.heroes[i].held = True

    # Funcao chamada quando o usuario solta o botao do mouse
    def mouse_button_up(self):
        # 'Libera' todos os herois
        for i in xrange(0, len(self.heroes)):
            self.heroes[i].held = False

    # Funcao responsavel por atualizar a posicao de todos os herois
    def update_position(self):
        # Obtem a posicao atual do mouse
        mouse_pos = mouse.get_pos()

        for i in xrange(0, len(self.heroes)):
            # Se a variavel imagem_selecionada estiver "ativa" (True), atualiza a posicao da imagem
            if self.heroes[i].held:
                # Define as posicoes X e Y da imagem, posiciona a imagem com o mouse centralizado
                self.heroes[i].position[0] = mouse_pos[0] - self.heroes[i].scale[0]/2
                self.heroes[i].position[1] = mouse_pos[1] - self.heroes[i].scale[1]/2

    # Funcao que roda o jogo
    def run(self):
        # Chama a funcao para criar os herois
        self.create_heroes()

        # Loop principal do jogo
        while True:

            # Verifica se algum evento aconteceu
            for event in pygame.event.get():
                # Verifica se foi um evento de saida (pygame.QUIT), em caso afirmativo fecha a aplicacao
                if event.type == pygame.QUIT: 
                    sys.exit()
                # Se o usuario soltar o botao do mouse "ativa" a variavel imagem_selecionada
                elif event.type == pygame.MOUSEBUTTONDOWN:
                    self.mouse_button_down()
                # Se o usuario soltar o botao do mouse "desativa" a variavel imagem_selecionada
                elif event.type == pygame.MOUSEBUTTONUP:
                    self.mouse_button_up()

            # Chama a funcao que atualiza a posicao dos herois
            self.update_position()

            # Preenche a tela com uma cor, neste caso preto (definido logo apos importar as bibliotecas)
            self.main_window.fill(WHITE)
            
            # Coloca a imagem de todos os herois na tela com base na posicao
            for i in xrange(0, len(self.heroes)):
                self.main_window.blit(self.heroes[i].image, self.heroes[i].position)
            
            # Atualiza a tela visivel ao usuario
            pygame.display.flip()

            # Limita a taxa de quadros (framerate) a 60 quadros por segundo (60fps)
            self.clock.tick(60)

if __name__ == "__main__":
    game = Game()
    game.run()

 

O código é relativamente simples. A classe Hero é utilizada para armazenar alguns atributos do herói (e.x. posição, escala, etc), bem como carregar (linha 22) e redimensionar (linha 24) a imagem. A classe Game é responsável por toda a lógica do ‘jogo’, como por exemplo criar a janela principal, criar os heróis e verificar os eventos de mouse. A função is_over é responsável por verificar se a posição do mouse está sobre uma determinada imagem. A função mouse_button_down é chamada quando o usuaário clica em alguma posição da tela e é responsável por verificar se o usuário clicou em alguma imagem. A função mouse_button_up é chamada quando o usuário solta o botão do mouse e é responsável por ‘liberar’ todas as imagens. A função update_position é responsável por atualizar a posição de todas as imagens.

No mais, o código está cheio de comentários para facilitar o entendimento, mas qualquer dúvida é só deixar um comentário aqui em baixo.

 

Atualização: neste exemplo foi utilizado Python 2.7.11 e Pygame 1.9.3.

 

Pygame – Introdução ao desenvolvimento de jogos em Python

Introdução

Este é um tutorial de introdução e é direcionado a pessoas que já tenham um conhecimento básico em Python mas que nunca utilizaram a biblioteca pygame.

A pygame é uma biblioteca de desenvolvimento de jogos multiplataforma desenvolvida para ser utilizada em Python. A biblioteca abstrai muita coisa, como por exemplo o uso de memória e CPU, facilitando muito a vida do desenvolvedor, que por sua vez, precisa se preocupar com a estruturação do jogo em si.

Para quem tem interesse em conhecer mais sobre a pygame, deixo aqui dois links muito bons que expicam mais detalhadamente sobre a biblioteca: Pygame e Wikipedia.


Tutorial

Supondo que você já tenha instalado o Python, o primeiro passo é instalar a biblioteca pygame. Você pode fazer o download da biblioteca através do seguinte link: http://www.pygame.org/download.shtml

Faça o download da versão para o seu sistema operacional (windows, unix distributions, macintosh, etc) e instale normalmente. Após finalizar a instalação abra um terminal do python (command line) e tente importar a biblioteca utilizando o comando import pygame, caso a biblioteca não esteja instalada você receberá um erro.

Com a biblioteca instalada e funcionando vamos ao código:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# Importa as bibliotecas utilizadas
import sys, pygame

# Define algumas cores em RGB
PRETO  = (0, 0, 0)
BRANCO = (255, 255, 255)

# Inicializa a biblioteca
pygame.init()

# Define a largura e altura da janela em pixels 800x600
size = (800, 600)
screen = pygame.display.set_mode(size)

# Armazena a posicao X e Y do circulo que iremos desenhar dentro do Loop
posicaoCirculo = [200, 30]
# Velocidade de movimentacao do circulo nos eixos X e Y respectivamente
velocidadeCirculo = [5, 5]

# Utilizado para controlar a velocidade de quadros (de atualizacoes da tela)
clock = pygame.time.Clock()

# Define um nome para a janela
pygame.display.set_caption("Introducao")

# Loop principal do jogo
while True:

	# Verifica se algum evento aconteceu
	for event in pygame.event.get():
		# Verifica se foi um evento de saida (pygame.QUIT), 
		# em caso afirmativo fecha a aplicacao
		if event.type == pygame.QUIT: sys.exit()

	pressed = pygame.key.get_pressed()

	if pressed[pygame.K_UP]: posicaoCirculo[1] -= velocidadeCirculo[1]
	if pressed[pygame.K_DOWN]: posicaoCirculo[1] += velocidadeCirculo[1]
	if pressed[pygame.K_LEFT]: posicaoCirculo[0] -= velocidadeCirculo[0]
	if pressed[pygame.K_RIGHT]: posicaoCirculo[0] += velocidadeCirculo[0]

	# Preenche a tela com uma cor, neste caso preto (definido logo apos importar as bibliotecas)
	screen.fill(PRETO)
	
	# Desenha um circulo branco na tela
	pygame.draw.circle(screen, BRANCO, posicaoCirculo, 10)
	
	# Atualiza a tela visivel ao usuario
	pygame.display.flip()

	# Limita a taxa de quadros (framerate) a 60 quadros por segundo (60fps)
	clock.tick(60)

Apesar de o código estar bem simples e comentado vou dar uma explicação resumida do que acontece.

Primeiramente são carregadas as bibliotecas e definidas algumas cores que serão utilizadas posteriormente, em seguida a biblioteca pygame é inicializada e é definido o tamanho da tela.

Nas linhas 16 e 18 são definidas a posição inicial e a velocidade de movimentação do circulo, e logo após é criada a variável clock que controla os quadros por segundo e então definido um título para a janela.

Dentro do loop principal que começa na linha 27 é feito uma verificação de eventos e teclas pressionadas, para saber se é necessário finalizar a aplicação ou movimentar o circulo. A movimentação do circulo nos eixos X e Y é feita através das setas do teclado. Lembre-se que o sistema de coordenadas é diferente de um plano cartesiano, sendo que as posições iniciais dos eixos X e Y (0, 0) são no canto superior esquerdo.

Após isto é necessário “pintar” e atualizar a tela. Na linha 43 o código pinta toda a tela de preto, logo em seguida na linha 46 o circulo branco é desenhado na tela nas posições da variável “posicaoCirculo” e com raio de 10 pixels. Finalizando, na linha 49 é feita a atualização da tela para o usuário e a linha 52 é utilizada para limitar os quadros por segundo, mantendo a “velocidade” do jogo constante.

Resultado

O resultado do código é uma tela preta com uma bolinha branca que é possível movimentar utilizando as setas do teclado.

resultado_codigo_pygame

Espero que tenham gostado do tutorial e que seja útil para quem está começando a desenvolver jogos com a pygame.

Qualquer dúvida ou sugestão é só comentar aqui em baixo.

Processamento de Imagem com Python e OpenCV – Smoothing

Hoje irei mostrar um exemplo para fazer a “suavização” de imagens utilizando Python e OpenCV.

O OpenCV possui vários tipos de filtros para o tratamento/processamento de imagens, como por exemplo o Gaussian Blurring e o Bilateral Filtering. Hoje irei mostrar como utilizar alguns destes filtros em Python e o resultado que cada filtro pode gerar.

Bom, segue abaixo o código que faz o “serviço”:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Importa as bibliotecas necessarias
import cv2
import numpy as np
 
# Carrega a imagem original
image = cv2.imread('image3.jpg')

# Aplica os respectivos filtros
kernel = np.ones((6,6),np.float32)/25
filter2D = cv2.filter2D(image,-1,kernel)
blur = cv2.blur(image,(5,5))
gaussianBlur = cv2.GaussianBlur(image,(5,5),0)
median = cv2.medianBlur(image,5)
bilateralFilter = cv2.bilateralFilter(image,9,75,75)

# Escreve o nome de cada filtro na imagem correspondente
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(image,'Original Image',(5,320), font, 1, (0,0,255), 2, cv2.LINE_AA)
cv2.putText(filter2D,'Filter 2D',(45,320), font, 1, (0,0,255), 2, cv2.LINE_AA)
cv2.putText(blur,'Blur',(80,320), font, 1, (0,0,255), 2, cv2.LINE_AA)
cv2.putText(gaussianBlur,'Gaussian Blur',(10,320), font, 1, (0,0,255), 2, cv2.LINE_AA)
cv2.putText(median,'Median',(60,320), font, 1, (0,0,255), 2, cv2.LINE_AA)
cv2.putText(bilateralFilter,'Bilateral Filter',(10,320), font, 1, (0,0,255), 2, cv2.LINE_AA)

# Concatena as imagens para gerar a imagem de saida
tempImage1 = np.concatenate((image, median, gaussianBlur), axis=1)
tempImage2 = np.concatenate((bilateralFilter, blur, filter2D), axis=1)
finalImage = np.concatenate((tempImage1, tempImage2), axis=0)

# Salva a imagem
cv2.imwrite("image.png", finalImage)
# Mostra a imagem final concatenada
cv2.imshow("Final Image", finalImage)
# Aguarda tecla para finalizar
cv2.waitKey(0)

 

Como vocês podem ver o código é extremamente simples, na verdade o bloco de código que realmente aplica os filtros começa na linha 9 até a linha 14, o resto do código serve apenas para carregar as bibliotecas e a imagem, e para gerar, mostrar e salvar o resultado final para o usuário.

O resultado obtido foi o seguinte:

image

Para saber mais sobre cada filtro acesse o seguinte link: http://docs.opencv.org/3.1.0/d4/d13/tutorial_py_filtering.html#gsc.tab=0

Qualquer dúvida ou sugestão é só deixar o comentário.

Detecção Facial com Python e OpenCV

Olá, hoje irei mostrar um exemplo extremamente simples para fazer a detecção facial em uma imagem utilizando Python e OpenCV (para saber como instalar o OpenCV clique aqui). Para se ter uma ideia da simplicidade do código, tirando os comentários e quebras de linha o código tem apenas 17 linhas.

Talk is Cheap

Ok, Ok, vamos ao código:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Importa o OpenCV
import cv2

# Define o caminho para o classificador, neste caso Haar Cascade
caminho_classificador = "haarcascade_frontalface_default.xml"
# Define o caminho para a imagem
caminho_imagem = "imagem.jpg"
# Caso a image e/ou o classificador nao estejam na mesma pasta do arquivo 
# fonte eh preciso informar o caminho completo "C:\\Users\\..."

# Cria o classificador
classificador = cv2.CascadeClassifier(caminho_classificador)

# Le a imagem
imagem = cv2.imread(caminho_imagem)

# Converte a imagem para escala de cinza
cinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)

# Detecta as faces na imagem
faces = classificador.detectMultiScale(
    cinza,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(30, 30),
    flags=cv2.CASCADE_SCALE_IMAGE
)

# Desenha um retangulo para cada face encontrada
for (x, y, w, h) in faces:
    cv2.rectangle(imagem, (x, y), (x+w, y+h), (0, 255, 0), 2)

# Mostra a imagem (colorida) com os retangulos desenhados nas faces
cv2.imshow("Faces found", imagem)
# Aguarda tecla para fechar a janela
cv2.waitKey(0)

 

O resultado do código foi o seguinte:

Rage Against the Machine

Rage Against the Machine

O código está todo comentado para facilitar o entendimento.

Os arquivos XML para o classificador podem ser encontrados no seguinte link: https://github.com/Itseez/opencv/tree/master/data

Segue uma breve descrição sobre os parâmetros da função detectMultiScale():

  • scaleFactor  – Parâmetro especificando o quanto o tamanho da imagem é reduzido em cada escala da imagem.
  • minNeighbors – Parâmetro especificando quantos vizinhos cada retângulo candidato deve ter para retê-lo.
  • minSize – Tamanho mínimo possível do objeto. Objetos menores do que isto são ignorados.

 

Como é possível ver, é realmente muito simples e divertido brincar com identificação e reconhecimento facial utilizando Python e OpenCV.

Enfim, qualquer dúvida ou sugestão é só comentar aqui em baixo.

 

Fonte: https://realpython.com/blog/python/face-recognition-with-python/

Listas em Python

Hoje vou mostrar alguns métodos bem interessantes que podem ser utilizados em listas em Python, o que muitas vezes pode poupar um bom trabalho, como por exemplo, ordenar lista, inverter lista, converter caractere em inteiro, entre outras.

A maioria dos métodos podem ser encontrados no seguinte link: https://docs.python.org/2/tutorial/datastructures.html

Cria uma lista de caracteres:

lista = [‘1’, ‘4’, ‘3’, ‘2’, ‘5’, ‘7’, ‘6’, ‘8’, ‘9’]

Converte todos os caracteres da lista para inteiro:

lista = map(int, lista)

Mostra o maior valor da lista:

print max(lista)

Mostra o menor valor da lista:

print min(lista)

Soma todos os valores de uma lista:

print sum(lista)

Busca e retorna o índice do valor passado como parâmetro:

lista.index(7)

Ordena a lista em ordem crescente:

lista.sort()

Inverte a lista:

lista.reverse()

Insere todos os elementos de uma lista ao final de outra lista:

lista.extend(lista2)

Remove o primeiro valor igual ao parâmetro (exemplo 14) encontrado na lista:

lista.remove(14)

Remove o último valor da lista:

lista.pop()

Remove o primeiro valor da lista:

lista.pop(0)

Conta quantas vezes o parâmetro (exemplo 3) aparece na lista:

lista.count(3)

Transforma uma string em uma lista:

lista = []

string = ‘1 2 3 4 5 6 7 8’

lista = string.split()

Transforma uma lista em uma string colocando uma virgula entre cada elemento:

lista = [‘1’, ‘4’, ‘3’, ‘2’, ‘5’, ‘7’, ‘6’, ‘8’, ‘9’]

string = ‘, ‘.join(lista)

print string

Gera um valor aleatório da lista:

import random

random.choice(lista)

 

Estes são alguns métodos muito utilizados e muito úteis para se trabalhar com listas em Python.

Qualquer dúvida ou sugestão é só comentar.

Sequência de Fibonacci em Python

Hoje irei apresentar um pequeno exemplo da Sequência de Fibonacci em Python utilizando recursividade.

“Na matemática, a Sequência de Fibonacci, é uma sequência de números inteiros, começando normalmente por 0 e 1, na qual, cada termo subsequente corresponde a soma dos dois anteriores. Os números de Fibonacci são, portanto, os números que compõem a seguinte sequência:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, … (podendo ser omitido o zero inicial).

Segue abaixo o código de apenas 7 linhas que usa recursividade para achar o número da sequência de Fibonacci de acordo com o índice passado como parâmetro. Ex.: Fibonacci(11) = 89.

def Fibonacci(n):
    if n <= 1:
        return n
    else:
        return Fibonacci(n-1) + Fibonacci(n-2)
print('Fibonacci = ' + str(Fibonacci(10)) )

Se quiser saber mais sobre a sequência de Fibonacci acesse este link.

Qualquer dúvida é só comentar…

CRUD Python + MySQL

Exemplo simples de CRUD (Create-Read-Update-Delete) em Python + MySQL:

# Importa os módulos necessários 'MySQLdb'
import MySQLdb, time

# Define endereço do servidor, nome de usuário do bd, senha do usuário do bd e nome da base de dados
aServidor = "localhost"
aUsuario  = "root"
aSenha    = "root"
aBanco    = "testepython"

# Realiza a conexão com o banco
db = MySQLdb.connect(aServidor, aUsuario, aSenha, aBanco)
cursor = db.cursor() # seta o cursor para a conexão

# Função que executa os comandos SQL no banco
def Executa_SQL(pSQL):
  try:
    cursor.execute(pSQL)
    db.commit()
  except:
    print("Erro: Não foi possível executar o SQL")
    db.rollback()

# Função que executa comandos SQL (Select)
def Busca_SQL(pSQL):
  try:
    cursor.execute(pSQL)
    results = cursor.fetchall()
    return results
  except:
    print("Erro: Não foi possível buscar os dados")
    return 0


# Cria uma variavel com o SQL e chama a função passando como parametro o SQL
vSQL = "CREATE TABLE IF NOT EXISTS USUARIO (NOME VARCHAR(50) NOT NULL, LOGIN VARCHAR(20), SENHA VARCHAR(20) )"
Executa_SQL(vSQL)

Executa_SQL("INSERT INTO USUARIO(NOME, LOGIN, SENHA) VALUES ('Kelvin S do Prado', 'Kelvin', 'Kelvin')")

# Chama a função Busca_SQL passando o comando SQL como parâmetro
vResultado = Busca_SQL("SELECT * FROM USUARIO WHERE LOGIN = 'Kelvin'")
for row in vResultado:
  # Lê cada coluna de cada linha retornada do SELECT, começando pela coluna 0
  vNome  = row[0]
  vLogin = row[1]
  vSenha = row[2]

 print("Nome : " + vNome)
 print("Sobrenome : " + vLogin)
 print("Senha : " + vSenha+"\n")

Executa_SQL("UPDATE USUARIO SET NOME = 'Outro'")

# Chama a função Busca_SQL passando o comando SQL como parâmetro
vResultado = Busca_SQL("SELECT * FROM USUARIO WHERE LOGIN = 'Kelvin'")
for row in vResultado:
  vNome  = row[0]
  vLogin = row[1]
  vSenha = row[2]

 print("Nome : " + vNome)
 print("Sobrenome : " + vLogin)
 print("Senha : " + vSenha)

Executa_SQL("DELETE FROM USUARIO WHERE LOGIN = 'Kelvin'")

# Fecha a conexão com o banco de dados
db.close()

time.sleep(3)

Atenção: Antes de tudo lembre-se de instalar o pacote MySQL para Python, que pode ser encontrado aqui.

Manipulando Arquivos de Texto em Python

Exemplo simples de manipulação de arquivos txt em Python:

# Lista Telefonica que grava e le de arquivo de texto

ARQUIVO = "lista_telefonica.txt" # Nome do arquivo de texto

def le_arquivo():                # Função que le o arquivo de texto
    try:                         # Tratamento de erro
        arq = open(ARQUIVO,"r+") # Abre o arquivo para leitura
        print( '\n'+arq.read() ) # Quebra linha e mostra o conteudo
        arq.close()              # Fecha o arquivo
    except IOError:              # Tratamento de erro
        print('\nArquivo não encontrado!')

def escreve_arquivo(texto):        # Função que le e escreve no arquivo
    try:                           # Tratamento de erro
        arq = open(ARQUIVO,"a+")   # Abre o arquivo para gravação no final do arquivo
        arq.writelines('\n'+texto) # Escreve no arquivo o parametro 'texto'
        arq.close()                # Fecha o arquivo
        print('\nRegistro gravado com sucesso')
    except IOError:                # Tratamento de erro
        print('\nErro ao abrir o arquivo!') # Mostra na tela uma mensagem de erro

while(True):                     # Loop infinito
    print('\nEscolha a opcao:')
    print('1-Cadastrar Telefone')
    print('2-Listar Telefones')
    print('0-Sair')
    vOpcao = int(input('Digite a sua opcao:')) # Entrada da opcao pelo teclado

    if vOpcao == 1:                           # Se a opcao for 1
        nome = input('\nDigite o nome:')      # Entrada do nome pelo teclado
        telefone = input('Digite o telefone:')# Entrada do telefone pelo teclado
        nome = (nome+' - '+telefone)          # Recebe o nome + o telefone
        escreve_arquivo(str(nome))            # Chama a função que grava em arquivo
    elif vOpcao == 2:             # Se a opcao for 2
        le_arquivo()              # Chama a função que le o arquivo
    elif vOpcao == 0:             # Se a opcao for 0
        break                     # Quebra o laço infinito

É isso ae, abraço…