sexta-feira, 29 de janeiro de 2021

Bloco de notas com Python3 Sqlite3 e Tkinter

 # -*- coding:utf-8 -*-
# 2021 01 25 https://www.pycursos.com/tkinter-sqlite3/
from tkinter import *
import tkinter.messagebox
import sqlite3
class Main:
    def __init__(self, master):
        self.frame = Frame(master)
        self.frame.pack()
        Label(self.frame,text="Digite sua nota: ").pack()
        self.nota = Entry(self.frame,width=35)
        self.nota.pack(fill=X,pady=5,padx=5)
        #self.separador = Frame(height=2,bd=3,relief=SUNKEN,width=100)
        #self.separador.pack()
        self.frame3 = Frame(master)
        self.frame3.pack()
        self.add = Button(self.frame3,text="Adicionar nota",command=self.adicionar)
        self.add.pack(side=LEFT)
        self.apagar = Button(self.frame3,text="Apagar nota", command=self.apagar)
        self.apagar.pack(side=LEFT)
        scrollbar = Scrollbar(master)
        scrollbar.pack(fill=Y,side=RIGHT)
        self.listbox = Listbox(master,width=50,height=20)
        self.listbox.pack(pady=5,padx=5)
        self.listbox.config(yscrollcommand=scrollbar.set)
        scrollbar.config(command=self.listbox.yview)
        
        #criar banco
        self.conectar = sqlite3.connect("notas.db")
        self.cursor = self.conectar.cursor()
        self.cursor.execute("CREATE TABLE IF NOT EXISTS notas(name TEXT)")
        self.conectar.commit()
        lista = self.cursor.execute("SELECT * FROM notas")
        for i in lista:
            self.listbox.insert(END,i)
    def adicionar(self):
        notax = self.nota.get()
        if notax == "":
            tkinter.messagebox.showwarning("Error","Insira o texto")
        else:
            self.cursor.execute("insert into notas values(?)",(notax,))
            self.conectar.commit()
            self.listbox.insert(END,notax)
            self.nota.delete(0,END)
    def apagar(self):
        notay = str(self.listbox.get(ACTIVE)) [2:-3]
        print(notay)
        self.cursor.execute("DELETE FROM notas WHERE name=?",(notay,))
        self.conectar.commit()
        self.listbox.delete(ANCHOR)
    def close():
        if tkinter.messagebox.askyesno("Fechar", "Encerrar?"):
            exit()
        else:
            pass
root = Tk()
root.geometry("300x400")
root.title("Notas")
root.protocol("WM_DELETE_WINDOW", Main.close)
Main(root)
root.mainloop()

Programa conta arquivos para Ubuntu

Ao copiar uma pasta muito grande com 5000 arquivos para backup deu erro!

Então fiz essa implementação.

Necessário python3 instalado, nas versões recentes já vem instalado por padrão, verifique: $ which python3

Caso retorne: " /usr/bin/python3" já esta instalado. Se não retorna nada instale com:

$ apt install python3

Crie os arquivos com os nomes e siga as instruções do arquivo .sh

-------------------------  nome do arquivo: contaArquivosEmDiretorios .sh

#!/bin/sh
# Mostra o diretório com mais arquivos no final
#Abra um terminal na mesma pasta e execute $ ./contaArquivosEmDiretorios.sh
#Salva um arquivo na Pasta Pessoal
cp contaArquivosEmDiretorios.py ~/contaArquivosEmDiretorios.py
cd ~
ls -Rl|egrep "^./|^-" >> contaArquivos.txt
python3 contaArquivosEmDiretorios.py
rm -r contaArquivos.txt
rm -r contaArquivosEmDiretorios.py

-------------------------

 

-------------------------   nome do arquivo: contaArquivosEmDiretorios.py

def contaArquivo():#inclui ocultos
    file = 'contaArquivos.txt'
    with open(file, 'r') as txt:
        text = txt.readlines()
        m, c, a, f, tf = 0, 0, '~\n', '', ''
        for i in text:
            if i[0] == '.':
                if m < c:
                    f = a
                    m = c
                #print(c,a)
                tf += str(c)
                tf += a
                a = i
                c = 0
               
            if i[0] == '-':
                c += 1
        print(tf,'------Direttorio com mais arquivos:\n', f, m,'\n')
    file = 'contaArquivosPy.txt'
    with open(file, 'w') as txt:
        txt.write(str(tf))
contaArquivo()

-------------------------

------------------------- nome do arquivo: contaArquivosEmDiretorios.py

def contaArquivo(): #versão 2 ordena as pastas :)

    file = 'contaArquivos.txt'
    with open(file, 'r') as txt:
        text = txt.readlines()
       
        m, c, a, f, tf, tf1 = 0, 0, '~\n', '', '', ''
        for i in text:
            if i[0] == '.':
                if m < c:
                    f = a
                    m = c
                #print(c,a)
                tf += str(c)
                tf += a
                a = i
                c = 0
            if i[0] == '-':
                c += 1
        tf += "----------Maior----------:\n     " + str(m) + f + "----------\n"
    #return tf
    
    r = input("Gravar? (s) : ")
    if r == "s":
        file = 'contaArquivosPy.txt'
        with open(file, 'w') as txt:
            txt.write(str(tf))
           
def ordena(m):# m = maior quantidade de arquivos na pasta, ate (999)testado.
    #print(text)
    file = 'contaArquivosPy.txt'
    with open(file, 'r') as txt:
        text = txt.readlines()
    print(text)
    i0, tf1, tf2, tf3, cont = 0, '', '', '',''
    while i0 <= m:
        for i in text:
            #print(i[0], i0, i)
            if i[:2] == str(i0)+".":
                #print("grava1:",i)
                tf1 += i
            if i[:3] == str(i0)[:2]+"." and i0 < 100:# 100[:2]+"."=10. ;)
                print(i[:3],str(i0)[:2]+".",i,end='')
                tf2 += i
            cont += str(i0)+","
            if i[:4] == str(i0)[:3]+".":
                tf3 += i
        i0 += 1
    cont = tf1 + tf2 + tf3
    print(cont)
    #return cont
    #print(tf1, "<---tf1 (1 digito.), e tf2 (2 diditos.)--->\n", tf2)
    #print("3 digitos: --->\n", tf3)
    
    r = input("Gravar? (s) : ")
    if r == "s":
        file = 'ordenadosPy.txt'
        with open(file, 'w') as txt:
            txt.write(str(cont))

contaArquivo()
m = 999
ordena(m)
 -------------------------

quarta-feira, 27 de janeiro de 2021

IndentationError: unindent does not match any outer indentation level

# transforma todos os 4 espaços em tab

#Colocar na mesma pasta


def tabTxt():
    file = input("Nome do arquivo de entrada: ")
    with open(file,"r") as txtr:
        txt = txtr.read()
    i, out = 0, ""
    while i < len(txt)-1:
        if txt[i] == " " and txt[i+1] == " " and txt[i+2] == " " and txt[i+3] == " ":
            print('!')
            out += ("\t")#"    "
            i+=4
        else:
            out += txt[i]
            i+=1
    file = input("Nome do arquivo de saida: ")
    with open(file,"w") as txtw:
        txtw.write(out)
tabTxt()

terça-feira, 26 de janeiro de 2021

selection sort

 ''' https://www.coursera.org/learn/ciencia-computacao-python-conceitos-2/programming/PAmc8/exercicios-adicionais-opcionais
Exercício 1: Gerando listas grandes: Escreva a função lista_grande(n), que recebe como parâmetro um número inteiro n e devolve uma lista contendo n números inteiros aleatórios.
Exercício 2: Ordenação com selection sort: Implemente a função ordena(lista), que recebe uma lista com números inteiros como parâmetro e devolve esta lista ordenada em ordem crescente. Utilize o algoritmo selection sort.
'''
import random
def lista_grande(n):
    l = []
    for i in range(n):
        l.append(int(random.random()*10))
    return l
def ordena(lista): # selection sort
    for i in range(len(lista)-1):
        p = i
        for j in range(i+1, len(lista)):
            print(i,j,len(lista))
            if lista[j] < lista[p]:
                p = j
        lista[i], lista[p] = lista[p], lista[i]
    return lista
def test():    
    print(lista_grande(20))
    l = [10, 90, 30, 40, 50, 70, 80, 20, 100, 60]
    print(ordena(l))
test()

segunda-feira, 25 de janeiro de 2021

Aula Pycursos - Aula Sqlite3 + Tkinter - Python3

# -*- coding:utf-8 -*-
# 2021 01 25 https://www.pycursos.com/tkinter-sqlite3/
from tkinter import *
import tkinter.messagebox
import sqlite3
class Main:
    def __init__(self, master):
        self.frame = Frame(master)
        self.frame.pack()
        Label(self.frame,text="Digite sua nota: ").pack()
        self.nota = Entry(self.frame,width=35)
        self.nota.pack(fill=X,pady=5,padx=5)
        #self.separador = Frame(height=2,bd=3,relief=SUNKEN,width=100)
        #self.separador.pack()
        self.frame3 = Frame(master)
        self.frame3.pack()
        self.add = Button(self.frame3,text="Adicionar nota",command=self.adicionar)
        self.add.pack(side=LEFT)
        self.apagar = Button(self.frame3,text="Apagar nota", command=self.apagar)
        self.apagar.pack(side=LEFT)
        scrollbar = Scrollbar(master)
        scrollbar.pack(fill=Y,side=RIGHT)
        self.listbox = Listbox(master,width=50,height=20)
        self.listbox.pack(pady=5,padx=5)
        self.listbox.config(yscrollcommand=scrollbar.set)
        scrollbar.config(command=self.listbox.yview)
       
        #criar banco
        self.conectar = sqlite3.connect("notas.db")
        self.cursor = self.conectar.cursor()
        self.cursor.execute("CREATE TABLE IF NOT EXISTS notas(name TEXT)")
        self.conectar.commit()
        lista = self.cursor.execute("SELECT * FROM notas")
        for i in lista:
            self.listbox.insert(END,i)
    def adicionar(self):
        notax = self.nota.get()
        if notax == "":
            tkinter.messagebox.showwarning("Error","Insira o texto")
        else:
            self.cursor.execute("insert into notas values(?)",(notax,))
            self.conectar.commit()
            self.listbox.insert(END,notax)
            self.nota.delete(0,END)
    def apagar(self):
        notay = str(self.listbox.get(ACTIVE)) [2:-3]
        print(notay)
        self.cursor.execute("DELETE FROM notas WHERE name=?",(notay,))
        self.conectar.commit()
        self.listbox.delete(ANCHOR)
    def close():
        if tkinter.messagebox.askyesno("Fechar", "Encerrar?"):
            exit()
        else:
            pass
root = Tk()
root.geometry("300x400")
root.title("Notas")
root.protocol("WM_DELETE_WINDOW", Main.close)
Main(root)
root.mainloop()

domingo, 24 de janeiro de 2021

Python3 Buscas

 ''' Exercício 1: Lista ordenada
Escreva a função ordenada(lista), que recebe uma lista com números inteiros como parâmetro e devolve o booleano True se a lista estiver ordenada e False se a lista não estiver ordenada.
Exercício 2: Busca sequencial
Implemente a função busca(lista, elemento), que busca um determinado elemento em uma lista e devolve o índice correspondente à posição do elemento encontrado. Utilize o algoritmo de busca sequencial. Nos casos em que o elemento buscado não existir na lista, a função deve devolver o booleano False.
Exemplo:
busca(['a', 'e', 'i'], 'e')
# deve devolver => 1
busca([12, 13, 14], 15)
# deve devolver => False '''

def ordenada(lista):
    for i in range(len(lista)-1):
        #print(lista[i],lista[i+1])
        if lista[i] > lista[i+1]:
            return False
    return True
l1 = [1,2,3,4,5,6]; l2 = [1,2,5,4,3,2]
print(l1, ordenada(l1), '\n', l2, ordenada(l2))

def busca(lista, elemento):
    for i in range(len(lista)):
        if elemento == lista[i]:
            return i
    return False
#print(busca(['a', 'e', 'i'], 'e')) # deve devolver => 1
#print(busca([12, 13, 14], 15)) # deve devolver => False
    

#-----------------------------


def busca_sequencial(seq, x):
    for i in range(len(seq)):
        print(i,len(seq))
        if seq[i] == x:
            print('!',i)
            return True # o return para a execução do for e while!
    return False

numeros = [55,33,0,900,-432,10,77,123,-432,11]
print(busca_sequencial(numeros, -432))

#------------------

def selecao_direta(lista):
    fim = len(lista)
    for i in range(fim-1):
        pos_menor = i
        for j in range(i+1,fim):
            if lista[j] < lista[pos_menor]:
                pos_menor = j
        lista[i],lista[pos_menor] = lista[pos_menor],lista[i]
    return lista

numeros = [55,33,0,900,-432,10,77,2,11]
letras = ["c","d","a","t","r","q","w","b","e","f","b"]
print(selecao_direta(numeros))
print(selecao_direta(letras))