Skip to content

ThiagoPinto87/aprendendo_python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 

Repository files navigation

✔️ FINALIZADO ✔️

Aprendendo Python

Estou iniciando os estudos em programação. Já hávia iniciado o curso sobre HTML e CSS (mesmo sabendo que são linguagens de marcação) pois eu estava querendo ter como próximo passo aprender Java Script. Porém, ao pesquisar sobre a linguagem de programação, um colega de trabalho comentou comigo sobre o Python e fui buscar informações e foi onde eu decidi que ele me ajudaria bastante nos objetivos de minha carreira profissional conforme exposto na bio. Este curso estou fazendo através do site: https://www.cursoemvideo.com/.

Diário de Aprendizagem


Mês 06/2022

03/06/2022
  • Aprendi como subir finalmente do PyCharm para o GitHub, eu havia feito sem querer inicialmente, mas agora entendi como funciona a ferramenta.
  • Aprendi a estilizar um pouco melhor o GitHub para ficar mais amigável aos parceiros que quiserem colaborar comigo. (Sejam todos bem vindos)
04/06/2022
  • Por não ter conseguido resolver o exercício 86 e 87 tão satisfatóriamente quanto eu gostaria, eu decidi reassistir às aulas 17 e 18 do curso em vídeo. (Assisti também alguns exercícios pois dentro dos exercícios às vezes o professor insere informações importantes.)
  • Entendi que meu erro no exercício 86 foi de não deixar preparada a variável "matriz_numeros" já com os números zerados, devendo serem só substituídos. Pois por mais que o professor guanabara tivesse dito, eu tentei (teimosamente) inserir as informações com o método .append(), visto que eu não havia preenchido a variável com "0".
  • Foi importante também que por falta de praticar a manipulação de string's eu havia esquecido como deixar um resultado da forma como eu quero como por exemplo o resultado ser em 5 caractéres e centralizado, usando o comando :^5.
08/06/2022
  • No final de semana do dia 04/06, fiquei bastante ruim com uma gripe muito forte. Até suspeitei de COVID, mas graças a Deus o resultado foi negativo para a doença mas vamos lá, sem chorumelas!
  • Na atualização de hoje é que fui cair na real que a variável matriz_numeros[l][c] onde [l][c] trata-se dos respectivos índices dos valores da variável. Depois que entendi isso ficou mais fácil, mesmo assim, precisei assistir o vídeo da resolução do exercício mais uma vez para consertar alguns erros. Identifiquei também que cada vez que faço comentários sobre cada passo, consigo absorver melhor o conhecimento do que estou fazendo.
  • Estou também apendendo e mexer no aplicativo notion do site <notion.so>, muito bacana. Dá pra fazer muita coisa nele!
18/06/2022
  • Fiquei bastante dia sem estudar e isso me deixou muito triste comigo mesmo, me mantenho empenhado em aprender, porém, a desculpa dessa vez foi a visita de meu pai que chegou de viagem e como vejo ele poucas vezes no ano, dei prioridade a ele.
  • Hoje finalizei os exercícios 088 e 089. Fiquei bravo comigo mesmo pois percebi que fiz o exercício 088 mais copiando do que de fato aprendendo, sorte a minha que me exijo bastante comentando cada string o que me ajuda a absorver as informações.
  • No Exercício 088: Apesar de copiar, pode reparar que fiz ao meu modo o que deu um toque de originalidade. Eu havia me esquecido do detalhe em fazer a cópia da lista que usa o serguinte termo [:]. Isso é muito importante na manipulação das listas. Esse termo quer dizer cópia e se assemelha bastante à manipulação de strings onde ao ter uma string qualquer com uma informação, podemos colocar que queremos do índice 3 até o índice 5 [3:5] ou do índice 4 até o final da string [4:].
  • No Exercício 089: Pode observar que fiz ao meu modo, onde gostei mais da minha solução à solução do prof. Guanabara, pois pude praticar mais a manipulação das listas e, mesmo que na lista composta dele tenha uma lista a mais, eu conseguiria inseri-la com facilidade. Só não fiz por não me parecer lógico criá-la (sei que se trata de exercício, mas achei que dessa forma pratiquei mais).
  • Gostei também de relembrar a manipulação das strings, visto que tenho quase "toc" por ver tabelas desorganizadas.
print(f'{i:<4}{a[0]:<15}{a[3]:>4.1f}')
20/06/2022
  • Hoje consegui somente assistir a aula 19 do curso de Python do curso em vídeo, fiz diversas anotações das quais vou compartilhar com vocês aqui embaixo.
Dicionário
  • Os dicionários são descritos em {}.

  • Para adicionar novas chaves (keys) à lista com dicionários, não é necessário usar o append(), basta declarar o novo elemento como no exemplo:

In[]
dados = {'nome': 'Thiago', 'idade': 35}
dados['sexo'] = 'M'
print(dados)

Out[]
{'nome': 'Thiago', 'idade': 35, 'sexo': 'M'}
  • Para remover os dados, podemos usar o parâmetro del().
In[]
dados = {'nome': 'Thiago', 'idade': 35, 'sexo': 'M'}
dados del ['idade']

print(dados)

Out[]
{'nome': 'Thiago', 'sexo': 'M'}
  • Outra forma de se fazer um dicionário é:
filme = {'título = Stars Wars
         'ano' = 1977
         'diretor' = 'Geroge Lucas'}

O elementos como ‘título’, ‘ano’ e ‘diretor’, são conhecidos no python como chaves (Key’s)

  • É importante identificarmos as diferenças entre: Values, Keys e Items. Conforme demonstrações baixo:

    • Values, são as infomações de dentro das keys
    • As Keys são semelhantes aos índices em uma lista.
    • Os Items são todas as informações da lista como Keys e Values. São muito bem utilizadas nas estruturas de repetições.
  • Nas estruturas de repetições, podemos misturar as 3 formas de estruturas (tuplas, listas e dicionários) podendo ser criado criado uma lista de locadoras (por exemplo) e cada índice dessa lista possuir um dicionário com Keys informando o título, o ano e o diretor.

Ou seja um print() nessa estrutura seria da seguinte maneira:

locadora = [{'titulo': 'Star Wars', 'ano': 1977, 'diretor': 'George Lucas'}, {{'titulo': 'Avangers', 'ano': 2012, 'diretor': 'Joss Whedon'}

In[]
print(locadora[0]['ano'])
print(locadora[1]['titulo'])

Out[]
1977
Avangers
  • No caso de criar cópias de dicionários ou inserir um dicionário dentro de uma lista, temos que fazer da seguinte maneira:
In[]

estado = dict()  # Cria o dicionário "estado".
brasil = list()  # Cria uma lista "brasil".

for c in range(3):  # Laço de repetição para receber inputs
    estado['uf'] = str(input('Unidade Federativa: '))  # Captura informação para inserir dentro do dicionário "estado" na key 'uf'.
    estado['sigla'] = str(input('Sigla do estado: '))  # Captura informação para inserir dentro do dicionario " estado na key 'sigla'.
    brasil.append(estado.copy())  # INSERE UMA CÓPIA DO ESTADO DENTRO DA LISTA BRASIL. ANTES QUANDO INSERIAMOS UMA LISTA DENTRO DA OUTRA USÁVAMOS O FATIAMENTO DE STRING [:].
    
for e in brasil:  # Cria laço de repetição para ler dentro da lista brasil.
    for u, s in e.items():  # Cria laço de repetição para ler dentro dos dicionários que estão dentro da lista brasil (utilizo o "e" e não o estado, pois ele está subordinado (identado) ao "for" acima.)
        print(f'O campo {u} tem valor {s}')  # Imprime os resultados dos dicionários em f'string.


Terminal[]

Unidade Federativa: "MATO GROSSO"
Sigla do estado: "MT"
Unidade Federativa: "SÃO PAULO"
Sigla do estado: "SP"
Unidade Federativa: "ACRE"
Sigla do estado: "AC"

Out[]

O campo uf tem valor MATO GROSSO
O campo sigla tem valor MT
O campo uf tem valor SÃO PAULO
O campo sigla tem valor SP
O campo uf tem valor ACRE
O campo sigla tem valor AC

Como podemos observar no caso de listas usávamos o fatiamento de string que demosntra o total da string [:]. Para dicionários usa o métido próprio chamado copy().

  • Aprendi também a realçar blocos de código em markdown, para ficar mais amigável o entendimento com vocês. Muito legal.
25/06/2022
  • Hoje somente criei os exercícios, nem tentei executá-los pois tive um dia bastante corrido e gostaria de ao menos ter deixado isso pronto hoje. Sei que foi bastante rapido, porém, me comprometo no próximo commit ter um progresso melhor.
26/06/2022
  • Na resolução dos exercícios de hoje, fiz com facilidade o exercício 090, porém o 091 tive dificuldades pois além do professor ensinar um novo import, eu estava tentando criar dicionários com nome e jogo para depois inserir no dicionário, como não consegui, tentei fazer como na explicação da aula 19 e fazer como lista, porém, sem sucesso. Mas pude perceber que não é o caminho totalmente errado, pois no import do operator, ele tranforma o dicionário em lista, pois inicialmente o prof. Guanabara até chegou de orientar a colocar o "ranking" como dicionário e o operator transformou o dicionário em lista. Com isso, me despertou a curiosidade de fazer como eu estava imaginando, bater um pouco a cabeça e tentar concluir o exercício como fiz inicialmente e depois usar o método sort() na lista de cada jogada.
28/06/2022
  • Hoje senti muita facilidade em ambos os exercícios:
    • Exercício 092:
    • Notei que o prof. Guanabara, utilizou um import diferente do que vinha utilizando como aconteceu nos exercícios 032 e 039 (não li sobre o import do datetime que ele utilizou dessa vez);
    • Notei também que fiz codei diferente dele, conforme abaixo.
Prof_Guanabara[]
trabalhador = dict()
trabalhador['nome'] = str(input('Nome: '))
...

Thiago[]
trabalhador = {'nome': str(input('Nome: ')).strip().upper(),
               'idade': date.today().year - int(input('Ano de nascimento: ')),
               'ctps': int(input('Nº CTPS (0 se não tem): '))}
  • Exercício 093:
    • Fizemos um pouco diferentes, porém dessa vez, gostei mais da minha solução, visto que tive a atenção de enumerar para o usuário preencher no relatório a informação da primeira partida mostrando o número 1 e o prof. fez mostrando o índice da lista (deu mólim professor. rsrsrs. Abçs).
    • Outro detalhe que gostei mais também, foi que no último print, pude treinar utilizando a toda a parte do fatiamento mesclando key com chave. Foi muito legal.

Mês 07/2022

02/07/2022
  • Solucionei o exercício 094. Foi muito divertido resolver ele, apesar de quebrar um pouco a cabeça. A primeira parte que foi de escrever o programa em si, foi até facil, fazendo as validações e tudo mais.

  • Na hora de imprirmir os resultados foi que quebrei um pouco mais a cabeça, foi bom que aprendi sozinho uma forma diferente da que o prof. Guanabara ensina e gostei de fazê-lo dessa forma, por isso até permaneci desse jeito.

13/07/2022
  • Assisti a aula 20 do mundo 3 do curso em vídeo, muito bom aprendi sobre funções sem parâmetros, com parâmetros e com listas.

  • Compartilhando o aprendizado...

    • Para criar uma função basta chamar o método def(), simples assim e assim criar diversas rotinas que o programa irá te ajudar fazer.
  • Função sem Parâmetros: Para chamar uma função sem parâmetros, basta chamar o método def(), descrever o nome da função, colocar os () e abaixo e aninhado (identado), programar a função a ser criada. Ex:

IN[]

def lin():
print('-' * 30)
# O Python pede duas linhas após as funções


lin()
print('  THIAGO PINTO É BOM ')
lin()

OUT[]
------------------------------
  THIAGO PINTO É BOM 
------------------------------
  • Função com Parâmetros: Para chamar uma função com parâmetros, basta chamar o método def, descrever o nome da função, colocar os () onde dentro dele estará o nome do parâmetro a ser colocado na função ex: (txt) e abaixo e aninhado (identado), programar a função a ser criada. Ex:
IN[]


def título(txt):
    print('-' * 30)
    print(txt)
    print('-' * 30)


título('   THIAGO É MUITO BOM!    ')

OUT[]
------------------------------
   THIAGO É MUITO BOM!    
------------------------------
  • outros exemplos de parâmetros são:
IN[]


def soma(a, b):
    s = a + b
    print(s)


# Programa Principal
soma(4, 5)
soma(8, 9)
soma(2, 1)
soma(b=3, a=18)  # Pode-se inclusive indicar qual é cada parâmetro, inclusive sem seguir a ordem de parâmetros criada na função.

"""# soma(4)"""  # Essa função dará erro, pois a função criada, pede dois parâmetros "(a, b) e foi colocado somente 1 "4".


OUT[]

9
17
3
21
IN[]

def soma(a, b):
    print(f'A = {a} e B = {b}')
    s = a + b
    print(f'A soma de A + B é: {s}')
    print(s)


# Programa Principal
soma(b=4, a=5)

OUT[]
A = 5 e B = 4
A soma de A + B é: 9
9
  • Podemos também empacotar funções (coisa que várias linguagens não fazem) onde a única diferença da forma anterior é somente colocar um "*" antes do nome do parâmetro como nos exemplos abaixo.
IN[]

def contador(* núm):
    print(núm)


contador(5, 6, 9)
contador(3, 2, 1)
contador(9, 8, 5, 1, 3, 8, 7)

OUT[]

(5, 6, 9)
(3, 2, 1)
(9, 8, 5, 1, 3, 8, 7)
IN[]

def contador(* núm):
    for valor in núm:
        print(f'{valor} | ', end='')
    print('FIM!')


contador(5, 6, 9)
contador(3, 2, 1)
contador(9, 8, 5, 1, 3, 8, 7)

OUT[]
5 | 6 | 9 | FIM!
3 | 2 | 1 | FIM!
9 | 8 | 5 | 1 | 3 | 8 | 7 | FIM!
IN[]
def contador(* núm):
    tam = len(núm)
    print(f'Recebi os valores {núm} eles tem o tamanho de {tam} números.')


contador(5, 6, 9)
contador(3, 2, 1, 0)
contador(9, 8, 5, 1, 3, 8, 7)

OUT[]
Recebi os valores (5, 6, 9) eles tem o tamanho de 3 números.
Recebi os valores (3, 2, 1, 0) eles tem o tamanho de 4 números.
Recebi os valores (9, 8, 5, 1, 3, 8, 7) eles tem o tamanho de 7 números.
  • Função com listas: Essas funções vão ser bastante úteis, visto que nas formas anteriores, os resultados das funções saem como tuplas. Porém da forma abaixo, elas saem como lista o que pode ser interessante para criar diversas funções bem específicas. veja alguns exemplos.
IN[]
def dobra(lst):
    pos = 0
    while pos < len(lst):
        lst[pos] *= 2
        pos += 1


valores = [6, 3, 9, 1, 0, 2]
dobra(valores)
print(valores)

OUT[]
[12, 6, 18, 2, 0, 4]
IN[]

def soma(* valores):
    s = 0
    for num in valores:
        s += num
    print(f'Somando os valores{valores}, temos {s}.')


soma(5, 2)
soma(2, 9, 4)


OUT[]

Somando os valores(5, 2), temos 7.
Somando os valores(2, 9, 4), temos 15.
  • Aproveitei o embalo e já fiz o exercício 096 que foi bastante intuitivo, pois agora tenho que me forçar a pensar na forma de criação das funções e seuas interações.
15/07/2022
  • Na resolução do exercício 97, fiz um pouco diferente do prof. Guanabara, mas a forma dele foi mais inteligente.
  • No exercício 98, comecei até bem, porém, não tive os insights para terminar o exercício sozinho. Tive que olhar a solução do professor. Apesar de serem soluções que já aprendi, vejo que tenho que buscar a pensar mais como fatiar cada processo que o programa tem que fazer e observar mais qual string deve vir primeiro e suas corretas indentações. Mas no geral, sei que tive a idéia correta. Só não consegui implementar.
23 e 25/07/2022
  • Após alguns dias sem estudar e já sofrendo abstinência, no dia 23/07 decidi fazer o exercício 99 sem relembrar a aula 20, pois queria trabalhar um pouco minha memória. Como não consegui compreender a montagem inicial da solução do exercício, tive dificuldades e decidi no dia 23 mesmo ver a resposta e fazer junto com o professor. Pode observar que tentei, pois partes do script que fiz está diferente do professor pois reaproveitei o que eu já havia produzido.
  • No dia 25, decidi recriar o exercício (99b) para tentar fazer sem olhar buscando fazer do meu jeito. Como comecei tarde, acabei não criando a funcionalidade sleep pois identifiquei que na versão que estou utilizando do pyhton (2022.1.3) ainda persiste a inconsistencia na biblioteca dentro da função conforme dito pelo professor. Como já tem quase um ano do vídeo criado, começo a me perguntar... Será que é uma inconsistencia mesmo?

Mês 08/2022

09/08/2022
  • Retornei aos estudos novamente já resolvendo o exercício 100. Porém para resolvê-lo precisei relembrar a aula 20 e daí foi fácil, foi só jogar as funções na tela e correr pro abraço.
  • Aproveitei já assisti a aula 21 que ficou bem cumprida e vou tentar resumir a aula aqui amanhã no meu horário de almoço.
  • Já criei também os exercícios 101 a 106 para começar a fazer também nessa semana.
22/08/2022
  • Sim... Estou devendo o resumo da aula 21, mas vou repassar para vocês assim que possível, pois não quero fazer somente colando aqui no corpo do README, quero fazer com todas as imagens e detalhes que vocês merecem.
  • Resolvi as aulas 101 a 103 hoje aproveitando mais um momento de enfermidade que tive (já aproveitei e tomei uma benzetacil pra resolver de vez isso. Caso não saiba o que é, veja um vídeo do Thiago Ventura no youtube, é bem engraçado o jeito dele falar da experiência que ele teve ao tomá-la também). CHEEEGAAAA de enrolação, bora pras observações.
    • Ex101 - Consegui fazê-lo com tranquilidade porém eu havia me esquecido de como utilizar a função date após a importação da biblioteca datetime, depois que relembrei assistindo a parte do vídeo onde demonstrava, pausei, e daí executei o exercício e vi que havia dado tudo certo. Sabia no fundo que esse era o único erro.
    • ex102 - Resolvi sozinho, Um desafio que tive, foi entender que o show vem como padrão True depois de fazer alguns testes, entendi que tem que começar com False e daí beleza. O único problema é que me faltou criatividade ao final em descrever na formula finalizando o total da fatoração com o símbolo de "=". Mas a formula estava OK também. Muito legal.
    • ex103 - Tive duas situações, primeiro que barrei na questão do número de gols não aceitar o 0, portanto, depois de quebrar um pouco a cabeça, decidi olhar a forma de resolver o exercício e aí comprendi e uma coisa me chamou a atenção, vi que o professor Guanabara não chamou a função ficha() dele. Aliás, corrijo aqui o que eu estava escrevendo, vi sim que ele chamou a função ficha() quando estava validando a variável n. A outra situação é que eu não consegui fazer com que o parâmetro "desconhecido" no meu parâmetro nome_jogador() ficasse como opicional já com a descrição "". OBS: Será que estou ficando preguiçoso demais ao estudar olhando diretamente o resultado no vídeo do respectivo exercício? Acho que eu deveria "googlar" mais ao invés de buscar o resultado no exercício. Puxando na memória aqui... Eu fazia isso com mais afinco no início, agora eu faço sim, porém com menos perseverança.
26/08/2022
  • Resolvi os exercícios 104 a 106 aproveitando uma folga no serviço.
    • Ex104 - Consegui resolver, porém assistindo a resposta do exercício. O Conceito em si, eu consegui fazer mas não dava a resposta de forma satisfatória, por isso decidi assistir o vídeo.
    • Ex105 - Eu estava tentando fazer o exercício construindo as formulas e com isso, tive dificuldades em concluir o exercício. Para verificar onde estava errando, eu busquei assistir o vídeo da resposta e pude verificar que o professor estava fazendo de forma bem mais simples. Parei de assistir o vídeo ainda no início (quano identifiquei a proposta do professor) e concluí daí pra frente. Foi satisfatório também apesar de ter assistido a resposta.
    • Ex106 - Consegui chegar ao resultado final, porém, quanto a colocar as perfumarias, foi bom relembrar (quero criar aqui um repositório somente com informações e dicas de como usar as cores com o código ANSI para que no futuro eu possa usar quando necessário e deixar colaborativo com quem nos acompanha.
27 e 28/08/2022
  • Assiti a aula 22, a qual já vou compartilhar aqui com vocês e resolução do exercício 107.

    MODULARIZAÇÃO

    Trata-se de dividir o programa em módulos de forma a possibilitar sua melhor compreensão em leitura, bem como também sua manutenção, dividindo-o em várias partes (vários módulos).

    Um exemplo simbólico disso é quando precisamos criar um programa como o abaixo.

    def fatorial(n):
        f = 1
        for c in range(1, n+1):
            f *= c
        return f
    
    
    def dobro(n):
        return n * 2
    
    
    def triplo(n):
        return n * 3
    
    
    num = int(input("Digite um valor: "))
    fat = fatorial(num)
    print(f'O fatorial de {num} é {fat}.')
    print(f'O dobro de {num} é {dobro(num)}.')
    print(f'O triplo de {num} é {triplo(num)}.')

    Ocorre que o programa fica um pouco grande e para melhor dividi-lo, foi decidido que teremos que separar as funções em outro módulo.

    Com isso, basta criar um novo arquivo com extensão *.py, nomear o arquivo como por exemplo “uteis.py”, colocar as funções nela e no arquivo do programa principal, importar as funções usando o método import.

    Com isso as funções também deverão ser renomeadas conforme abaixo.

    • Arquivo programa principal
    import uteis
    
    num = int(input("Digite um valor: "))
    fat = uteis.fatorial(num)
    print(f'O fatorial de {num} é {fat}.')
    print(f'O dobro de {num} é {uteis.dobro(num)}.')
    print(f'O triplo de {num} é {uteis.triplo(num)}.')
    • Arquivo “uteis.py”
    def fatorial(n):
        f = 1
        for c in range(1, n+1):
            f *= c
        return f
    
    
    def dobro(n):
        return n * 2
    
    
    def triplo(n):
        return n * 3
    • É importante também ressaltar que podemos usar o método from [nome do módulo] import [nome da função] para que se possa importar somente as funções necessárias e não custar memória de processamento de todo o módulo como somente na função import

    PACOTES

    Os pacotes nada mais são que pastas para que armazenam modulações de forma a organizá-las como por exemplo, dividi-las por assunto conforme imagem abaixo.

    image

    Com isso, podemos organiza-los melhor:

    image

    E para os pacotes, em sua maioria, teremos que ter os arquivos "init.py" em cada um deles conforme demonstrado abaixo.

    image

  • Ex107 - Criei as pastas conforme recomendado pelo professor Guanabara (Por isso, excluí o arquivo anterior denominado (ex.107.py). image

    Resolvi o exercício com facilidade, criei até mais funções para praticar. Contudo, eu havia criado cada função já com a função return com a formula, direto e objetivo. Mas, como o professor orientou a criar a variável res (já visualizando soluções futuras) já fiz o devido ajuste conforme orientado.

Mês 09/2022

03/09/2022
  • Ex 108 a 112 - Resolvi os exercícios praticamente tudo em uma pancada, pois como o conteúdo não foi dificil, na verdade foi bem exemplificativo, tive somente que ir acompanhando com as aulas pois como um era sequencia do outro e como o professor Guanabara recomendou no exercício 107 (resolvido no dia 28/08/22) que uma das funções serviriam para as demais, acabei fazendo juntamente com a resolução, de forma que assim que entendi a idéia, resolvi o exercício e já deixei pronto de forma somente a fazer alguns ajustes finos conforme o professor nos repassou. Quero ver se amanhã eu já assisto a aula 23 e já faço o resumo para nós.
05/09/2022
  • Ex 113 a 115 - Resolvi os exercícios, porém estou muito empolgado com o exercício 115. Este exercício, tenho certeza que vou praticá-lo várias vezes, buscando idéias diferentes para poder compreender bem todos os conteúdos aplicados. Vou até listar algumas idéias: Criar agenda telefônica, Cadastro de produtos, Controle de contratos e Controle de processos.
11/09/2022
  • 115 - Resolvi todo o exercício, fazendo algumas melhorias. Para resolver, antes de começar a codar, assisti as aulas 115 a, b e c umas 2 vezes para resolver. Tive que fazer olhando quando tinha dúvidas que foram poucas (basicamente em detalhes mesmo) pois entendi a idéia. Levei bastante tempo para resolver mas achei todo o curso muito legal. Parabéns ao professor Gustavo Guanabara e toda a equipe do Curso em Vídeo. Muito obrigado por compartilhar o conhecimento de vocês que Deus os abençoe.

About

Aprendizagem do Python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published