Transcrições
1. Vídeo de introdução: Olá, sou Ardit, um
desenvolvedor e instrutor de Python com anos experiência no
ensino de programação
para mais
de 500.000 estudantes em todo o mundo Também sou fundador e
autor do pythonhow.com, hub Eu criei alguns
dos cursos on-line mais populares de
Python
e, nesta aula do Skillshare, guiarei você das habilidades iniciantes às
avançadas de Python curso começa com
os fundamentos,
portanto, nenhuma
experiência prévia é necessária. Abordaremos o Python do
zero e, à medida que
progredimos, aplicaremos o que aprendemos
criando dez aplicativos
do mundo real Você ganhará experiência prática com análise de dados usando o Pandas, trabalhando com conjuntos de dados essenciais com Python, como JSO, SQL,
CSV, e até mesmo desenvolvendo
aplicativos CSV, e até mesmo desenvolvendo com análise de dados usando o Pandas,
trabalhando com conjuntos de dados essenciais com
Python, como JSO, SQL,
CSV, e até mesmo desenvolvendo
aplicativos web e aplicativos de desktop. Você até
criará um aplicativo móvel usando a biblioteca Kev em Python Esses são
aplicativos do mundo
real com dados reais e muitos recursos Você ganhará experiência
prática real,
pronto para aplicar essas habilidades
em pronto para aplicar essas habilidades um emprego como
programador posteriormente Então, para quem é o curso? A aula é perfeita para iniciantes que desejam aprender
Python do zero, bem
como para alunos intermediários desejam criar
projetos práticos Portanto, não é necessária nenhuma
experiência de codificação preferencial, apenas um computador e
vontade A melhor maneira de aprender
programação é fazendo, então é exatamente nisso que
nos concentramos nesta aula. Cada projeto que você
construir reforçará suas habilidades e fornecerá
algo tangível para mostrar Então, se você está pronto
para aprender Python de
uma
forma prática e envolvente, vamos começar Te vejo
na primeira aula.
2. Apresentando os primeiros passos: Olá, bem-vindo a um novo vídeo, e este é um vídeo
introdutório
da seção de funções e
condicionais. Então, agora você está entrando em uma seção mais
avançada do Python. Funções e condicionais são alguns
conceitos básicos avançados do Python , e esses são blocos muito
fundamentais que você pode usar para tornar seus programas mais inteligentes e mais gerenciáveis Assim, você torna seus programas mais
inteligentes fazendo com que eles tomem decisões e que você pode implementar por meio de condicionais. Então, se seu programa recebe algumas entradas e
você quer pensar, você quer fazer seu
programa pensar se essa entrada está boa ou não, e você quer fazer
algo se essa entrada for verdadeira e outra coisa
se essa entrada for falsa Então você está tomando decisões em seu programa por meio de
um bloqueio condicional E então você tem funções
, por outro lado, funções são usadas para
agrupar blocos de código, ou
seja, blocos de código semelhantes. Isso ajuda você a organizar seu código. Portanto, uma função, por exemplo, poderia converter USD em euros. Portanto, essa função faz certas coisas
e as faz bem. Portanto, ele recebe USD como entrada e fornece
euros como saída. Então, dentro da função, você tem aquelas operações matemáticas
que fazem a conversão. Portanto, condições e funções
são duas coisas que você aprenderá nesta seção
por meio de exemplos, é claro. Então, nos vemos
no próximo vídeo.
3. Instalando o Python e o IDE: Oi Nesta palestra,
mostrarei como instalar Python e o IDE de código do
Visual Studio Agora, se você tem o
Python instalado e já tem um IDE, pode pular este vídeo Portanto, você também pode usar outros IDEs. O código do Visual Studio é
apenas minha preferência, e eu recomendo usar o código do
Visual Studio. Então, onde estão as instruções? Bem, se você preferir instruções
baseadas em texto, você pode baixar os PDFs
dos recursos da aula. Se você quiser instruções em vídeo,
os vídeos são mais longos. Então, se você tiver problemas
com uma versão em texto, talvez queira
baixar os vídeos depois. Mas as versões em texto
devem ser suficientes. E as instruções
são para usuários de Windows, Mac e Linux. Portanto, dependendo do seu sistema
operacional, talvez
você queira
optar por baixar os arquivos que são para
seu próprio sistema operacional. Então, obrigado, e falarei com
você na próxima palestra.
4. Instruções de instalação no Windows +: Olá, nesta parte,
mostrarei como instalar o Python no Windows e também o
código visual tudo no Windows Então, vamos começar
instalando o Python. Basta pesquisar Python no
Google e a primeira página deve ser o do Python, python.org Em python.org, acesse Downloads e clique Então, atualmente, a
versão atual é Python 3.10 0.3. No seu caso, talvez
seja o Python 3.11. Então, o que quer que você veja
lá, basta baixá-lo. Uma coisa: se você estiver no
Windows 7 ou anterior, acesse
este link para ver a lista de
downloads e baixar o
Python 3.8 ou anterior,
pois o 3.10 não
funcionará Windows 7 ou
na versão anterior do Windows Então, agora vou clicar
em Python 3.10 0.3. Este
arquivo executável será baixado, então você deve instalar esse executável. Essa janela
deve aparecer Agora, se você já tem uma
instalação do Python, este botão aqui dirá
atualizar em vez de Então, se for esse o
caso, basta atualizar. Se você não tiver nenhum
Python em seu sistema, pressione Instalar agora,
mas você também deve verificar
isso
no Python Portanto, verifique se isso está marcado e vá para Instalar
agora ou atualizar. Minha configuração foi bem-sucedida, então fecharei essa
janela, acessarei o botão de pesquisa
do Windows
e abrirei o prompt de comando. Portanto, pesquise o prompt de comando ou simplesmente o CMD e abra este aplicativo Agora, essa é uma interface de
linha de comando que
permite interagir com o sistema operacional
Windows. Então, agora vamos
garantir que o Python tenha sido
instalado Para isso, você deve digitar
P Y, espaço menos três. Pressione Enter e, se isso aparecer com
essas três setas, significa
que o Python Então, o que você está vendo agora é o shell interativo do Python, também conhecido como console do Python Então, aqui agora, você pode
digitar o código Python. Por exemplo, 3.4, pressione Enter e você obterá os resultados sete Isso é conhecido como uma
forma interativa de programação. Para sair disso, você pode pressionar
sair com parênteses, abrir e fechar o parêntese, pressionar Enter e voltar
para a linha de comando do Windows Agora, se fecharmos essa janela, perderemos o código
que escrevemos lá, então não salvamos o código. Foi simplesmente uma sessão
interativa você simplesmente digita em que você simplesmente digita alguns códigos para fins de
teste e não
quer salvar o código. Se você quiser salvar o código, precisará de um IDE. Então é isso que
vamos fazer a seguir. Vamos instalar um IDE. Então, vá até a
busca do código do Visual Studio no Google. Mas se você quiser
usar outro IDE,
por exemplo, o Pycharm,
sinta-se à vontade para usá-lo O código Python
que escreverei no código do Visual Studio
será o mesmo que
você escreverá
sozinho . IDE favorito. O IDE é só uma
questão de preferência. Então, vamos clicar nos primeiros resultados.
Código do Visual Studio. Não confunda o
código do Visual Studio com o Visual Studio. Esses são dois IDEs diferentes. Código do Visual Studio, baixe para Windows e aguarde o download do arquivo
executável Em seguida, você deseja clicar no
executável para instalá-lo. Então, basta revisar o processo
de instalação. Próximo, próximo. Em seguida, prefiro
verificar essas opções. Ele oferece a opção de
abrir arquivos Python no código
do
Visual Studio clicando com o botão direito mouse nos arquivos Python no Em seguida, clique em Avançar e instalar. Minha instalação foi bem-sucedida, então vou terminar isso e agora vou abrir o código do
Visual Studio. Então, vou apenas pesquisar o código do
Visual Studio
ou, se você fizer apenas o VSC, esse é o acrônimo usado para o código do
Visual Studio, normalmente Portanto, você deve abrir o código do
Visual Studio. Você tem algumas notas
de lançamento lá. Se você quiser
lê-los, fecharei isso e fecharei esta janela também. E esse é o código do
Visual Studio. A configuração do código do Python e do
Visual Studio foi
bem-sucedida no meu computador Tanto o Python quanto o
código do Visual psudio estão funcionando bem. Agora, no próximo vídeo, mostrarei como
usar os dois juntos,
então como usar o Python
dentro do código do Visual Studio Eu vou te contar no próximo vídeo.
5. Instruções de instalação no Mac +: Oi. Neste vídeo,
mostrarei como instalar o Python e o IDE de código do Visual
Studio no Mac Vamos começar
instalando o Python. Portanto, se você pesquisar
Python no Google, os primeiros resultados
devem direcioná-lo para a página oficial do Python E se você fizer o download e depois acessar este botão,
isso deverá baixar a versão
mais recente do Python No meu caso, isso é 3,10 0,3. No seu caso, pode ser ainda
mais novo, por exemplo, 3.11. Seja qual for a versão aqui, basta pressionar o botão e ele fará o download do pacote
de instalação. Em seguida, clique sobre o
arquivo para instalá-lo. Agora, se você tiver
outra versão do Python instalada
no seu computador, ainda
poderá instalar
essa versão mais As duas versões se comportarão como um software
independente separado, e você poderá usar as duas.
Eu vou te mostrar como fazer isso. Então pressione continuar,
continuar, continuar. Concordo. Instalar. Minha instalação do Python foi bem-sucedida Agora, para verificar se o
Python foi
realmente instalado com sucesso,
posso abrir o terminal Então, para isso, você deve
usar o spotlight
para pesquisar o terminal ou o Alfred Se você usa Alfred, abra
o programa do terminal
e, no terminal, digite Python 3.10 ou 0.11 se tiver
instalado o
Python 3.11 Então, dependendo do
que você tinha aqui, você quer digitar
essa versão. Assim mesmo, sem espaços. Então 3.10 no meu caso, pressione Enter e isso
deve aparecer. Então você vê essas
três setas aqui. Aqui você pode escrever
códigos, por exemplo, três mais quatro e
obter a saída sete. Então, isso é conhecido como shell interativo do
Python
ou console do Python É uma maneira rápida de escrever código. Você pode sair do shell, o shell do Python, para
voltar ao terminal Então, vamos lá. E agora
estamos no terminal. Se você quiser usar outra versão do Python
que você instalou,
você pode usar o Python 3.9, por exemplo, se você tiver o Python 3.9 instalado,
e isso deve abrir essa
outra versão do
Python, e isso deve abrir essa
outra versão outra versão do Python
que você instalou,
você pode usar o Python 3.9,
por exemplo, se você tiver o Python 3.9 instalado,
e isso deve abrir essa
outra versão do
Python, como você vê aqui. Novamente, você pode sair e
voltar para o terminal. Você pode fechar essa janela e agora o código também está perdido. Portanto, não salvamos o
código em nenhum arquivo. Podemos fazer isso usando um IDE, e é isso que
faremos a seguir. Vamos baixar e
instalar o código do Visual Studio. O código do Visual Studio é um IDE. Agora, o IDE é uma
questão de preferência. Então, se você tem um
ID favorito, por exemplo, estava usando o Pycharm antes, sinta-se à vontade para usar o Pycharm porque o código que eu escrevo nos
vídeos será o No meu caso, usarei o código do
Visual Studio. Então, basta pesquisar no
Google por isso, acessar os primeiros resultados e isso deve levar você
ao código do Visual Studio. Agora, não confunda o código do Visual
Studio com o Visual Studio. Esses são dois IDEs diferentes. O código do Visual Studio é
o que estamos usando. Então, pressione esse botão para baixar o código do
Visual Studio e
aguarde o download da instalação
. Então, isso baixou
um arquivo Zip para mim. O arquivo zip foi extraído e agora eu tenho esse
arquivo se eu clicar duas vezes nele e pressionar abrir Isso abrirá o código do
Visual Studio. Então esse é o código do Visual Studio. Observe que o aplicativo está atualmente na minha pasta de
downloads. Portanto, talvez você queira arrastar esse arquivo para a pasta de
aplicativos. Você pode fechar essa janela de código do Visual
Studio
e, normalmente, pode
abri-la usando o Spotlight ou, se estiver usando o Alfred,
poderá pesquisar o
Visual Studio Code
e vê-lo na minha pasta de
aplicativos,
agora visualsudio code e vê-lo na minha pasta de
aplicativos agora visualsudio Abra-o e pronto, novamente,
Visual Studio Code. No próximo vídeo,
mostrarei como
usar o Python dentro do código do
Visual Studio para que possamos criar programas em arquivos que possamos
salvar e Então eu vou falar com você
no próximo vídeo.
6. Instruções de instalação no Linux +: Veja como
instalar o Python e o
IDE de código do Visual Studio em computadores Linux. Você pode instalar o Python no
Linux usando o terminal. Então, pesquise o terminal
entre seus programas, abra o terminal e, primeiro, você deseja fazer uma atualização do aplicativo
psudo Digite a senha do seu Linux para sudo
e pressione enter Quando a atualização terminar, você
deverá instalar o
aplicativo sudo no Python three E isso deve instalar o
Python no seu computador. E a versão mais recente do
Python disponível foi instalada. É por isso que recebi esta mensagem
aqui que diz que o Python três já é a
versão de notícias, então está tudo bem Agora vamos instalar o IDE de código do
Visual Studio. Então, abra seu navegador, acesse o site oficial do
Visual Studio Code , que
é code.visualstudio.com Caso contrário, pesquise no Google
pelo Visual Studio Code. Mas não confunda o
código do Visual Studio com o Visual Studio. Visual Studio e o
Visual Studio code são dois IDEs diferentes, e o que estamos usando no curso é
o código do
Visual Studio. Então, no site, acesse o download profundo do arquivo. E espere até que o
arquivo seja baixado e clique duas vezes no arquivo. O código do Visual Studio também está disponível para ser instalado como
um pacote Snap, então essa seria uma
alternativa de instalá-lo Caso contrário, você pode
seguir minhas instruções. Digite suas senhas do Linux e aguarde a conclusão da
instalação. Depois que a instalação
estiver concluída, você pode
pesquisar o código do Visual Studio, então deve
aparecer o Visual Studio, que você pode abrir e
deve ter a seguinte aparência. Foi assim que se
instalou o código do Python e do
Visual Studio no Linux No próximo vídeo,
mostrarei como criar seu primeiro programa Python no código do
Visual Studio. Obrigada.
7. Criando e executando um programa em Python: Oi, bem vindo de volta. Neste vídeo. Mostrarei como
criar um programa em Python e como executá-lo
para que
você possa obter Obviamente, esse
programa será muito simples porque o
foco aqui é
mostrar o processo de criação e execução de
um programa Para criar um programa em Python, você precisa de duas coisas Um é Python e o outro
é um IDE ou editor de texto. Um IDE é apenas um editor de texto
avançado. Então, vou usar o código visual
cilia como IDE. Que é esse aqui, e então eu vou criar
um projeto aqui. Um projeto nada mais é do que criar um diretório
vazio. Então, primeiro, você deve
acessar seu sistema de arquivos, Windows Explorer ou MacFinder e verificar se você
tem uma pasta vazia O primeiro projeto é o nome
desse diretório vazio. No Windows Explorer e, em seguida, você deseja voltar
ao código do Visual Studio. Se você estiver em outro IDE, o processo é
basicamente o mesmo. Você vai para o arquivo e, em seguida,
vai para o OpenFolderO Make
it could be write just open.
Então clique nisso. Em seguida, você deseja navegar
até a pasta vazia, clicar
duas vezes nela e
selecionar a pasta. Um código do Visual Studio, o que ele fará é abrir essa pasta como o
diretório raiz do projeto. Você tem esse aviso aqui, não há problema em dizer que sim,
confio nos autores. Você pode ver agora
que o primeiro projeto, o nome de uma pasta também é o
nome do projeto. Então, o que vou fazer agora é escrever
um programa, um programa em Python. E isso consiste em criar um arquivo de texto onde você
escreve esse programa real. Para criar esse arquivo de texto, você pode acessar sua pasta
novamente e criá-la aqui, ou normalmente o que
fazemos é criar esse arquivo
de dentro do IDE. Então, se você clicar aqui,
escreva um nome para o arquivo, como M
underscore program Não é recomendável usar espaços nos nomes
dos arquivos. Portanto, sempre use
sublinhados em vez de espaço. E então, vamos experimentar o TXT
e ver se isso vai funcionar. A extensão real é dot PY, mas isso não é um requisito. Obviamente, usaremos o
ponto PY, sempre, sempre. Mas, por enquanto, vamos
mantê-lo em dot TXT para que você entenda um
conceito muito importante sobre Python Então eu pressiono Enter, e aqui vou
imprimir três mais quatro, e esse é o nosso programa. Portanto, esse programa simplesmente gera
a soma de três e quatro. Como posso executar esse programa
agora para obter os resultados? Bem, você vê este item do menu do
terminal aqui, pressiona e
vai para o novo terminal, e isso deve abrir um
novo terminal aqui. Então, é como a linha de
comando na qual você interage com seu computador. E aqui agora, podemos escrever Py menos três se
você estiver no Windows Se você estiver no Mac, você
deve escrever Python três. Então, eu estou no Windows aqui, então vou usar o
espaço Pi menos três, e então meu programa de sublinhado,
na verdade, eu posso usar a guia Se eu pressionar a guia, isso completará automaticamente
o nome do arquivo. Nesta parte não são necessários os pontos
e a barra invertida Você pode deixá-lo. Está tudo bem. Mas mesmo que você o remova
assim, ele ainda funcionará. Então, agora, se você pressionar Enter aqui, o que obtemos é que vamos
para a próxima linha. Talvez você estivesse esperando
a saída aparecer aqui. Não apareceu porque
o arquivo ainda está vazio. Não salvamos as alterações. Então, depois de escrever
essa linha de código, não
salvei nada. Então, o que você quer fazer
é acessar Salvar Arquivo ou Controles pressionar a tecla de
seta superior aqui para obter o
comando executado anteriormente e pressionar Enter. Então obtemos a saída sete. Então, como você pode ver,
um programa Python
nada mais é do que apenas
um arquivo de texto que você escreve e depois o executa usando
o comando Python Mas há uma
maneira melhor de executar programas em
Python,
pelo menos no código do Visual Studio E isso é
usando um botão Executar. Atualmente, não há nenhum botão
Executar aqui porque precisamos instalar
uma extensão Python Então, se você passar para isso,
ícone ouvir extensões. E aqui você deseja
pesquisar Python, pressione Enter. E esse primeiro resultado é a extensão
que queremos instalar. Então, pressione o botão Instalar. E isso instalará
a extensão Python. Mas o que é a
extensão Python? Bem, eu te disse que isso mostrará o
botão Executar em algum lugar aqui. Não foi mostrado porque meu arquivo não tem
uma extensão PY. Portanto, a extensão Python
procura por arquivos PY. Então, o que você quer fazer
é clicar com o botão direito aqui renomear para ponto PY E agora vemos esse botão. Também recebemos a mensagem de que
precisamos selecionar um interpretador
Python Então, para selecionar um intérprete de
Python, você pressiona
esse botão ou, se não
obteve a janela,
o que você quer fazer é ir até esse ícone aqui,
esse colchete e, em seguida
, selecionar E então você deseja selecionar o interpretador Python 3.10 0.3, que instalamos no Talvez no seu caso,
seja outra versão. Então, qualquer interpretador Python que
você esteja usando, selecione-o
e, em seguida, você estará pronto para executar esse programa
usando esse botão Então aperte esse botão. E essa é a saída sete aqui embaixo. Então, como você pode ver, há duas maneiras de executar seus programas em
Python Ou você usa o comando
Python como fizemos com PY menos três e depois mencionou
o nome do arquivo Ou você usa a maneira mais fácil, que é usando esse botão. Mas, ao costurar, para
poder usar esse botão, você precisa nomear seus arquivos
com o ponto PY no final E essa é, na verdade
, a melhor prática. Todos nomeiam
seus arquivos como ponto PY. É como uma convenção.
Não é um requisito, mas é uma convenção cardíaca. E, à medida que você vê, coisas
como extensões extensões
IDE também funcionarão melhor se você tiver seus
arquivos nomeados com ponto PY A outra vantagem de usar
esse botão é que, se
você tiver mais códigos,
como quatro mais nove, não precisará salvar o código. Basta
executá-lo e obterá os
resultados sete e 13. Então, a soma dessa linha e
a soma dessa linha também. Se você quiser criar
outro programa, o que você quer fazer é acessar Arquivo novamente,
abrir a pasta e
verificar se você tem uma pasta vazia ou apenas
criar uma imediatamente aqui. Então pasta, segundo projeto. Clique duas vezes para selecionar a pasta, e isso fechará a janela
atual do projeto atual e abrirá
o segundo projeto. Então, este aqui, novamente,
você cria um arquivo. Myprogram dot py dot PY sempre, selecione um intérprete usando esse colchete e vá Escolha sempre o mesmo
intérprete que você usou anteriormente, a menos que queira
selecionar outro intérprete Se você tiver muitos intérpretes
e escrever algum código, execute-o e deverá ver a saída aqui
na linha de comando Com isso, agradeço
por assistir a este vídeo e falarei com você
no próximo.
8. O que é Python, surpreendentemente?: Vamos supor que você esteja andando
na floresta amazônica. Na floresta, você conhece uma tribo
e a tribo tem um cozinheiro. Você quer dizer ao cozinheiro
que está com fome, então
precisa comer. O problema é que você não
sabe o idioma. Então, o que você quer, o que você
recebe é um intérprete. Então esse é o intérprete. Você fala inglês
com o intérprete, e o intérprete fala
Amazonis E o cozinheiro serve você. A refeição. O Python funciona É você novamente
e deseja
se comunicar com o
processador do seu computador. Por exemplo, você quer saber
a soma de três e quatro. O problema, novamente,
é que o processador fala uma linguagem muito difícil
chamada linguagem de máquina. E essa linguagem
é muito difícil para os humanos falarem ou escreverem. Então, o que obtemos é um
interpretador chamado C Python. Então, o que é C Python? C Python é o software que instalamos nos vídeos
anteriores Então, quando você baixa o Python de python.org e o instala, o
que você está instalando é É um intérprete. Esse intérprete obtém a linguagem
Python de você e traduz
essa linguagem para a linguagem de máquina e fala essa linguagem de
máquina Em troca, o processador usa a tela do computador para que a tela do laptop
exiba os resultados, por exemplo, sete, e
você vê sete. Então, como você pode ver, o Python é exatamente como o inglês.
É só um idioma. O software que você
instala e usa para executar o Python é
apenas um software e está escrito
em linguagem seal Acontece que está escrito
em linguagem de selo. É por isso que é chamado de C Python, embora a maioria das pessoas
se refira a ele apenas como Python Quando você diz,
você instalou o Python? Sim. Bem, você está falando em
instalar o C Python A linguagem Python
em si é apenas conhecimento. Ele é armazenado na documentação. Se você acessar
python.org e depois
acessar o menu de documentação, deverá ver a documentação
do Portanto, a documentação
do Python é equivalente a um dicionário,
um dicionário de inglês,
como o dicionário Oxford, onde o
idioma inglês No entanto, há uma diferença. No caso em que
falamos com o cozinheiro, usamos a linguagem falada. Para nos comunicarmos com o
intérprete aqui, usamos arquivos de texto Então, escrevemos o idioma
em um arquivo de texto e o intérprete
lê esse arquivo de texto Obviamente, atribuímos
a extensão dot PY a esses arquivos de texto, mas eles ainda são arquivos de texto. A extensão é diferente.
E essa é a ideia. Isso é o que Python é. Então, Python é a linguagem. E obrigado por
seguir esse exemplo, essa comparação, e falarei com
você no próximo vídeo.
9. Começando com o básico de Python: Olá, bem-vindo a um novo vídeo, e este é um vídeo
introdutório
da seção de funções e
condicionais. Então, agora você está entrando em uma seção mais
avançada do Python. Funções e condicionais são alguns
conceitos básicos avançados do Python , e esses são blocos muito
fundamentais que você pode usar para tornar seus programas mais inteligentes e mais gerenciáveis Assim, você torna seus programas mais
inteligentes fazendo com que eles tomem decisões e que você pode implementar por meio de condicionais. Então, se seu programa recebe algumas entradas e
você quer pensar, você quer fazer seu
programa pensar se essa entrada está boa ou não, e você quer fazer
algo se essa entrada for verdadeira e outra coisa
se essa entrada for falsa Então você está tomando decisões em seu programa por meio de
um bloqueio condicional E então você tem funções
, por outro lado, funções são usadas para
agrupar blocos de código, ou
seja, blocos de código semelhantes. Isso ajuda você a organizar seu código. Portanto, uma função, por exemplo, poderia converter USD em euros. Portanto, essa função faz certas coisas
e as faz bem. Portanto, ele recebe USD como entrada e fornece
euros como saída. Então, dentro da função, você tem aquelas operações matemáticas
que fazem a conversão. Portanto, condições e funções
são duas coisas que você aprenderá nesta seção
por meio de exemplos, é claro. Então, nos vemos
no próximo vídeo.
10. Variáveis: por que e como usar variáveis +: Oi, bem vindo de volta. Por favor, dê uma olhada neste programa aqui. Você vê algum problema
com este programa? Bem, o programa funciona bem. Se o executarmos, obteremos
sete como saída, que é a saída esperada. Então, três mais quatro
dá sete. Mas há um problema
com o programa, e o problema é que
não temos ideia do que significa três
e do que significa quatro. Então, como programadores, não
sabemos o que está acontecendo aqui, e isso faz com que esse
programa não seja legível Agora,
deixe-me mostrar como resolverei esse problema imediatamente
usando variáveis. Então, vou deletar isso
completamente e dizer que gasto é igual a três. Doado é igual a quatro. O valor total é igual a
gastar mais doar
e, em seguida, imprima o valor total Se eu executar este programa agora, obterei a mesma saída,
então são sete novamente. Mas desta vez, nós, como programadores, podemos
entender esse programa Então, podemos dar esse programa
a outras pessoas, alguns outros programadores, ou
podemos voltar a esse programa Mais tarde, ainda podemos
entender esse programa porque agora temos
nomes para os valores, e eles são chamados
de variáveis. Portanto, os valores gastos, doados e
totais são variáveis. A sintaxe é bem simples. Então, tudo o que você precisa fazer é escolher um nome em sua
mente para uma variável. Então eu escolhi ter gasto
como primeira variável. Então essa é a quantidade de dinheiro que eu gastei
comprando coisas, por exemplo, e essa
é a quantia que eu doei E então eu calculei
o valor total. Então, agora esse programa
faz mais sentido. E, claro, existem
outros exemplos, como itens iguais a dez e preço
igual a dois no total. O preço é igual aos
itens vezes o preço. Então agora há
esse asterisco aqui, que significa operador de
multiplicação. Imprima o preço total e
obtemos 20 como saída aqui. Então, novamente, temos uma
variável aqui, duas e três. Agora, existem algumas regras sobre a sintaxe
das variáveis A primeira regra é
que você não deve ter números na frente
de suas variáveis, mas você pode ter números no meio em algum lugar ou no final, mas não na frente delas. Você pode usar sublinhados, como eu fiz aqui, mas você não pode usar espaços Portanto, isso não funcionará em Python, o que significa que, se você tiver variáveis com
mais de uma palavra, deverá usar um
sublinhado É a melhor prática
usar um sublinhado. E, por fim, você pode ter
quantos espaços
quiser ao redor do operador de
atribuição. Então isso vai funcionar. Mas é recomendável, acordo com o guia oficial de estilo do
Python, ter um espaço nos dois lados do operador de
atribuição para tornar os códigos Os espaços servem apenas
para facilitar a leitura aqui. O mesmo vale para
esses operadores. É bom ter espaços
ao redor do operador. Para facilitar a leitura novamente. Então, agora nosso programa
faz mais sentido. Sabemos o que está acontecendo aqui. Entendemos o código, e esse é um dos
benefícios das variáveis. Também há um segundo
benefício. As variáveis servem como compartimentos
para transportar dados ou objetos. Então dez é um valor de dados, ou você também pode se
referir a ele como um objeto. Então dez é um objeto,
dois é um objeto e itens é o
nome desse objeto, ou você pode dizer a
variável desse objeto. Então, esses nomes, essas variáveis
são como baldes. Eles são usados para
carregar objetos. Por exemplo, digamos que
colocamos dez dentro
do balde de itens
e, em seguida, pegamos esse balde e multiplicamos esse balde
por um balde de preços, que tem dois dentro Então, em vez de escrever
dez aqui e dois, na verdade
trabalhamos em intervalos, em uma base variável. Há uma vantagem
nisso porque, por exemplo, digamos que decidimos alterar
o valor disso para três,
e isso significa que os itens agora
aqui também serão três. Então, três vezes dois,
vamos obter seis. É por isso que não queremos ter objetos com códigos rígidos, por exemplo Se fosse dez, executássemos isso, obteríamos a saída antiga 20. Então, espero que esteja claro. Sempre use variáveis, e isso conclui esta palestra
sobre Entrei em muitos
detalhes porque as variáveis são usadas em cada
programa que você escreve. Portanto, certifique-se de
entendê-los. Caso contrário, faça perguntas
nas perguntas e respostas e eu falarei com você
no próximo vídeo Obrigada.
11. Usando o shell interativo em Python: Olá, bem-vindo de volta
a uma nova palestra. Anteriormente,
escrevemos esse script e podemos executá-lo usando
esse botão triangular e obtemos seis como saída. Então, três vezes dois nos dá seis. Então, o que fizemos aqui foi escrever o script em um arquivo PY de pontos e depois enviar esse
script para o intérprete Então, enviamos todo o arquivo
PY de pontos para o intérprete. Mas há outra
maneira de executar o código Python. Isso é ter o
intérprete sob demanda. Deixe-me demonstrar
o que quero dizer com isso. Então você tem que ir ao
terminal para a linha de comando. É aqui que você executa os comandos do sistema
operacional. Então, eu estou no Windows, então posso executar o
espaço PY menos três Se você estiver no Mac ou Linux, precisará escrever o Python 3.10
ou o Python 3.9
, dependendo da versão do
Python que Vou usar o espaço Pi menos
três e pressionar Enter. Então, esse comando inicia
o interpretador Python. Agora, o intérprete, como
eu disse, está sob demanda, que significa que o
intérprete agora está esperando que o
código Python Portanto, pense nos métodos anteriores como contratar o intérprete
por contrato Então você envia ao intérprete
o script inteiro, e ele envia de
volta a saída Mas aqui, o intérprete
é um funcionário, digamos que ele esteja no local e
aguarde sua opinião Eles estão ouvindo você. Então, o que você faz é dizer que os itens são iguais a
três, por exemplo, você escreve código e seu apresentador
e o intérprete estão
ouvindo você e o intérprete estão
ouvindo Então, ele registra a
variável items na memória. E você pode continuar escrevendo código. O preço é igual a
dois, o preço total é igual aos itens vezes o preço. E se você imprimir o preço total, obterá a saída seis, que é a mesma
saída que essa. Agora você provavelmente está
se perguntando quando
usar uma forma e quando
usar a outra. Então, você deve codificar em um arquivo
Python ou deve
codificar no shell interativo do
Python Então, isso agora é conhecido como
um shell interativo. Então,
deixe-me responder a essa pergunta. Mas antes de responder, quero destacar as diferenças entre
as duas formas de codificação A maior diferença
é que o código você escreve no
shell interativo não é salvo. Então, se eu sair desse shell agora, esse código será perdido e não há como salvá-lo. E isso nos leva
ao outro ponto, que é que essa forma de codificação é apenas para código
descartável Então, se você quiser simplesmente
testar as coisas rapidamente, talvez queira fazer algumas operações matemáticas,
como adição,
multiplicação, etc E você não está interessado em criar um programa reutilizável, então esse
shell interativo está É mais rápido do que
ter que criar um arquivo PY e depois
escrever o código lá Então, acho que
respondi à pergunta. Você deve usar o arquivo dot PY sempre que quiser
criar programas reutilizáveis E você usa o shell
interativo do Python para frases rápidas Então, basta escrever uma linha, talvez outra aqui.
Então, operações matemáticas. Agora, eu quero apontar uma
diferença entre os dois. Agora, outra diferença que
você deve estar ciente é que, no shell
interativo do Python, você não precisa usar
uma função de impressão Você pode simplesmente dizer o preço total. E você obtém a saída. Não é necessário
imprimir o preço total. No entanto, em um arquivo PY de pontos, você precisa ser muito explícito Portanto, se eu remover a função de
impressão e executar este programa, não
obteremos nenhuma saída. Então, deixe-me executar
este programa agora, mas eu aviso que
receberemos um erro Então execute o programa, esse é o erro. Então,
o que aconteceu aqui? Esse código está bom, mas
o que está acontecendo é que o código do Visual Studio está executando esse comando do Windows
dentro do Python Shell, o Python Shell aceita apenas
o código Python , mas não Portanto, este é um
comando do Windows porque está iniciando, está tentando
iniciar o programa Python e está tentando executar
o arquivo dot PY do meu programa Então, o que você precisa fazer
é sair do shell sempre que quiser
executar um arquivo PY de pontos. Portanto, se você estiver em um shell Python
interativo e souber que está sempre que
vê essas três setas, saia com
parênteses e pressione Enter,
e isso parênteses e pressione Enter,
e o levará de volta ao shell do sistema operacional,
ao terminal, à Isso significa que agora você
pode executar seu programa. Então, deixe-me pressionar o botão
triangular, e não obtivemos nenhum erro. No entanto,
também não há saída, como você pode ver,
porque, como eu disse
anteriormente, não
estamos imprimindo
nada aqui. Então, o que o
intérprete faz é atribuir
apenas 32 itens variáveis Faz o mesmo com o preço. Ele calcula o preço total e aqui não faz nada Então, para obter a saída, precisamos dizer que imprima a variável run novamente
e você obtém seis. Se você quiser voltar ao shell
do Python novamente, escreva o comando Py menos
três, volte ao shell
e execute o código novamente aqui Então, vou voltar ao
shell e isso é sobre o shell interativo
do Python. Obrigado por seguir.
12. Usando o terminal: Antes de entrarmos na codificação, quero mostrar uma
dica de produtividade em relação ao IDE Agora, essa dica é sobre
o IDE visual sudo code, mas provavelmente também se aplicará
a outros IDEs É sobre o terminal, como
usar o terminal com
mais eficiência, e isso o ajudará codificação e também
na parte de aprendizado Então é isso que eu
quero te mostrar. Eu tenho meu terminal aberto aqui. Então, primeiro de tudo, o que eu quero
fazer é excluir todos os terminais usando esse ícone ou o ícone pode
estar em algum lugar aqui. Então, basta excluir tudo. Sim, o ícone nos mostra aqui agora, pressione esse ou outro até que o terminal desapareça E então você quer
mostrar o terminal novamente, e você pode fazer isso
pressionando este botão. Então, isso executará o código. Isso criará uma nova janela de
terminal. E então é bom ter um shell Python aberto
na lateral também Portanto, você tem a
linha de comando na qual executa o código, mas também o shell
interativo do Python onde você pode escrever linhas únicas
rápidas Então, para fazer isso, você
deve pressionar esse ícone. E isso dividirá
o terminal. Agora temos um
terminal aqui
à esquerda e um terminal
aqui à direita. Aqui à direita, o que
queremos fazer é executar o comando Python que
abre o shell interativo do
Python No Windows, isso é espaço
PY menos três, ou Macan Linux, que
seria Python 3.10
ou Python 3.11 ou Python Então, isso abrirá o Shell interativo do
Python. Agora temos a linha de
comando em que
executamos arquivos dot PI
e o Python Shell, onde você executa o código Isso ajudará no
seu aprendizado. Então, deixe-me
demonstrar rapidamente se isso
está funcionando bem ou não, para que eu possa me concentrar aqui. Não importa, e
eu pressiono esse botão, mas o código será
enviado para esse terminal. E esse terminal aqui
é independente disso. Então, novamente, se isso não
estiver funcionando, certifique-se de
excluir tudo novamente. Portanto, não há terminais. Então não
abra um terminal aqui. Então, em vez de fazer isso, deixe o terminal ser aberto
usando esse botão. Dessa forma, você garante
que esse terminal esteja conectado ao
processo em execução desse arquivo
e, em seguida, divide o terminal e tem esses
comandos para abrir o Python Outra dica antes de
fecharmos este vídeo
na linha de comando para
onde os comandos do Windows,
Mac ou Linux são enviados. Então, aqui, quando
executamos o arquivo dot PY, você pode limpar o terminal
usando CLC, escrever CLC Se você estiver no Windows, no Mac,
seria claro ou Linux também. CLC pressione Enter e isso
limpará o terminal. Portanto, isso funciona
na linha de comando, não no shell do Python Em relação à
janela dividida aqui ao lado, você pode ver quantas placas de
terminal você tem Então temos isso, que está
apontando para isso no lado, no lado esquerdo, e depois o
outro no lado direito. Além disso, tente não ter
mais de dois terminais aqui porque as coisas podem ficar confusas, porque se você
pressionar o ícone de adição, você terá um terceiro terminal que ficará escondido atrás desses dois e
as coisas ficarão confusas Certifique-se de sempre ter dois. Se você tiver mais,
exclua tudo e
inicie o processo
novamente em torno de PY, menos três
novamente e assim por diante Então, com isso, você está pronto para
programar nos próximos vídeos, e isso realmente o
ajudará com seu aprendizado. Então eu vou falar com você
no próximo vídeo.
13. Tipos simples: inteiros, strings e floats: Deixe-me demonstrar uma coisa para
você. Vou criar a variável X. Armazene dez nessa variável X, Y, armazene o texto dez
nessa variável
e, em seguida, crie
duas novas variáveis. Então, um é igual a dois. X mais X, e cerca de dois
é igual a dois, Y mais Y. E então imprima
um e alguns Salve o script,
não esqueça e execute-o. Essa é a saída. Então, temos 20 de X mais
X e 1010 de Y mais Y.
Qual é o meu ponto aqui Qual é o meu ponto Meu argumento é que
os computadores são lixo. Para que eles
entendam você,
você precisa ser muito claro,
muito explícito no
que vai dizer por meio de sua linguagem, por meio de Python, neste caso Não basta dizer dez, você tem que declarar
o que é esse dez É um número ou é um texto? É por isso que em alguns idiomas, na maioria dos idiomas, temos declarações de tipo Então, em outras linguagens, você diria
algo como int, que significa inteiro Então você está dizendo que
isso é um número inteiro. Dez é um número inteiro, e
isso seria como STR Y sem Então, isso diz ao
Python que isso é na verdade um texto e
deve ser tratado como tal Então, no Python, quando você
aplica um operador de adição, o
Python concatenará esse texto, então ele adicionará dez após dez
e criará e Agora, não é assim
que funciona em Python. Em Python, em vez de fazer
essas declarações explícitas, temos a
declaração implícita, que é Então, quando o número está sem
aspas, é um número inteiro. Bem, também pode ser um carro alegórico, mas deixe-me falar sobre
isso em alguns segundos. E se for com aspas duplas, significa que é um texto. Se for igual a 10,1,
por exemplo, isso
significa que é um flutuador E se você não acredita em mim, pode usar a
função de tipo como essa X, digitar Y e digitar. A função type
imprimirá o tipo de cada valor. Portanto, é uma classe int, uma classe STR, que
significa strings Tudo entre aspas é
uma string e flutua, que significa float Com strings, você também pode
usar aspas simples como essas. Salve-o e você obterá
a mesma saída. Então, se sua intenção
é processar texto, você precisa usar aspas. Se sua intenção é
processar números, para poder fazer cálculos
matemáticos com eles, você precisa usá-los sem
fazer isso ou aquilo.
14. Tipos de dados de lista: Agora você conhece três tipos
de dados em Python, conhece números inteiros, conhece strings e
conhece floats . Esses são tipos de dados simples. Também temos o que é conhecido
como tipos de dados compostos,
tipos que são feitos
de E a lista é a
mais popular. Então, em uma lista, você pode realmente
armazenar vários objetos. Suponhamos que você seja
professor e queira calcular a
nota média de seus alunos. Então você usa Python para isso
e precisa de uma estrutura de dados para armazenar esses valores em Python Você precisa do tipo adequado em Python para representar as
notas de seus alunos, e a lista seria uma boa escolha Vamos criar uma lista.
Armazene-o em uma variável, como de costume. Notas dos alunos. Igual aos colchetes abertos,
feche os colchetes. Então, os objetos agora
entrarão nessa sintaxe. Então você viu que com números inteiros, você usaria um número
sem aspas para dizer ao Python
que isso é uma string, você usa aspas duplas E com listas, você usa
esses colchetes, então cada tipo tem
sua própria sintaxe Então, digamos 9,1
e 8,8 e 7,5. Essas são as notas
do seu aluno.
15. Usando intervalos: Neste vídeo, você se familiarizará
mais com as listas. Então, anteriormente, armazenávamos três
tipos de dados flutuantes em uma lista, mas você pode armazenar
qualquer tipo de objeto, não apenas flutuantes, para que possamos
armazenar um número inteiro, como nove Você pode armazenar uma
string, como hello. Você pode até mesmo armazenar
listas dentro de uma lista. Basta escrever um
colchete e
inserir os itens dessa lista Ainda assim, essa lista tem
três itens: esse número inteiro, essa string e essa lista E, claro, você
pode imprimir essa lista apontando para a variável
associada à lista. E essa é a
saída que obtemos. Não, operações matemáticas com listas, o que a lista suporta? Bem, não muito, na verdade. Você pode fazer multiplicações
com um número inteiro, como dois ou três, e vamos ver o que
vai acontecer Vou
imprimir essa expressão diretamente aqui, em vez de
colocá-la em uma variável. Portanto, o que você preferir, você
pode criar uma nova variável, armazená-la na variável
e, em seguida, colocar a variável
na função de impressão ou colocar essa expressão
diretamente
na função de impressão. Ambos funcionarão. Então,
se você executar isso, você obterá essa saída. Então essa é a mesma lista
repetida três vezes. Se isso for positivo, isso não
é suportado porque o
Python não sabe o que fazer com uma
lista e um número inteiro Portanto, ele fornece um
tipo de erro: o erro só pode concatenar listas em listas Assim, ele pode concatenar
listas em listas. Então, se você fizer as notas dos alunos, mais as notas dos alunos,
isso também funcionará. Então, execute isso e você
obterá esses resultados. A lista foi repetida duas vezes, o
que equivale
a isso vezes duas. Então, novamente, vamos obter os mesmos resultados aqui e ali. Por fim, também há uma maneira de gerar automaticamente listas de números inteiros que têm
uma determinada ordem Digamos que você
queira ter uma lista de 1 a 10, um, dois, três, quatro,
cinco, seis, sete, oito, nove, dez.
Como podemos fazer isso? Bem, é claro, uma maneira
é escrever isso, mas existe uma maneira melhor, que é usar um intervalo. O intervalo é outro tipo de objeto, assim como temos
listas, números inteiros Também temos gamas. Então, varie zero e 11, e vamos calcular as notas dos alunos para ver o que essa variável
tem agora como valor. Então, execute isso, e este
é um objeto de alcance. Então, ainda não há muito para ver. Mas se você converter isso
em uma lista e executar novamente. Por fim, obteremos
essa saída. Então zero, um, dois, três, quatro, cinco, seis, sete,
oito, nove, dez. Então, agora as notas dos alunos
são um objeto de lista. E essa palavra-chave da lista
aqui é uma classe. Portanto, ele representa
o último tipo de dados e é usado aqui para
converter um tipo de dados de intervalo em um tipo de dados ist porque um intervalo é exibido
simplesmente assim. Portanto, não é
muito benéfico
ver que a saída não é tão clara, então a convertemos em
um tipo mínimo de dados. E então, como isso funciona? Bem, começa de zero
até o número
antes desse número, que é dez, então de zero a dez. É por isso que temos de zero a dez. Claro, você pode
ter qualquer coisa aqui. Então, de um a oito, eu teria que escrever
nove para obter de um a oito. Então, pelo menos um a oito. Você também pode ter
outro argumento aqui, dois, e vamos ver o
que isso muda na saída. Então, obtemos esses resultados. Esses dois são o passo. Então, um, três, cinco, sete, significa que você
começa do um e depois avança
por um passo de dois. Então, um mais dois, você tem
três, três mais dois, você tem
cinco, cinco mais dois, você tem sete, sete
mais dois, você tem nove, mas nove não está
incluído no intervalo. O intervalo é de até oito, então a lista
terminará em sete. Obviamente, você pode
ter qualquer etapa aqui, como três, e
obterá resultados diferentes. Então, essas foram algumas informações mais
avançadas sobre listas e também intervalos. Com isso, agradeço e falarei com você no
próximo vídeo. Te vejo.
16. Quais são os atributos dos tipos de dados: Ok, então você conhece
strings, você sabe, floats, você sabe,
números inteiros, você sabe, listas Ok, então você sabe, tipos de dados. Mas como você pode realmente
fazer algo em Python? O que você pode fazer com
esses tipos de dados? Bem, para responder sua
pergunta, você deve dar uma olhada no comando dos cervos Bem, deixe-me agora começar a usar o shell do Python um pouco
mais para fazer as coisas mais Então, vou
dividir isso em dois. Isso é para executar
o arquivo Python , isso é para o Python Shell
interativo Então, o que podemos fazer com a lista? Você pode
descobrir isso fazendo Deer. Dear é uma função em
Python que fornece todas as coisas que você pode
fazer com um tipo específico Então, com uma lista, neste caso, todos esses aqui são
atributos da lista. Você pode fazer o mesmo
para verificar int. Você pode fazer o mesmo para
verificar float, dear float,
dear STR, por exemplo, vamos parar no SDR
antes de irmos Com strings, você pode, por exemplo,
transformá-las em maiúsculas usando Para descobrir o que o upper faz, você deve usar help STR, que é o tipo que
tem o atributo upper Agora, os atributos
são tudo isso e podem ser
métodos ou propriedades. Você não sabe disso até
verificar com ajuda. Portanto, essa é uma documentação de ajuda
para o método superior. É um método, como
você pode ver aqui, Q para sair e
voltar para o shell. Então, vamos
usar isso. Olá, aquela parte superior. Você usa um método com
colchetes redondos com parênteses. E isso retornará
a versão em maiúscula de hello. Se
usarmos Title em vez disso, isso
colocará em maiúscula apenas a
primeira letra Claro, você pode
usar variáveis. E você obtém a mesma saída. Agora, o que temos para listas? Que tal calcular a
média das notas dos alunos? Vamos fazer isso no próximo vídeo.
17. Como descobrir qual código você precisa: Para calcular a média
dessas notas, queremos ver se um tipo de lista tem algum
tipo de média ou
método de média que nos permita obter a média
de seus valores. Para isso, vamos
verificar com a lista de veados. Lista é o nome que
representa todas as listas. Então isso é um tipo, e essa é uma instância
desse tipo de lista
. Querida lista. E vamos dar uma olhada
rápida aqui. Você tem um
método médio ou médio? Eu acho que não. Portanto, não há nenhum método
do tipo lista
que nos permita calcular a
média dos valores da lista. No entanto, isso não
significa que não exista um método malvado em
Python para fazer isso O homem ou a média não é um método, mas pode ser uma função. Você se lembra da função de impressão? Então, imprima assim, você verá que a impressão não precisa da notação de pontos para ser usada Por exemplo,
o método upper
precisava de uma notação de ponto
porque upper é um método
anexado ao tipo o método upper
precisava de uma notação de ponto
porque upper é um método
anexado halo E imprimir é uma função. É uma função independente
que funciona com vários tipos,
não apenas strings, não
apenas números inteiros, Você pode imprimir
qualquer coisa com impressão. É por isso que não está vinculado
a um tipo específico. Então, onde vemos
uma lista completa de funções que podemos usar? Você pode fazer isso usando
novamente, sublinhado, sublinhado, incorporado,
sublinhado,
sublinhado e parênteses E essa é uma lista completa do que você pode usar nas funções
integradas. Então, deixe-me ver uma
função média ou uma função média. Não, não está lá, mas há uma função de soma. Então, o que podemos fazer é,
digamos minha soma, não usar sum como nome de
variável porque você pode ver que a soma é
uma palavra-chave reservada. Então, some as notas dos alunos, isso nos dará a soma
desses três números. Em seguida, queira contar quantos
itens existem nessa lista. Então, temos
alguma coisa aí? Talvez não. Bem, eu sei que não
há método de contagem. Mas temos essa lente, o que significa que você pode
verificar o que isso significa. Portanto, retorne o número de
itens em um contêiner. Portanto, uma lista também é chamada
de contêiner. Digamos que comprimento, igual ao
comprimento, notas dos alunos. Então, finalmente,
podemos obter a média, que é minha soma dividida pelo
comprimento, e imprimir a média, exceto que é o valor médio
de todos esses três números.
18. Tipos de dados do dicionário: Então você é professor
e
queria calcular as
notas médias de seus alunos, e fizemos
isso usando esse algoritmo aqui e essa estrutura de dados
para armazenar as notas. O problema aqui é que você não
sabe qual nota é de quem. Portanto, embora uma lista seja uma boa estrutura de dados para
armazenar uma matriz de itens, ela não é boa o suficiente quando esses itens têm algum tipo de
identidade associada a eles. Nesse caso, você quer
usar um dicionário. Digamos que a
nota do aluno seja de colchetes. Essa é uma sintaxe
para um dicionário. E então você usa os nomes
dos seus alunos. Digamos que Mary
tenha uma coluna, crie algum espaço ou nenhum espaço, crie algum espaço ou nenhum espaço, onde você preferir,
mas é bom ter um espaço lá para
torná-la mais legível E então você escreve
a nota de Mary. Digamos que S 8,8 e a coluna John, 7,5 A diferença entre o
dicionário e a lista são os colchetes, colchetes
diferentes E então isso é considerado
um item em um dicionário. Isso é considerado
um item em uma lista. Portanto, os itens em um dicionário
são feitos de chaves. Isso é uma chave e
valores, isso é um valor. Uma lista seria mais
apropriada se tivéssemos que armazenar, por exemplo, uma matriz
de valores de temperatura. Digamos que, segunda-feira, tenha essas temperaturas de
segunda-feira. E por último, como calculamos a média quando
temos um dicionário Como esses são pares
de chaves e valores, você não pode simplesmente fazer
a soma dessa forma. Você precisa especificar a soma
do que deseja obter. Então, notas dos alunos. E se você verificar o
dicionário deles para ver o dicionário, verá que os dicionários
têm esses valores, o que é um método Dite os valores, é um método e fornece uma visão
dos valores do dicionário. Em palavras simples, ele fornece
os valores de um dicionário. Então, se você pegar esse dicionário, fila para sair aqui, cole aqui e veja a nota do
aluno nesses valores Isso fornecerá
esse tipo de dados. Ainda é um tipo de dados. Parece uma lista. Não é exatamente uma lista, mas se comporta como uma lista
com esses três valores É um tipo de ditado de valores. Esse método produz esse tipo. Portanto, você pode
adicionar isso aí, não
esqueça os parênteses, esqueça de salvar e não esqueça de executar para obter saída e esse é
o valor médio dos valores do
dicionário Para obter as chaves do
dicionário, basta fazer as teclas. E você obtém esse
tipo de chave morta com as chaves
do dicionário como itens dessa matriz
de chaves mortas.
19. O que torna um programador um programador: O que faz de um programador
um programador? Em outras palavras, quais são
as coisas que você precisa saber para poder programar qualquer aplicativo de
computador? Isso é o que eu vou
te contar neste vídeo. Há três coisas que você
precisa saber para programar, para codificar qualquer programa. E a primeira é que você
precisa conhecer a sintaxe. Por exemplo, você precisa saber que, para poder
imprimir algumas saídas, você precisa usar impressões
seguidas de parênteses
e, em seguida, colocar a entrada Então, isso faz parte de uma sintaxe, saber se você quer
usar parênteses ou vírgulas saber se você quer
usar parênteses ou vírgulas, etc.
Essa é
a primeira coisa. A próxima coisa é,
digamos que estamos construindo um programa que calcula a média
a partir de
uma série de valores Em seguida, você quer saber qual
tipo de dados você precisa usar para
representar esses dados. Então, por exemplo, se
você tem dados como nomes de alunos seguidos
pela nota de cada aluno, então você sabe que precisa
usar um dicionário porque um dicionário é feito
de chaves e valores. Portanto, a estrutura de dados correta
aqui seria um dicionário. Mas se você tivesse apenas valores
sem nomes de alunos
, pensaria em uma
lista porque uma lista é apenas uma série de itens,
valores sem chaves. Então, estruturas de dados, você
precisa conhecer estruturas de dados e conhecer a
sintaxe. Essas são duas coisas. A terceira coisa é
que você precisa conhecer o algoritmo que precisa usar para
produzir a saída esperada. Portanto, nesse caso, você deve conhecer os métodos que pode usar ou deve saber como criar esses métodos, caso
eles não existam. Então, em nosso exemplo, você precisa saber como
criar esse método médio. Então, essas são as três
coisas que você precisa saber sobre como criar qualquer programa. Esses são os fundamentos. Então, espero que isso deixe mais claro o caminho para a programação, e falarei com vocês
nos próximos vídeos. Te vejo.
20. Tipos de dados tuple: Essa aqui é uma lista. E agora é uma queda. Portanto, uma tupla é como uma lista, mas com parênteses, Se você imprimi-lo, é claro, obterá a mesma
representação que está aqui. Então 14, cinco, 145. No entanto, os colchetes
e os parênteses
não são a única diferença
entre listas Na verdade, isso é apenas uma
diferença na sintaxe. A verdadeira
diferença é que tuplas, como esta
aqui, são imutáveis e
listas como essa são mutáveis listas como essa Isso significa que nas temperaturas da última
segunda-feira, duas, você pode adicionar mais itens
à lista usando,
por exemplo, os métodos de acréscimo. Portanto, se você verificar
as temperaturas de segunda-feira até agora, obterá uma lista alterada Essa mutabilidade o torna muito
dinâmico. Você verá mais tarde como, quando fazemos essas operações em lote
e cada operação, adicionamos itens à lista
à medida que
geramos esses itens, esses valores com
algumas funções. Mas esse não é o
caso das tuplas. Se você tentar acrescentar em uma tupla,
receberá um erro
porque uma tupla, na verdade,
não tem nenhum método receberá um erro
porque uma tupla de acréscimo Da mesma forma, ele não tem um método de remoção
como a lista. Então, quatro não está mais lá. As tuplas, no entanto,
têm a vantagem serem um pouco
mais rápidas que as listas, mas você deve
pensar no que usar Portanto, seja para usar
List ou topples, você deve pensar se a matriz você está criando será alterada durante o curso
do programa ou não Então, por enquanto, não vou me
aprofundar nas quedas e é. Mas quando criarmos esses dez aplicativos
durante o curso, você entenderá as principais
diferenças entre os dois vendo como eles
funcionam em programas reais.
21. Como usar tipos de dados no mundo real +: Ok, agora você conhece alguns dos tipos de dados mais importantes do
Python,
mas aposto que
ainda está confuso sobre como
esses tipos mas aposto que
ainda está confuso sobre como de dados são
usados no mundo Normalmente, por exemplo,
normalmente você teria esses dados armazenados em um arquivo
do Excel ou em um arquivo de texto. Então, faz
sentido escrevê-los em um dicionário Python
como esse ou aquele Lista? Não, isso não acontece. Na verdade, existem maneiras de carregar
automaticamente os dados da
sua planilha do Excel para o
Python para Você ainda precisa
criar o dicionário, mas não precisa
digitar os dados
no arquivo python dot py como eu fiz aqui Você vai usar algumas extensões
específicas do Python para carregar os dados Então você processa esse
dicionário como fizemos aqui. Mas não se preocupe. abordar isso e
teremos alguns aplicativos interessantes posteriormente no curso,
na parte de aplicativos. Fique ligado.
22. Operações com tipos de dados: Suponhamos que você tenha uma lista de itens de
mercearia,
tenha criado um programa
e tenha armazenado
esses itens em uma lista
Python com colchetes itens de
mercearia,
tenha criado um programa e tenha armazenado
esses itens em lista
Python Agora, em seu programa, os usuários podem remover e
adicionar itens dessa lista. Portanto, remover e adicionar são dois exemplos de operações
que você pode realizar com listas. Portanto, lista é um tipo de dados e pode ter operações
diferentes, que você pode aplicar a um tipo de dados
de lista E então você pode
ter
algum texto em outro lugar do seu programa, e você pode capitalizar
esse texto. Portanto capitalização é
outra operação que você pode aplicar a
um tipo de dados de fluxo Portanto, cada tipo de dados tem
suas próprias operações. Então é isso que você
aprenderá nesta seção. Então, esse foi um vídeo
introdutório. Te vejo no próximo vídeo.
23. Mensagens de erro no Python 3.10: Nesta palestra,
veremos o que há de
novo no Python
3.10 em relação Python 3.10 foi lançado
em outubro de 2021 e tem algumas
melhorias em relação às mensagens de
erro e também
outras melhorias, que falarei nos
próximos vídeos nas próximas Então, as mensagens de erro, vamos supor que você tenha uma expressão com
muita ênfase. Por exemplo, você deseja ter
uma string e
substituir o
caractere I um caractere Y
nessa string. Mas se você perder um parêntese e executar o programa com o
Python 3.9, o
que obtemos é o erro de sintaxe, é claro,
porque a
sintaxe não está correta, mas o erro não
é tão explicativo mas Portanto, obtemos o erro de sintaxe
inesperado EOF durante a análise. Então você ainda não
sabe o que fez de errado em seu código. Então você tem que voltar
e lê-lo novamente. Agora, compare isso com
o Python 3.10. Então, se eu mudar para o Python 3.10 como interpretador e executar
o código com o 3.10,
desta vez, o erro de
sintaxe fica mais claro Então, erro de sintaxe,
esse parêntese
aqui nunca foi fechado.
Então aquele. Agora sabemos que se
começarmos um parêntese aqui, devemos fechá-lo no final Esse é o primeiro parêntese,
o parêntese aberto. Eu deveria ter um
parêntese final. Então, vamos adicionar isso. Outro exemplo
seria se você tivesse uma lista,
por exemplo, um, dois,
e depois perdesse uma vírgula, e se você executasse com o Python 3.10
, você terá novamente essa sintaxe de erro de
sintaxe Talvez você tenha esquecido a vírgula e ela nos aponta com essas setas no lugar
onde a vírgula Se você comparar isso com 3,9, não
é a melhor explicação Diz sintaxe inválida, mas não
diz explicitamente que falta uma
vírgula aqui Ainda assim, o Python 3.10 é melhor para detectar vírgulas
ausentes. A ideia é que, no Python 3.10, você receba o erro de sintaxe e
também obtenha algumas informações extras Vamos fechar este vídeo
com um terceiro exemplo. Se você cometer um erro de digitação, digamos que você escreveu
ritmo real em vez de substituir, e vamos colocar a vírgula aqui Então está tudo certo, exceto esse erro de digitação aqui. Portanto, se você executar isso
com 3.9 primeiro, receberá esse erro de atributo Diz que o objeto string não
tem nenhum atributo de substituição. Então, hoje não tem o atributo
realmente um ritmo real. E você começa a
se perguntar se replace
não é um atributo
de strings Então compare isso com 3.10, 3.10 run, e este é
o erro de atributo Então, você quis dizer que substituir isso é um erro muito explícito e nos ajuda a
corrigir esse erro rapidamente Então é isso que eu queria comparar o Python três com o Python 3.10 para enfatizar
as diferenças em relação aos erros Agora, no curso,
teremos uma seção dedicada sobre erros, sobre como lidar com eles, como lê-los,
como não se frustrar com erros de programação porque todo programador comete erros, então você precisa saber
como corrigi-los Por enquanto, você
ainda é iniciante, então continue assistindo
vídeos e você se
tornará cada vez melhor em Python. Nos vemos
no próximo vídeo.
24. Fazendo mais operações com listas: Deixe-me agora familiarizá-lo um
pouco mais com tipos
de dados da lista, mostrando
o que você pode fazer Você já sabe que
o que você pode fazer com eles, você pode verificar com a Lista de DR. Você pode ignorar os
atributos que começam com sublinhado duplo e
terminam com sublinhado duplo Eles são basicamente atributos
usados internamente pelo Python e raramente você precisará
usá-los Então, por enquanto, você pode
simplesmente ignorá-los e se concentrar no que você realmente
vai usar, que é esse conjunto aqui. Deixe-me abrir outro shell do Python e vou
aplicar algumas operações
a essa lista neste shell do
Python Assim, podemos ver quais
métodos podemos aplicar
nesta janela e podemos aplicar os métodos nesta
outra aqui. E eu não quero que você
mostre apenas o que isso
faz no escuro. Eu quero te mostrar como você
pode descobrir por si mesmo
o que essas coisas fazem. Portanto, sempre use a função de ajuda. Lista, vamos tentar
o método de acréscimo. Agora, vou
digitar a variável, mas você não
precisa digitar tudo. Depois de começar a
digitar o nome da variável, você pode usar tab, que completará automaticamente
o nome da variável. Em seguida, use uma
notação de ponto e acrescente e, em seguida, dois
parênteses seguida, dois
parênteses Então, dentro dos parênteses, você verá que isso
requer dois argumentos Na verdade, é
só uma discussão. É só o objeto em si. Self está se referindo
à própria lista, e objeto é, na verdade o que você deseja
acrescentar a essa Digamos que você queira
acrescentar 8.1 dessa forma Se você verificar
as temperaturas de segunda-feira, verá que agora
tem mais um item Então essa é a sintaxe de append. Você sempre ignora
self porque self é automaticamente passado como
argumento para esse método, e self é basicamente
a própria lista. Vamos tentar outro método. Estou aqui para sair, lista de ajuda, claro. Como isso funciona? Bem, nesse caso, você vê que não há
argumentos. Então,
as temperaturas de segunda-feira são claras desse jeito. E o que ele faz, ele apenas limpa a lista, exclui todos os seus itens Deixe-me também tentar
indexar e deixar a lista para você experimentar. índice obtém, na verdade,
um valor, um início e uma parada, e retorna
o índice do valor. Então, o que é um índice? Vamos experimentar o índice de pontos, o valor com valor que Python significa é um dos
valores da lista Agora, como temos uma
lista sem valores, vou recriar a
lista novamente dessa forma Agora, esta é a nossa lista. Deixe-me tentar indexar com parênteses e o
valor, digamos 8,8 Isso retornará um.
Por quê? Isso porque as listas têm sincronização de índice
em segundo plano. Mesmo que não o vejamos, cada um desses itens está
associado a um índice. O primeiro tem
um índice de zero. O segundo tem um índice de um e o último tem
um índice de dois. Nesse caso, e assim por diante. Agora, nesse caso específico, também
vemos esse argumento e esse outro
para o método de índice. No entanto, se você não
quiser passar esses valores, basta passar um valor. Então, como eu fiz aqui, 8,8, isso significa que 8,88
será o valor, isso por padrão, o início
será igual a zero e o fim será
igual a esse Então, o que é começar e parar? Bem, quando é zero,
como é por padrão, isso significa que você está
procurando 8.8, começando pelo primeiro
item da lista Então, o intérprete iniciará a pesquisa a partir do primeiro item, ou
seja, o item com índice zero e nós procuraremos 8,8, e ele o encontrará, e
dirá que tem
um índice de um No entanto, se você quiser dizer
ao Python que comece do item com o
Índice dois, digamos que comece uma pesquisa a
partir daqui e avance para a direita de 7.5, que por acaso não
tem mais De qualquer forma, você está pulando essa parte
da lista. Nesse caso. O intérprete
dirá que 8.8 não
está na lista
com esse início Você também tem a parada, que é, por padrão,
esse grande número. Então, se você quiser
limitar a pesquisa no índice à direita,
você também pode fazer isso. Mas, por padrão, você
manterá esse zero. E isso lhe dirá que
o número tem esse índice. Saiba mais sobre indexação
no próximo vídeo.
25. Como acessar os itens da lista: Anteriormente, mostrei que para obter o
índice de um item, você pode usar o método index. Agora, como podemos fazer o contrário? Como podemos obter um
item com base em seu índice? Bem, para isso, precisamos
examinar mais uma vez a lista de atributos
que podemos aplicar à lista. E eu sei que podemos usar o método underscore get item underscore
underscore underscore Ok, eu sei que eu
lhe disse anteriormente que esses métodos raramente você
vai usar e, na verdade, não
precisamos desse método para
o que vou fazer agora, mas deixe-me explicar por que, daqui a
pouco, você entenderá. Esse é um grande segredo do Python. Então, deixe-me usar get item com sublinhados
duplos
e, claro, é um método, então ele precisa desse
parêntese redondo Então, vamos tentar
obter o item com índice um. O que seria isso? Bem, 8,8. Agora, o
segredo é que você não precisa usar esse método feio com
esses sublinhados duplos Tudo o que você precisa fazer
é usar essa sintaxe, chamar o nome da variável
assim e adicionar colchetes de abertura e
fechamento
e, dentro deles,
basta inserir o índice Isso lhe dará o valor, o item para esse índice novamente. Mesmo que você esteja fazendo isso, o
Python em segundo plano realmente está chamando esse método
e passando esse item,
esse valor, como uma entrada
para esse Então, isso é realmente o que está
acontecendo em segundo plano,
mas o Python permite que você faça isso de
uma maneira melhor,
como esta aqui
26. Como acessar fatias de lista: Eu tenho uma lista de
cinco itens aqui. Deixe-me mostrar por que usar uma função n e você verá que
ela realmente tem cinco itens. Agora, além de acessar itens
únicos da sua lista, como aquele
item com índice três, zero, um, dois, três, 6,6, você também pode acessar
partes da lista Digamos que, 1-4, isso
lhe dará outra lista. Portanto, as saídas disso também são uma lista e conterão
os itens com Índice um, índice dois e índice três O limite superior
não está incluído. Nunca é incluído
em uma fatia do Python. Então isso é uma fatia, e essa é a
saída da fatia Vamos tentar obter os
dois primeiros itens da lista. Os dois primeiros itens têm
um índice de zero e um. Então, vamos começar com zero. Como também queremos o
item com índice um, vamos escrever dois
lá para obter um. Essa é a saída. Portanto, o índice dois não
está incluído, 7,5 não está incluído. Você também pode usar um
atalho para isso. Você não precisa
digitar zero se quiser obter tudo a
partir do primeiro item, e isso
fornecerá a mesma saída. Da mesma forma, se você
quiser obter, digamos, os dois últimos itens, pode começar a contar
zero, um, dois, três. Três, comece com três, isso tem um índice de quatro, então vamos
escrever cinco lá. Embora tenhamos obtido
a saída esperada, é melhor
usar
o atalho para isso Portanto, isso é mais intuitivo porque indica que você está extraindo do item com índice três até o
último item da lista Então, sem saber quantos
itens existem na lista. Da mesma forma, aqui,
você está extraindo
do primeiro item para
o item com índice um Agora, para listas grandes, quando você deseja
extrair os últimos itens, pode não fazer muito sentido
contar desde o início, um, dois, três, quatro,
cinco, seis e assim por diante. Mas o Python tem outro
sistema de indexação, e eu vou te mostrar isso
no próximo vídeo.
27. Como usar índices negativos: Então, como obtemos o
último item dessa lista? Bem, você pode fazer isso
consultando a lista e , em seguida, colchetes e, em seguida, referindo-se ao índice
do item desejado Então 9,9 tem um índice de zero, um, dois, três, quatro, quatro Ok. Mas uma maneira mais inteligente é
usar uma indexação negativa, o que significa que, em vez de contar, você pode simplesmente escrever menos
um e Portanto, cada um dos itens de uma lista do
Python tem dois índices, um negativo e um positivo Então, menos um para isso, menos dois para aquilo, menos três, menos quatro, menos cinco Então menos cinco é o primeiro
item, na verdade, 9,1. E, claro, você pode fatiar
listas usando indexação
negativa Vamos tentar pegar
os dois últimos itens. Então, para fazer o corte, você tem que colocar o índice do
primeiro item da fatia Portanto, o primeiro item da
fatia é 6,6 e
6,6 tem índice negativo Use uma coluna e, em seguida, você
não deseja atribuir nada aqui porque deseja tudo o
que vem depois de 6.6 Então, desse jeito, você
sai da lista. Da mesma forma, você pode fazer menos quatro menos dois, por exemplo, isso resultará em 8,8
menos quatro menos três,
e menos dois não está
incluído na fatia,
porque eu disse
que o limite
superior nunca é incluído na fatia quatro menos dois, por exemplo,
isso resultará em 8,8
menos quatro menos três,
e menos dois não está
incluído na fatia,
porque eu disse
que o limite
superior nunca é incluído na fatia. Então você só tem isso e aquilo. Você também pode começar
do início
da lista para obter 9.1, o primeiro item desse tipo
28. Como acessar personagens e trechos em cordas: Para sua surpresa ou não, as strings também têm
um sistema de indexação. A boa notícia é que eles têm exatamente o mesmo
sistema de listas. Portanto, eles têm indexação positiva
e negativa, e você pode dividi-los e acessar itens a partir Deixe-me fazer uma
demonstração rápida. String hello que
fornecerá a string E, que ainda é uma string. Hello é uma string,
E também é uma string, uma indexação negativa
e também um fatiamento Uma coisa legal que você pode fazer
é me deixar pegar essa lista. Portanto, é uma lista contendo
diferentes tipos de objetos. E o que você pode fazer é
acessar o Guess It? Bem, essa é a corda amarela, então o primeiro item da lista. Em seguida, você pode usar uma
indexação em cadeia, como, por exemplo, se você digitar dois lá, adivinhe o que
obterá Bem, você obterá o primeiro L porque tem
um índice de dois, então zero para H um, para E, dois para L. Porque essa parte
aqui é um valor por si só, e essa outra parte obterá o item com índice
dois desse valor, que por acaso é uma string. É tão simples quanto isso.
29. Como acessar itens em dicionários +: Os dicionários têm
o mesmo sistema de indexação listas e
strings Vamos descobrir isso. Eu
tenho esse dicionário aqui no meu
shell Python, nota do aluno Então, vamos tentar pegar o
segundo item, talvez. Não, diz erro de chave, um, que significa que o
dicionário não tem uma chave chamada um Então, quais chaves o
dicionário tem? Talvez a mesma chave. Sim. Então, dicionários,
em vez de números inteiros, eles têm chaves Então, uma lista seria o acesso. Os itens da lista
seriam acessados por meio de números inteiros, que começam do zero e terminam no último
item da lista, o índice do último
item da lista Com os dicionários, isso é
diferente, como você pode ver, e é isso que
faz dos dicionários um dicionário Vamos ver outro exemplo
de como isso é útil. Digamos que você tenha
esse dicionário, inglês para português. É um verdadeiro dicionário humano.
Você tem algumas palavras aí. Digamos que em Suva, em
português, o sol será assim. Desculpe, eu tenho um erro de digitação aí. Códigos. Então, agora, se você quiser a versão em
português do sol, escreva isso, e isso lhe
dará essa versão. Portanto, ter números inteiros como
índices nesse caso seria muito Portanto, cada caso de uso tem sua própria estrutura de dados
para ser usada em Python
30. Mais conceitos básicos de Python: funções e condicionais: Olá, bem-vindo a um novo vídeo, e este é um vídeo
introdutório
da seção de funções e
condicionais. Então, agora você está entrando em uma seção mais
avançada do Python. Funções e condicionais são alguns
conceitos básicos avançados do Python , e esses são blocos muito
fundamentais que você pode usar para tornar seus programas mais inteligentes e mais gerenciáveis Assim, você torna seus programas mais
inteligentes fazendo com que eles tomem decisões e que você pode implementar por meio de condicionais. Então, se seu programa recebe algumas entradas e
você quer pensar, você quer fazer seu
programa pensar se essa entrada está boa ou não, e você quer fazer
algo se essa entrada for verdadeira e outra coisa
se essa entrada for falsa Então você está tomando decisões em seu programa por meio de
um bloqueio condicional E então você tem funções
, por outro lado, funções são usadas para
agrupar blocos de código, ou
seja, blocos de código semelhantes. Isso ajuda você a organizar seu código. Portanto, uma função, por exemplo, poderia converter USD em euros. Portanto, essa função faz certas coisas
e as faz bem. Portanto, ele recebe USD como entrada e fornece
euros como saída. Então, dentro da função, você tem aquelas operações matemáticas
que fazem a conversão. Portanto, condições e funções
são duas coisas que você aprenderá nesta seção
por meio de exemplos, é claro. Então, nos vemos
no próximo vídeo.
31. Como criar suas próprias funções +: No início do curso,
procurávamos uma função média ou
média que Python pudesse ter para
nos permitir fazer a média dos itens dos
números de uma lista E descobrimos que o Python tem algumas
funções mais fundamentais, como comprimento para obter vários itens de uma lista e soma para formar a soma
dos números da lista, mas não tem
uma função média Então acabamos fazendo
isso. Nós tínhamos essa lista. Calculamos a soma usando a função soma,
calculamos o comprimento, ou
seja, o número de itens
usando a função comprimento, e depois fizemos a divisão entre soma e comprimento
para obter a média. No entanto, o fato de o
Python não ter uma função média não significa que não
podemos criar nossa
própria função média O que vamos fazer
agora é
criar nossa própria função média. Para criar funções em Python, use a palavra-chave def e escolha um nome
para O nome deve seguir
as mesmas regras de nomenclatura
das variáveis Portanto, não pode começar
com um número, não pode começar com
um operador matemático. Digamos que, em seguida, você usa parênteses
arredondados e, dentro deles, a primeira linha
termina com uma coluna Dentro dos parênteses,
opcionalmente, você pode inserir alguns
parâmetros da Parâmetros, em outras palavras, são a entrada que sua
função obterá e que processará essa entrada e produzirá uma saída. A entrada em nosso caso
seria uma lista. No entanto, aqui
você deve dar um nome, seguindo novamente as mesmas
regras das variáveis. Digamos que minha lista. Ok, então você
quer pressionar Enter lá, e você verá automaticamente o código do
Visual Studio. Então, o editor indentou a
próxima linha com quatro espaços, um, dois, três, quatro Então é isso que a sintaxe exige que, após
a primeira linha, depois de definir
o nome que deseja para sua função e
quais parâmetros deseja, você precise recuar
as próximas Então, ou seu editor
fará isso automaticamente, mas se não fizer isso, um, dois, três, quatro, recue
quatro espaços lá Você também pode fazer isso com
um espaço ou apenas um espaço. Também funcionaria, mas é
recomendável usar quatro espaços. Todo mundo usa quatro
espaços porque é mais visível o código recuado, então isso tornará seu
código mais legível Então você pode começar a
calcular a média. Digamos que seja a média. Vou chamá-lo
assim para não confundi-lo com
o nome da função Essa seria a
soma da minha lista, dividida pelo tamanho da minha lista. E depois, o que queremos fazer usar a palavra-chave
return. E isso é seguido pelo
que você deseja devolver. Bem, queremos
devolver a média. Agora, guarde isso. E
deixe-me abrir um terminal. Eu quero executar
esse script agora. Então, deixe-me mostrar
o que vai acontecer. Nada vai realmente acontecer. Nada acontece
porque o que o Python faz é apenas ler
essa definição Isso é como uma planta. Você declarou o que
sua função deveria fazer, mas não disse ao Python
que a executasse Para executar sua função, você deseja chamar a função passar um valor de entrada para esse
parâmetro que você definiu. Como você deseja
imprimir, abra os parênteses lá, feche os parênteses ali, salve, não
esqueça E essa é a média
desses três números. Assim, posso facilmente experimentar isso com
muitos valores de entrada. Simples assim, não preciso
reescrever nada aqui. Essa é a beleza de uma função. Então você pode ver a
semelhança aqui. Assim como usamos
a função sum, estamos usando a
função Mint da mesma forma. Então a soma obtém esse valor de entrada
O homem obtém esse valor de entrada. Acontece que isso é uma variável. Isso é um
valor direto, mas não importa. Se você verificar o tipo de média, tipo média e tipo de soma, o que você verá é
que Média é uma função. Então isso foi impresso. Isso foi impresso por isso. Então a média é uma função
e soma novamente, é uma função, mas é
uma função embutida. Portanto, ele está embutido no interpretador
Python. Ela foi projetada pela equipe de desenvolvimento
principal do Python, e essa função foi projetada
por mim, o Então é assim que você cria e
chama uma função em Python.
32. Quando usar impressão e retorno +: Algo a ser
destacado é que, quando sua função não
tem uma instrução de retorno, salve, execute, ela
retorna implicitamente um não objeto Nenhum é um objeto específico em
Python, o que não significa nada. Não é um número inteiro, não
é um número flutuante, não
é uma string, é simplesmente
nenhum. Isso não significa nada. Python, o que ele faz é que, se não encontrar a
instrução de retorno em segundo plano, ele retorna none Então, se você executar isso, Opa,
um erro de indentação.
Isso é uma coisa boa. Você vê que todo esse bloco aqui tem que ter o mesmo
nível de indentação Se você recuou quatro linhas aqui, você tem que recuar quatro
linhas aqui Portanto, o recuo deve
ser consistente. Isso parece certo. Então, temos as mesmas saídas, nenhuma aqui e nenhuma ali Algumas pessoas cometem esse erro. Em vez de retornar,
eles usam a impressão. Em vez de usar return, eles usam uma função de impressão. A média, que
funciona na metade do caminho. Portanto, ele ainda retorna o valor
e também não retorna nenhum. Então, o que está acontecendo aqui é que quando você chama a função aqui, Python executa
todas essas linhas, então ele calcula a média vai para a próxima Então, linha por linha, ele imprimirá a média, então imprimirá
a média aqui
e, em seguida,
procurará uma declaração de retorno. Ele não o encontra, então
não retornará nenhum. O problema com isso
é que, se você tentar fazer outras operações
com seu valor médio, digamos que minha média seja igual à função média
zero, três e quatro. OK. E eu quero
imprimir minha média mais dez. Então, eu esperaria que isso
me desse o valor de sete é a soma
dividida por três, dois pontos mais
dez, 12 pontos alguma coisa. Mas vamos ver o que
isso vai me dar. Então, isso me dará
um erro de tipo em vez disso. Eu tentei adicionar o não
tipo, que é nenhum. Portanto, esse não é um tipo. Esse é o tipo desse valor. Está tentando adicionar isso a dez. Então, minha média é nenhuma
porque não retorna nenhuma. Um intérprete tentará
somar isso para dez.
Isso não é possível. É por isso que você não
deve usar a impressão. Se eu
substituir isso por return,
remova o parêntese, salve,
execute, isso me dará 12.3 Essa é a média mais dez. No entanto, isso não significa que você não possa usar a impressão
em suas funções. Você pode realmente fazer isso. Digamos que você queira imprimir apenas algumas informações. Estude-o. Funcione, estude
e execute isso. Você obtém a saída
da impressão aqui
e, em seguida, o Python
retorna a média Você obtém a média, você a
armazena aqui, a saída da sua função, mas o valor da função é sempre o que você retorna aqui. Se você ver isso, sempre use return em suas funções, a menos que tenha um motivo muito especial para fazer isso.
33. Introdução às condicionais: Definimos essa função
nas palestras anteriores, que é capaz de calcular
a média de uma lista No entanto, o que acontece se em vez de passar
uma lista como entrada, passarmos um dicionário. As notas dos alunos estão
neste dicionário aqui. Vamos ver o que
vai acontecer. Bem, diz um tipo de operando
não suportado. Portanto, ocorrerá um erro
com a função sum porque ela tentará
somar strings e números inteiros, e essa função não foi projetada para processar Ele foi projetado para processar a lista. Então, como podemos fazer com que
essa função processe listas
e dicionários Podemos fazer isso
usando condicionais. Vamos ver como fazer isso
nos próximos vídeos.
34. Usando a condição If: Essa função retorna o valor
médio de uma lista, mas queremos
torná-la mais inteligente. Queremos que a função retorne
a média
mesmo que o
valor de entrada seja um dicionário. Então, quando o
valor de entrada for uma lista, ele aplicará um algoritmo específico e
retornará o valor específico, que é uma média.
Quando é um dicionário, ele verifica se é
um dicionário e aplica o algoritmo correspondente que calcula o
valor médio de um dicionário Portanto, sabemos que algumas temperaturas de
segunda-feira divididas pela duração das temperaturas de
segunda-feira fornecem a média da lista. Da mesma forma, as notas dos alunos ,
que é um dicionário,
seus valores, a soma de seus valores
dividida pelo tamanho do dicionário de notas dos alunos, fornecerão a média, então queremos que nossa função
verifique e tome uma decisão. Isso é um parâmetro.
Deixe-me alterá-lo para valor. Valor é um nome mais significativo pois o que estamos processando não
será apenas uma lista, mas também pode ser um dicionário. E então, sob a função, tudo tem que ser indentado Você pode ver que todo o corpo
da função está recuado. O bloco condicional
que vou escrever aqui também será
indentado Tudo começa com, se você se lembra, usamos uma função de tipo no
início do curso, que retorna o
tipo de um objeto. Por exemplo, este
é um dicionário
vazio, mas
ainda é um dicionário. Então, o que você pode fazer
aqui é dizer, eu digito valor, operador de atribuição
dupla,
o que significa igual É um operador de comparação,
eu verifico a igualdade. Se for um ditado, uma coluna, insira e ele deve ser recuado
com quatro espaços Então você vê que é outro
nível de indentação. É um aqui para eu, e este é para a função. Então, aqui, a média
será igual à soma do valor que os valores dividem
pelo comprimento do valor. Portanto, este é um dicionário, dite os valores dos pontos e o
comprimento do dicionário. Eu tenho que fechar a chamada
da função de
soma dessa forma e entrar se
você tiver terminado com o bloqueio I. Então, se isso é tudo o que
você quer verificar, então você diz outra coisa, e
temos esse código, que também deve ser indentado abaixo de
s, e pronto Deixe-me tentar isso. Então,
com as notas dos alunos, o dicionário como entrada, temos esse valor aqui. Se eu usar as temperaturas da
última segunda-feira, isso
me dará o outro valor, que é a média das temperaturas de
segunda-feira. Então, isso é uma condicional se e
else. Mas deixe-me explicar isso linha
por linha no próximo vídeo.
35. Uma explicação condicional linha por linha: Então, o que está
acontecendo nesse roteiro? Deixe-me explicar linha por linha. Python executa a definição da
função, mas não faz nada porque é apenas uma
definição de Python faz coisas
quando encontra uma chamada de função, como esta aqui Então, aqui estamos chamando
a função e o valor de entrada
para essa função será a temperatura de segunda-feira, que é equivalente
a essa lista. Essa lista será
armazenada nessa variável. Portanto, um valor é igual
a essa lista. Então, o que acontece é que o
intérprete verificará se o tipo dessa lista está morto Se isso for verdade, então ele
executará essa linha aqui. Atribuirei a saída dessa expressão
à variável média. No entanto, isso não é
verdade neste caso porque o tipo da
lista não é viciado. Portanto, o Python não
executará essa linha. Ele irá para a próxima linha. Então, se isso não fosse verdade, então ele vai fazer isso aqui. Portanto, a média será
igual à soma da lista dividida pelo comprimento
da lista, que é 9,26 algo E então esse é o
valor atual da média,
portanto, aqui o
recuo termina. Portanto, o retorno está fora
do bloco I and else.
Você pode ver aqui. Tem que estar lá fora. Portanto, o bloco condicional termina
aqui e o valor atual da média será retornado
pela instrução return Então você obtém esse
valor médio para essa lista. Se, em vez disso, fosse a
nota do aluno, o que acontece é que esse
dicionário será armazenado em valor e se o tipo de valor
for dict, sim, é dict. A média será igual a isso. Então, para a média
do dicionário. E se essa condição for
verdadeira, ela será executada e o Python ignorará
tudo o que estiver abaixo Eu disse tudo o
que está abaixo de ls, o que significa tudo o que
está recuado em else. Então, os filhos de
outra pessoa, por assim dizer, o
retorno da
maldade não são filhos de ls. Não está recuado em
ls, é independente. Ele tem seu próprio nível de
indentação. Portanto, o valor atual da média é este aqui. Então, retorne a média,
na verdade retornamos a média para o dicionário.
Aquele aí dentro.
36. Mais informações sobre condicionais +: Agora, esse bloco condicional está dentro de uma função, mas também pode estar fora de
uma função como essa E digamos que três seja
maior que um,
imprima mais, imprima caso contrário, imprima, não maior. E você ficará maior. O que um
bloco condicional verifica é na verdade, verificar se isso é verdade Então, true é, na verdade,
outro tipo em Python, assim como números inteiros,
leads e strings True é outro tipo. Então, isso é na verdade o
equivalente a, se verdadeiro ,
imprimir maior, senão
imprimir, não maior. Então, verdade é sempre verdade. Da mesma forma, o tipo
três, por exemplo, igual a t retornará verdadeiro Então é isso que estamos
fazendo aqui também. No entanto, há outra maneira considerada melhor em Python de usar sua instância
é o valor da instância, e você deseja verificar se há
dicionários Execute e você obterá
a mesma saída. Por exemplo, three int, obterá a mesma saída. Você pode usar qualquer um, mas
por alguns motivos avançados, que não vou explicar agora porque estão
fora do contexto. Neste ponto, é claro, é melhor usar essa instância. Agora, você viu este
exemplo em que
usei se três é
maior que um e imprimi
maior e não maior. Também poderíamos ter
esses três casos três é maior que um, três é igual a um e três é menor que um. Nesse caso, se outra coisa
não for suficiente, precisamos de outra
coisa. Eu vou te mostrar como
podemos fazer isso no próximo vídeo.
37. Usando a condição Elif: Eu tenho essas duas
variáveis aqui, cada uma delas tem um valor e deixe-me escrever uma
condição que
fará algo diferente
dependendo se X é maior, igual ou menor que Y. I X
é maior que Y, imprima X é maior que Y. Se X for igual a Y, imprima A S é igual a Y. E então o que resta,
qual é a Se X não for maior e não
for igual, bem, s. Então, se você tiver mais
condicionais para verificar, você pode continuar com if that e L isso e aquilo e assim por diante Mas se você terminar,
você pode usar Ls. Imprima, então tem que
ser X é menor que Y. E então obtemos X é
maior que
38. Espaço em branco +: Nesta palestra, eu gostaria de
esclarecer o uso do espaço em branco Então, quando usar um espaço em branco, quando usar mais de um e quando não usar espaço em branco. Para explicar isso para você, eu tenho um roteiro aqui
com três partes. Cada uma das partes
fará a mesma coisa. Então, o primeiro imprime A, aA e três como, e depois B, aqui e depois C. Então o primeiro, aqui eu digitei em um, dois,
três, quatro, cinco,
seis, seis, seis espaços Então isso vai funcionar.
Como você pode ver aqui, você obtém a saída corretamente, mas não é uma boa prática. Mesmo que isso funcione, não
é uma boa prática porque o código não é muito legível Então isso é um problema
com esse primeiro bloco. E aqui no segundo
bloco, eu conserto isso. O espaço aqui é perfeito. Basicamente, você quer
separar as coisas com espaços. Quando se trata de
operadores como
operadores comparação, mais
ou menos ou multiplicação, o código funcionará mesmo que você não tenha espaços como No entanto, para tornar o
código mais legível, é melhor ter alguns espaços também
é melhor ter alguns espaços
entre os operadores O espaço entre eu e
um número é obrigatório. Se você tiver isso, o
código não funcionará. Você receberá uma sintaxe inválida. No entanto, nenhum espaço entre
os operadores é adequado. Então, esse é um problema
neste bloco aqui que você tem essa
expressão sem espaços. Em alguns
casos específicos, às vezes, não uso espaços nos
vídeos porque quero
mostrar o texto
em fontes maiores, então tenho que me sacrificar com menos espaços para poder colocar
mais textos na tela. Portanto, a menos que você tenha um
bom motivo para fazer isso, use espaços em um espaço. Então aqui está tudo bem. Um espaço aqui, um aqui e outro ali, e
depois da coluna, isso
é o que você deve saber. Eu já te falei
sobre a indentação. Depois de uma coluna, você
sempre tem um recuo. Recuo significa pelo
menos um espaço. Isso também funcionaria assim, mas uma boa prática é
ter quatro espaços, quatro. Isso está correto. E quando você tem mais código
em seu script, é bom
separar as coisas com linha de
interrupção para separar as lógicas. Então, se você tem um bloco
condicional lá, você tem que
escrevê-lo linha por linha Não há linhas de interrupção aqui como essas. Isso também funcionaria, mas por favor não use linhas de interrupção para tornar
seu código mais legível No entanto, quando o bloqueio
condicional termina, você tem outro bloco lógico Não
há regras claras aqui, mas basta usar a lógica Então, achei bom ter essas funções de impressão sem uma linha de
tijolos entre elas. Então, aqui, se eu
adicionar outra função, vou fazer uma linha de tijolos e, em seguida, criar uma função
aqui e assim por diante. E, claro, use recuo
para funções também. Então, depois da coluna, sempre vem o recuo É mais ou menos sobre o
espaço amplo em Python.
39. Mais conceitos básicos de Python: processando a entrada do usuário: Bem-vindo a uma seção
do curso. Aqui você
aprenderá como interagir
com o usuário por meio do
seu programa Python Assim, seu programa Python pode
receber informações do usuário. Ele pode solicitar ao
usuário algumas entradas, e o usuário insere alguma entrada, e o programa para seu
script Python receba essa entrada , a processe e
forneça alguns Então, vamos ver
nesta seção como você pode
obter informações do usuário, processá-las e
produzir alguma saída. Eu vou falar com você no
próximo vídeo. Obrigada.
40. Aprendendo mais sobre a entrada do usuário: Como você sabe, nas palestras
anteriores, definimos essa função, e aqui a chamamos para que
ela verifique se a
temperatura dada é maior que sete e ela retorne
quente se isso for verdade e fria se a temperatura for igual a sete ou
menor que Tudo bem. Mas qual é o uso dessa função em
um ambiente da vida real? Tipo, quem está dando essa opinião? Você, como programador,
está escrevendo essa função para
outra pessoa, para que ela possa usá-la Mas você não
espera que eles editem o arquivo Python como se tivessem um
editor como o Visual Studio
Code ou outros E então você não pode
simplesmente dizer a eles que vão para a linha sete e alterem o valor e, em seguida,
executem esse código para obter saídas diferentes,
dependendo do valor Então, que tal solicitar que o
usuário insira um valor? E então o usuário
digita o valor, e então obtemos esse valor e o processamos em nossa função. Nesse caso, obtemos esse valor e o colocamos aqui na chamada
da função. Vamos fazer isso. Então,
temos uma função lá. Queremos obter um
valor do usuário. Para obter um valor do usuário, use a função de entrada. A função de entrada
recebe um argumento, que é a mensagem que
você deseja mostrar
ao usuário na linha de comando. Por exemplo,
insira Inserir temperatura. Talvez coloque uma coluna
lá, se quiser, você pode escrever o que quiser. Deixe-me salvar o script
e executá-lo. Veja, agora eu a executei, e essa função de entrada, o que ela faz é
congelar a execução de um programa e aguardar a
entrada do usuário na linha de comando Então, se eu inserir algo
aqui como sete, neste caso, o que
vai acontecer é que essa expressão aqui
será igual a sete. No entanto, como
não fizemos nada aqui, nada acontecerá
se imprimirmos esse valor, por exemplo, sete, você
imprimirá o valor
disso, que é sete. Então aí você pode colocar o que
quiser. Olá, e você
chega lá, impresso. O que sugere é que, em vez
de imprimir isso, primeiro
você deve
colocá-lo em uma variável. Isso o
tornaria mais legível. Então, use sua entrada e, em seguida, você pode fazer
o que quiser com essa variável, como diminuí-la. Então, imprima a
versão em minúsculas disso. Oi ele. Então você recebe hi hi com
letras minúsculas. Ok, de volta à nossa função. Deixe-me agora tentar imprimir a
saída da função de condição climática com um valor de,
bem, entrada do usuário,
o que quer que o usuário insira como entrada. Então, vou executar o programa agora. O programa me perguntará qual é
a temperatura de entrada. O programa solicitará
que eu insira uma temperatura, então a execução está
congelada neste momento. Essa linha ainda não
foi executada. Ele será executado depois de
fornecermos um valor aqui
e pressionarmos Enter. Então, deixe-me escrever seis. Vamos ver o que
vamos conseguir dessa vez. Recebemos um erro. Vamos
ler o erro com atenção. É sobre o arquivo Basics dot PY, que é o nosso arquivo, ok? O erro aconteceu
primeiro nesta linha aqui. Então, aqui, imprima a
condição climática, a entrada do usuário. Quando o Python tentou executar essa linha,
não conseguiu E por quê? Bem, você tem
que seguir o erro. Então, ainda assim, o básico da linha, essa é a linha dois. Essa linha. Então, quando o Python
tentou executar essa linha, essa linha chamou algumas outras
coisas no script E o erro estava
nessa linha dois. Então, quando a chamada da função
tentou chamar a função, ela tentou executar essa linha. Então, se for temperatura, ele
tentou comparar cinco com sete. E então ele recebeu
esse erro ao tentar comparar
cinco com sete. Então, quando ele tentou
executar essa linha, em outras palavras,
veja o que ela diz. Erro de tipo. Esse operador não é suportado entre instâncias
de string e integer Então string e int, o que significa que isso era uma
string, e isso era um int. Então, nossa entrada de usuário foi
sete, foi passada aqui, e foi
comparada com sete. Parece que nossa entrada, a entrada do usuário, era uma
string, e isso é verdade, e esse era o que
eu estava tentando dizer aqui, porque qualquer entrada que o usuário escreva aqui,
mesmo que seja um número, o
Python realmente a
converterá em mesmo que seja um número, uma Então, sete, na verdade,
serão convertidos em uma string como com aspas ou
aspas duplas dentro do Python Mas isso tem uma solução fácil. O que você pode fazer é converter esse valor, que é uma string sete, você pode convertê-lo em um float Tenha cuidado com parênteses. Então flutuar é uma função. Tem um
parêntese aberto aqui e um
parêntese final A entrada também é uma função com seus próprios parênteses de abertura e
fechamento Então, agora, se eu fizer isso, a temperatura cinco, eu
vou obter a resposta correta. E deixe-me ser
transparente com você. Vamos novamente, entrada, obtenha a
entrada do usuário, insira alguma entrada. Deixe-me agora imprimir
o tipo de entrada do usuário. Execute e seis, você verá que seis
na verdade é uma string. É por isso que estou
convertendo-o em um carro alegórico, para que seis desta vez
sejam, na verdade, um carro alegórico, que se parece com Você pode imprimir
o número real
aqui, o número real convertido, a versão flutuante do
número e executar novamente, 6.0 Você também pode usar int
aqui, se quiser, seis, então você obterá seis, o que é igual a
6,0, é claro Mas carros alegóricos seriam uma escolha melhor, porque
eu posso te mostrar o porquê Se você digitar 6.3, por exemplo, não será possível
convertê-lo porque é como fazer Int, 6.3 em código duplo Então, o Int
ficará confuso, não saberá como converter
isso em um inteiro No entanto, ele converte seis se for um seis simples
sem um ponto decimal Float converterá, desculpe, tanto seis quanto 6,3 É assim que você usa a entrada
do usuário em Python.
41. Formatação de cadeia +: Como você criaria um
programa que se comporta? Assim, ele pede seu nome
e
você coloca seu nome como usuário, e o programa cumprimentará você
, enviará uma mensagem olá e seu nome lá e também um ponto de exclamação
no final da string Bem, você faz isso
com duas coisas. Primeiro, você precisa que a função
de entrada solicite
a entrada do usuário para
solicitar a entrada do usuário
e, em seguida, precisa da formatação de
string É assim que a formatação de strings
se parece em Python. Então, na primeira linha,
obtemos a entrada do usuário, armazenamos essa entrada como uma
string na entrada do usuário
e, em seguida, criamos uma variável. Nessa variável, armazenaremos a mensagem que estamos construindo. E isso aqui é uma expressão de
formatação de string. Então, queremos imprimir
hello e, em seguida, ter um espaço, e então queremos
imprimir o nome do usuário, ou seja, o valor que
o usuário insere E isso aqui, porcentages é
uma string especial em Python. Então temos um ponto de
exclamação, que é uma sequência normal E uma citação dupla. Então,
isso é especial aqui. E depois da string, você não quer colocar uma vírgula, o que você quer fazer é usar esse operador de porcentagem
e depois usar uma variável Agora, o valor dessa
variável substituirá a porcentagem S.
Então, o que você obtém em vez disso é olá e
seu nome aí. Agora, esse método de formatação de
string
usando essa porcentagem S aqui e o
operador de porcentagem aqui, isso é válido para Python dois
e Python três Agora, há outro método que foi introduzido no Python Portanto, o método que vou apresentar
agora não funcionará se você o executar com uma versão do Python
anterior O método é assim. Vamos armazenar a
string inteira em uma variável novamente, para que seja uma string com aspas
duplas ou
aspas simples, o que você preferir. Estou usando aspas duplas. Então, olá, e você usa
esses colchetes. E dentro disso,
você coloca o nome
da variável, qual valor você quer colocar
neste lugar? Agora, isso não é tudo. Então, se eu salvar isso e executar
o código e disser Adicione-o, ele
retornará essa string. Então, precisamos fazer outra
coisa aqui. O que precisamos fazer
é adicionar um prefixo F
fora do código Então essa é a corda. Esse
F sai do código. Se eu salvar o script
, execute novamente, escreva meu nome e agora
obteremos a saída esperada. Observe que temos duas variáveis com
o mesmo nome aqui, e o que
acontecerá é que primeiro Python executa um script
de cima para baixo,
então ele executa a primeira linha, ele executa a segunda linha, então
ele armazenará hello audit Mas então estamos
sobrescrevendo essa variável. Portanto, nesse caso, a string
será escrita nessa variável de
mensagem. Então, onde quer que você crie aqui, qualquer objeto que você armazene aqui
na variável, esse objeto será
o objeto atual qual essa variável se
referirá. Nesse caso, imprimimos o objeto que
você criou aqui, que por acaso é hello audit. Qual deles você deve usar? Bem, se você acha
que seu projeto será executado com o
Python 3.6 ou superior, use essa É mais legível. Se
você acha que seu projeto, seus arquivos Python serão executados Python dois ou
3.1 ou dois ou três, talvez você queira
optar por esse método Porque às vezes,
quando você implanta seu script em um
servidor, por exemplo, digamos que você queira executar um script todos os dias
em uma determinada hora, quer
implantá-lo em um servidor web, e esse servidor web terá uma versão específica do Python Às vezes, essa versão
é Python 2. Então, nesse caso, você deseja
ajustar seus scripts para que
funcionem com o Python 2
e o servidor web, o servidor o
computador executarão seu script com uma versão específica do
Python Vamos
analisar isso mais tarde, quando implantarmos os aplicativos da web. Então, por enquanto, esses
são os dois métodos de formatação de strings
42. Formatação de cadeia com múltiplas variáveis +: Anteriormente,
apresentei como inserir dinamicamente o valor
da variável dentro de uma string Então, aqui construímos hello e qualquer valor que o usuário
inseriu na função de entrada. Então isso funcionou com o
Python dois e três. Isso funciona com o Python
3.6 e versões posteriores. Agora, e se quisermos inserir mais de um valor dentro
da string, como fazer isso? Por exemplo, digamos que
a primeira função de entrada nos
pergunte pelo nome e a segunda pergunte
pelo sobrenome Vamos chamar essa variável de
nome e esse sobrenome. Para usar essa versão da formatação de
string
com duas variáveis, você precisa fazer isso Em vez de apenas uma variável, você precisa usar colchetes
redondos e, nesse caso,
inserir todas as variáveis que
deseja inserir
no que
deseja inserir
no nome e
sobrenome da string Agora, se você executar isso, receberá um erro. Então você precisa fazer
algo mais lá. Digamos que auditoria. Ulce e
você tiveram um erro de digitação Nem todos os argumentos são convertidos
durante a formatação da string, o
que significa que os argumentos
são nome e sobrenome Nem todos foram convertidos
porque somente o nome foi convertido porque você só tinha um espaço reservado
aqui, porcentagens Você quer ter
dois espaços reservados, um para o sobrenome Se você executar isso, bem, obteremos outro erro, mas isso
não está relacionado a esta linha aqui. Essa linha está perfeitamente correta. Funciona. Por que isso funciona? Bem, porque você pode ver
que o erro aconteceu. Então é aqui que o
rastreamento começa. Você vê que o erro
acontece no filebsics dot i, que é o arquivo em que
temos o código na linha cinco, o que significa que acima da linha
cinco, está tudo bem Portanto, essa linha agora
passou pela verificação de erros.
É livre de erros. Então, essa é a linha
que tem o erro, e é um erro de
nome, a entrada do usuário não está definida. Portanto, essa entrada do usuário aqui
não foi definida em nosso código. Não temos uma variável
com esse nome. Estamos apenas usando isso aqui, mas não o definimos.
E aqui está um truque. Se você não quiser
executar essa linha, você pode comandá-la. Então, ao adicionar esse símbolo aqui, Python ignorará essa linha Ele o tratará como um comentário. Não como código. Então salve
o script, execute. Insira sua entrada como usuário, e esta é a saída
que obtemos desta vez. Então esse foi um bom exercício
sobre como corrigir erros. Agora, de volta às nossas operações de
formatação de strings. Vamos ver como isso agora
funcionará com duas variáveis. Portanto, a entrada do usuário não é mais
uma variável. Queremos usar o nome. Então, olá, nome, e então
queremos ter um espaço aqui. Então esse é um espaço em branco. Então, nome, espaço em branco, sobrenome. E é tão fácil quanto isso. Executar. E você recebe a
saída hello or the suche Então essa é a variável da mensagem, a string da variável da
mensagem. Dessa forma, você pode colocar quantas
variáveis quiser. Por exemplo, o que está acontecendo? Quando quando pode ser uma variável. Hoje, a string today faz
parte da variável wind, a variável win
será substituída aqui pelo valor que
ela tem atualmente, que é hoje, execute isso. E é assim que funciona. E é isso que você
precisa saber sobre a formatação de
strings em Python
43. Introdução ao For Loops +: Olá, bem-vindo de volta a
esta nova seção. Caso haja lacunas em
seu conhecimento sobre Python
até agora em relação aos fundamentos do Python que você aprendeu
ao longo dessas seções, nesta seção,
estou tentando preencher
essas lacunas para que você
saiba o que Então, faremos isso
juntando todas as peças criando
um aplicativo maior com os blocos de código que você aprendeu, para que
tudo comece a fazer mais sentido e você saiba como criar programas do mundo
real. Portanto, esse é o primeiro
passo para criar programas
do mundo real. E isso não é realmente um programa
do mundo real porque
faremos mais alguns exemplos do mundo
real nas próximas seções. Então, isso é apenas para
garantir que você aprendido bem os conceitos básicos do
Python Então, vamos começar com o próximo
vídeo. Te vejo lá.
44. Como e por que usar o For Loops: Nesta palestra,
explicarei um dos conceitos mais importantes
da programação
em Python , que são quatro loops Vou usar um exemplo, para que você não apenas entenda a sintaxe, como escrever quatro loops, mas também entenda por que
você deve usar quatro loops Digamos que temos essas
temperaturas para segunda-feira. Talvez isso tenha sido
gravado pela
manhã ao meio-dia e outro
à noite Como podemos criar um
programa que
imprima os valores arredondados
de cada um desses valores? Assim. Então essa
seria a saída esperada. Você pode ver aqui embaixo
como você obtém nove porque 9,1 arredondado para um
número inteiro seria nove, e então 8,89 novamente e Como podemos fazer isso?
Portanto, precisamos encontrar uma maneira de acessar os
itens da lista. E você já
conhece um método para acessar itens da lista, que é usar índices. Então, se você quiser o
primeiro, use zero. Então, você deseja
imprimir o primeiro item,
que, no entanto,
imprimiria 9.1 Você quer a
versão redonda do 9.1
, ou seja, talvez você queira
dar uma
olhada nas funções
disponíveis Assim. Então, dê uma olhada rápida aqui e
você poderá
encontrar um surround redondo, que significa que você quer
arredondar um número, 9.1, você E no nosso caso, o
número que gostaríamos arredondar é essa expressão. Então, queremos aplicar
aqui e parênteses, colocar essa expressão,
então esse é o número Então, experimente antes de
escrever o código inteiro, e tudo bem. Faça isso de novo. Mas com um e com dois. Execute e você obterá
a saída esperada. Ok, tudo bem. Funciona. Mas e se você tivesse uma lista
grande de 100 itens, acabaria com
100 linhas de código. Bem, eu posso te mostrar
como fazer isso com apenas duas linhas de código em vez disso.
É assim que você faz. Você usa quatro ciclos
para temperatura, escolhe um nome para uma variável. Para temperatura, você vê como essas palavras-chave
são destacadas. Então, essas são, na verdade,
palavras reservadas do Python. A temperatura é apenas uma variável. É por isso que está em preto. Nas temperaturas de segunda-feira,
use uma coluna, e o que acontece
depois de uma coluna que eu
contei no vídeo anterior? Bem, recuo, que
acontece automaticamente no
código do Visual Studio para espaços O que queremos fazer com
cada uma das temperaturas? Bem, queremos imprimir a forma
redonda da temperatura. Assim, salve, execute e essa é a saída. Então, em apenas duas linhas de código, podemos executar alguns comandos para todos
os itens de uma matriz, que é uma lista nesse caso, mas também pode ser uma string. Por exemplo, para carta
em olá, imprima carta. E o olá está impresso lá fora. E, claro, você pode fazer
o que quiser lá. Título, pegue o primeiro
item, que é uma carta. Então, a letra será
maiúscula assim. Então, deixe-me examinar
mais uma vez essas duas linhas para explicar o que
elas significam. Então, o que o loop faz é temperatura em temperaturas de
Monte, então você está criando uma variável, e o que o loop
faz é
percorrer todos esses itens,
um por um, com loops Portanto, na primeira iteração, a temperatura será igual, então a variável
será igual a 9,1 Portanto, a função
redonda
arredondará 9,1 e a
imprimirá aqui E se houver
mais linhas aqui, por exemplo, imprima, pronto. Se você fizer isso, verá que, se houver outra linha a mais, como depois das nove, essa
linha será executada, então você
imprime a string. Se houver mais linhas, essas linhas serão executadas. Se não houver mais linhas, a execução será novamente no topo do loop
de quatro, e o loop receberá o
segundo item dessa vez. Então, a temperatura desta vez
será igual a 8,8. E a mesma coisa
acontece novamente, arredonde e imprima. D também é impresso, vai para a próxima
linha, 7.6 e assim por diante E depois de 7.6, o loop tenta
ver se há mais itens nessa matriz Se não houver mais itens, o que acontece é que
esse bloco recuado, a execução desse
bloco termina e o Python vai para as próximas linhas para
executar o que resta
45. Como percorrer um dicionário +: Você viu que percorrer
uma lista é simples. Você simplesmente faz isso assim. No entanto, se você
tem um dicionário, é um pouco mais complexo. Novamente, você faz quatro, escolhe um nome de variável
no dicionário, deseja iterar, mas aqui deseja especificar o que
deseja iterar Você quer iterar sobre
itens, chaves ou valores? Portanto, se você quiser
iterar sobre os itens, aplique esses itens lá Não esqueça a
coluna e a impressão. Ótimo. Veja o que acontece. Então, você
imprime esses itens como uma tupla. São tuplas. Então, a chave e o valor
de cada iteração. Se você quisesse as chaves em vez disso, basta escrever as chaves lá e,
se quiser os valores, basta escrever esses valores
e obter os valores. É assim que você repete os
dicionários.
46. Como e por que usar While loops: Então, você aprende que um loop de quatro iterações
passa por um contêiner, que pode ser uma lista
, uma string ou uma tupla, e o loop terminará quando o contêiner Então, por exemplo, ele
imprime um, dois e três. E quando não há mais
itens, o loop termina. Então, um circuito de quatro circuitos funciona até que
um contêiner se esgote, e um loop de um
loop de fio funciona enquanto essa condição for verdadeira, deixe-me executar isso e ver
o que vai acontecer Então você verá que
11 está sendo
impresso o tempo todo. Então, se eu rolar até aqui, não conseguirei descobrir onde estava
o ponto de partida porque agora há 1 milhão de unidades
sendo
impressas cada fração de segundo. Então, o que está acontecendo aqui é
que um loop Y Y é uma palavra-chave
e, em seguida, isso é
seguido por uma condição. Nesse caso, a
condição é que A seja maior que
zero, o que é verdade. Então, A é na verdade três, isso significa que essa
condição é verdadeira. E enquanto essa
condição for verdadeira, ela será impressa. Portanto, no loop Wile, você pode ter quantas
operações de ações quiser Por exemplo,
deixe-me interromper isso com o Controle C em seu terminal
e, em seguida, adicionar outra linha aqui, imprimir duas, salvar, executar Então, um, dois, um, dois, um, 21, dois está sendo impresso. Ok, vou interromper isso. Agora, a taxa em que esses
números estão
sendo impressos depende da velocidade do processador do seu
computador. Então, quanto mais rápido seu processador, mais rápido você obterá
as ações aqui, essas operações sendo executadas. Agora, é claro, isso sempre
será verdade porque é apenas uma declaração estática
de uma variável aqui, então ninguém a está alterando aqui. Portanto, a condição sempre
será verdadeira. Você pode ver no site
Python que quando você
verifica que algo três é
maior que zero, você se Então, isso é basicamente uma
verdade absurda e às vezes você
verá isso assim. Então, basta excluir a primeira linha. Saia daqui e execute
o código novamente. Então, novamente, a mesma coisa acontece porque verdade é sempre verdade. No entanto, não é assim loops
selvagens são usados
no mundo real. Não faz sentido
verificar se verdadeiro é verdadeiro e imprimir
algo o tempo todo Então, deixe-me explicar os loops
wilp em um
exemplo melhor no próximo vídeo
47. Loops durante com entrada do usuário: Então, tínhamos um script que
verifica se a é maior que três e imprime essas
operações se isso for verdade. Agora, deixe-me seguir em frente e usar
um exemplo mais real. Vamos criar uma
variável aqui chamada username e atribuir a ela o
valor de uma string vazia. E aqui, vamos
verificar se o nome de usuário é diferente
do nome de usuário real, que vamos supor que seja Pi Pi. Agora, embora isso seja verdade, queremos pedir que o usuário
insira um nome de usuário. Então, vamos ver o que
vai acontecer. Digite o nome do usuário,
recebemos o prompt aqui pela função de entrada. Pi. Não, obtemos a opção Inserir nome de
usuário novamente. Pi Pi, talvez. Não. Pi Pi. Então, desta vez, não
recebemos mais um aviso. A execução do programa, então deixe-me explicar
o que aconteceu aqui. Declaramos a string vazia
para o nome de usuário variável. E aqui
verificamos se o valor da variável
de nome de usuário
é diferente de Pi Pi. Nesse caso, é diferente porque essa é uma string de entrada e isso é Pi Pi. Portanto, a primeira
iteração ocorrerá, que é essa aqui Então, na primeira iteração, estamos pedindo
ao usuário que insira algumas entradas Isso é o que aconteceu aqui
na primeira iteração. Então, digitar o nome de usuário foi
solicitado e inserimos Pi. Pi agora é uma string que
será atribuída ao nome de usuário. E o loop passa pela
segunda iteração. Portanto, embora o nome de usuário seja
diferente de Pi Pi, o que é verdade neste caso, porque o nome de usuário, por enquanto, é Pi, a string Pi. Então Pi é diferente de Pipi. Portanto, vá em frente e execute o corpo
do laço de arame novamente. Que é essa aqui. Então, peça mais uma vez
o nome de usuário do usuário. Então, nome de usuário, o usuário
insere Pi P desta vez. O loop percorre a cabeça até o
início novamente e verifica se Pi P
é diferente de Pipi Isso é verdade, obtenha
o nome de usuário novamente. Nesse caso, temos Pi Pi. Então, o nome de usuário é Pipi agora. O loop continua
enquanto o nome de usuário é diferente de
Pi Pi; nesse caso, isso não é verdade
porque, nesse caso, o nome de usuário é igual a Pi Pi. Então, Pi Pi. É diferente de Pi Pi? Não, isso é falso. Então, na terceira iteração, isso será igual a false, e é aí que o loop termina Portanto, quatro voltas terminam quando o
recipiente está esgotado e uma volta termina quando a
condição
48. While, break e continue +: No vídeo anterior,
criamos esse código. O código é assim. Atribuímos a string vazia
à variável de nome de usuário. Em seguida, construímos um laço de arame que verifica se essa
condição é verdadeira. Se a condição de que o nome de usuário
seja diferente de Pi Pi, se o nome de usuário for
diferente de Pi Pi, isso será executado. Na primeira iteração, o nome de
usuário é, na verdade diferente do Pipi porque o
nome de usuário é uma string vazia Portanto, isso
será executado. O programa
solicita o nome de usuário. Se a entrada for A, por exemplo, será atribuído ao nome do usuário e, em seguida, a segunda
iteração será iniciada,
portanto, enquanto A é
diferente de Pi Pi, o que é verdadeiro Isso vai
ser executado novamente. É por isso que recebemos esse
aviso aqui novamente. Se você inserir Pi Pi, o loop termina porque
na terceira iteração, Pipi não é diferente de Pipi, então isso
não ocorrerá Agora, há uma
maneira diferente de fazer isso usando uma instrução break em vez
de fazer o acima, deixe-me fazer isso de outra maneira, novamente, usando o loop Wile Mas desta vez, você quer
verificar se é verdadeiro, enquanto verdadeiro, que é sempre verdadeiro, para que o loop sempre seja
executado até que o quebremos. Então, embora seja verdade, você
quer pedir o nome de usuário. Entrada, insira o nome de usuário. Agora, queremos criar uma condicional aqui para verificar o
interior do loop Wile Se o nome de usuário for Pip Pi, interrompa o loop, caso contrário, continue Vamos ver o que
isso nos dará. Python três, B aquele Pi. Esse é o
script do lado direito. Insira o nome do usuário. Hm, não, não. Pippi? Sim. Deixe-me tentar novamente. Se você digitar Pi Pi imediatamente, novamente, o loop será encerrado Na verdade, eu prefiro isso porque oferece mais controle
do fluxo de trabalho. Então é isso que acontece aqui. Embora seja verdade, o que
é sempre verdade. Portanto, a primeira iteração
ocorre porque verdadeiro é verdadeiro e solicitamos o nome de usuário
na primeira iteração Então, na primeira iteração aqui, o nome de usuário era ASFD Portanto, se o ASFD for igual ao
Pipe Pi, quebre o loop. Esse não é o caso porque o
ASFD é diferente do pipi. Portanto, isso não ocorrerá porque essa
condição é falsa. Caso contrário, será executado. Continuar. Agora,
o que continue faz é mover o controle para o
topo do loop novamente. É assim que você usa break
and continue in while loop. Ambas as formas estão corretas, mas acho isso
mais legível
49. Construindo um programa em Python: Olá, bem-vindo de volta a
esta nova seção. Caso haja lacunas em
seu conhecimento sobre Python
até agora em relação aos fundamentos do Python que você aprendeu
ao longo dessas seções, nesta seção,
estou tentando preencher
essas lacunas para que você
saiba o que Então, faremos isso
juntando todas as peças criando
um aplicativo maior com os blocos de código que você aprendeu, para que
tudo comece a fazer mais sentido e você saiba como criar programas do mundo
real. Portanto, esse é o primeiro
passo para criar programas
do mundo real. E isso não é realmente um programa
do mundo real, porque
faremos mais alguns exemplos do mundo
real nas próximas seções. Então, isso é apenas para
garantir que você aprendido bem os conceitos básicos do
Python Então, vamos começar com o próximo
vídeo. Te vejo lá.
50. Declaração de problema em Python: Oi, é Arditi, seu instrutor. Se você acompanhar os
vídeos anteriores do curso, isso significa que você aprende
os fundamentos do Python , que
são variáveis, tipos de dados, funções, condicionais
, loops e funções, condicionais
, loops Esse é o núcleo do Python. Seja qual for o aplicativo que
você criará, seja um script de ciência de dados um aplicativo da web ou algo que
automatize suas tarefas diárias, você quase sempre
precisará de todos esses fundamentos Antes de nos aprofundarmos recursos
mais avançados do
Python nesta seção, vamos
meditar sobre o que Por meditação, o que
quero dizer é pensar um pouco sobre esses fundamentos
que você aprendeu E a melhor maneira de
fazer isso é criar um programa que use todos os recursos
principais do Python Sem perder
mais tempo, deixe-me demonstrar o programa
que vamos criar Eu salvei o código em um script. Eu não vou
te mostrar o código imediatamente. Eu vou
te mostrar a saída. Então, quando eu executo o código, recebo uma mensagem
impressa, digo alguma coisa. Portanto, é um prompt que solicita a entrada do usuário. Digamos que o tempo
esteja bom hoje. Entre no programa e solicite novamente a entrada. Como está o clima? Lá só há
algumas nuvens aqui. Enter e agora, se você
quiser finalizar este programa, pressione a barra invertida, pressione Enter e
esta é a saída O que esse programa é
é que ele solicita informações. Você insere a entrada
repetidamente e , assim que a
entrada terminar com uma barra invertida, a barra invertida termina, o
programa será encerrado
e as frases digitadas serão exibidas em maiúsculas Então, a primeira letra
é maiúscula, e um ponto é adicionado a
esses tipos de frases, e um ponto de interrogação se
for uma pergunta como
esta aqui E o mesmo acontece com um período. E essa é a nossa sequência secreta. Então, é uma barra invertida d. Quando
o programa obtém essa string, isso significa
que é hora de
finalizar o programa e
obter o resultado Portanto, esse não é um dos
dez aplicativos do mundo real que prometo
criar neste curso. A primeira aplicação
vem mais tarde no curso, mas isso é só para praticar
o que você aprendeu até agora. Então, embora seja
um programa inútil, obviamente, quem
vai precisar disso, mas vai
te ajudar muito saber como usar as condições,
as funções
e os loops Então, por favor, faça isso
depois
que este vídeo terminar, o que eu gostaria que você
fizesse é dedicar algum tempo e pensar em
como você pode resolver, como você pode codificar este programa.
Agora você conhece a saída. Tente pensar e talvez
tente escrever algum código. Por que não? Eu não espero que você
resolva isso, na verdade. Ainda assim, se você se
colocar no modo de resolução de problemas e
ver minha solução nos vídeos a seguir, porque vou
mostrar o código passo a passo,
como criar isso. Então você vai
ter um momento incrível. E é aí que você memoriza melhor as coisas
porque, em sua mente, isso era algo que
você
precisava saber ao tentar entender
como fazer isso E então você vê como isso é feito, e então você aprende melhor. Então, sim, falarei com
você nos próximos vídeos.
51. Abordando o problema: Ótimo. Vamos continuar e
criar esse programa agora. Então, vamos dar uma outra olhada
na saída, porque quando
você cria um programa, você quer ter
uma visão muito clara de como
será a saída
e, em seguida, tentar dividir a
grande tarefa em tarefas menores. Então, por exemplo, digamos que esse programa esteja solicitando informações
do usuário repetidamente. E está recebendo algumas
sequências nesse formato de linha, sem ponto final com uma
letra minúscula no início E então, se o usuário
digitar a barra invertida d, o programa conhece essa string
e retorna as saídas Então, o que o programa está fazendo é capitalizar
essas sequências de caracteres Portanto, a primeira letra está em maiúscula e está adicionando um ponto
ou ponto de interrogação Agora, você vê que esta é uma lista
de frases aqui de frases. Mas, como eu disse, tente dividir a tarefa em tarefas
menores. Portanto, tente dividir a saída
em partes menores de saída. Nesse caso, não pense em como
gerar essa lista, mas pense em como obter
a saída mínima viável Nesse caso, é como obter uma string de linha como esta aqui e como
convertê-la nessa string. E a melhor maneira de fazer isso é usando uma função para definir sua própria função que obtém essa string e produz
essa aqui. Então, a primeira coisa é
criar uma função. Vamos fazer isso no próximo vídeo.
52. Construindo a função de criador: Então, vamos começar criando
uma função que transforma esse tipo de string
nesse formato Defina, vamos chamar
esse criador de frases. Então, ele faz frases
a partir de sequências de linhas. Vamos chamar as cordas de frases. Frase. Então, ele pega
uma frase e primeiro, você quer colocar
essa frase em maiúscula, certo? Então, talvez crie uma variável
dentro dessa função, chame-a de maiúscula
ou onde quiser, diga uma frase
e use o método de strings em
maiúsculas Enquanto isso, você pode usar seu shell
interativo Python para
testar métodos e ver como eles
funcionam enquanto você, ao mesmo tempo , cria uma
função em Então, por exemplo, digamos que eu queira capitalizar
essa string Primeiro, gostaria de
experimentar como o
método em maiúsculas funciona Agora tenho certeza de que primeira
letra está
em maiúscula, então tudo bem Não, queremos adicionar
para concatenar um ponto final ou um ponto de interrogação
a essas frases Mas isso depende. E então estamos
falando de uma condição aqui. O programa deve
decidir se deve colocar
um ponto final ou um ponto de interrogação
no final da frase. Então, vamos continuar e
criar a condição. Se frase. Então, como podemos
diferenciar perguntas e frases simples
que terminam com um ponto final Bem, pode haver maneiras
diferentes, então isso depende do programador e
do quão sofisticado
você deseja fazer isso Mas vamos manter as coisas simples. E digamos que as perguntas
são todas aquelas que começam com palavras
interrogativas como
como, por que e o quê E você pode verificar isso com, digamos que você
tenha uma frase, tipo, como você está de novo? Você pode usar o método
start with, que obtém uma tupla como entrada Então, uma tupla e dentro da ferramenta, você pode ter algumas sequências de caracteres verificar se a frase começa com alguma dessas cadeias
dentro dessa Então, vamos dizer como, o quê? E por quê. Então, isso voltará ser
verdade porque how are you começa com uma
dessas strings. Outro cenário, tipo, se o tempo estiver bom,
você vai ficar falso. Então, podemos fazer
uso disso e dizer se a
frase começa com Como? O que? E por quê? Você pode fazer isso, ou melhor ainda, seria pegar essa tupla e
salvá-la muito bem Vamos dizer interrogativos
e colocar isso aí. Então aqui você apenas
coloca a variável, e isso tornará o
código mais legível Então, se a frase começa
com interrogativas, o que queremos fazer nesse
caso é construir uma string Então, digamos que return a função
retornará essa string. Então, isso está em maiúsculas. Então, em maiúscula será a versão em maiúscula
da frase que o usuário digita
e, em seguida, queremos adicionar a ela um ponto de interrogação
exatamente como esse Então, isso será substituído por
maiúsculo por essa string, e isso adicionará um ponto de
interrogação a isso Então, isso acontecerá se a
frase começar com o retorno
de qualquer um dos interrogativos
. Nesse caso,
retornaremos uma frase com
um ponto com um ponto. Novamente, capitalizar é
o que colocamos aqui. Deixe-me demonstrar até
agora o que temos. Criador de frases. Então, queremos executar a
função, certo? Com uma palavra, com uma
frase. Como você está? Salve, execute. E então entendemos a frase
corretamente. Como você está? É isso mesmo. Agora
temos uma função que faz alguma coisa
e a faz bem. Vamos agora pensar
nos outros aspectos de um programa no próximo vídeo.
53. Construindo o loop: No vídeo anterior,
construímos essa função aqui, que recebe uma frase como entrada, então uma string, e se você
executar a função, ela retornará essa
versão da string. Agora, a saída
do programa que você está criando
nesta seção solicitará essas
frases
repetidamente na forma de entrada do usuário. Então, estamos falando sobre obter
informações do usuário. E como isso está acontecendo, repetidamente, temos uma dica aqui de que estamos
falando de um loop E como esse loop
, quando o usuário
insere uma barra invertida,
termina com essa string Isso significa que estamos falando
sobre um loop condicional, e isso nos faz
pensar em loops wile
porque os loops wile funcionam
com base Então, digamos que o loop Wile
seja executado o tempo todo, então ele solicitará a entrada do usuário Insira, diga alguma coisa, uma coluna e crie um espaço
ali só para decoração. Então, o que acontece se o usuário
inserir alguma entrada? Hm. Bem, primeiro, queremos
verificar essa entrada se a entrada do usuário é
realmente a string especial. Se for esse o caso,
queremos quebrar o ciclo. Senão. O que nós
queremos fazer? Caso contrário? Hm. Então você viu essas
frases lá. Pareciam uma lista. Então, foram vários deles. Isso significa que estamos falando sobre
ter vários itens. E quando você
pensa em muitos itens, você pensa em lista. Então, talvez queiramos
armazenar essas frases que o usuário insere em uma
lista. Como podemos fazer isso? Bem, podemos fazer isso começando com uma lista vazia
fora do loop. Então, o Python executará
a definição da função. Não precisamos mais
disso porque acabamos de usá-lo quando
testamos a função. Então, uma vez que a
definição da função é lida pelo Python, não
estamos chamando
a função aqui Vamos
criar uma lista vazia e, em seguida, iniciar o loop. O usuário
receberá uma mensagem. Se uma string inserida
pelo usuário for essa, vamos quebrar tudo. Então, o loop terminará, caso contrário, se essa string não for a
que o usuário inseriu, caso contrário, queremos acrescentar a string do usuário, para
que
o usuário insira
na lista de resultados Então, no final do
loop, de forma não intencional aqui, isso ocorre após o término do
loop, que acontece somente quando
a quebra Então, quando o usuário inserir isso, após o término do loop, teremos uma
lista com muitos dados Portanto, imprima os resultados. Como você está Se é bom
e é isso que temos. Ok, eu sei. Essas são as sequências de caracteres que
o usuário inseriu Então, como podemos obter
as cordas reais? Bem, isso é muito fácil. Aqui estamos anexando à lista
as sequências de linhas
que o usuário inseriu Mas temos uma função que pode converter essas sequências
em frases Vamos usar essa
função. acrescentar a saída
da função Para obter a saída, você
precisa chamar a função. Para chamar a função, você precisa de
uma entrada para a função. A entrada aqui é
a entrada do usuário. Assim mesmo, execute novamente. E obtivemos essa saída
conforme esperávamos. Portanto, estamos fazendo um bom progresso. No entanto, não queremos
uma saída mínima aqui. Queremos apenas uma saída de string sem esses colchetes. Então, como podemos realmente
mesclar ou concatenar todas essas strings para criar
um único texto como uma Vamos fazer isso no próximo vídeo.
54. Tornando a saída fácil de usar: Portanto, para concalar todas as strings
em uma única string, você pode usar o
método join das Então, esse é um método de cordas.
Aqui está uma sequência de caracteres. Por exemplo, deixe-me
colocar essa string. É só um traço, mas ainda
é uma corda. Esse método conjunto
obtém uma lista como entrada. Como você está Bom, bom. Então essa é uma lista de sequências de caracteres. Se você executar isso,
esses itens
da lista serão unidos por essa string aqui
que você declara aqui Então, se você adicionar mais para
deixar mais claro, obterá um traço
unindo todas essas strings, esses itens da lista, o primeiro item, o segundo item, o terceiro
item Podemos fazer uso
disso aqui dizendo: junte-se à lista de resultados. Salve essa execução. O tempo está bom, então, como você
está? O tempo está bom? Temos um pequeno problema aqui. Provavelmente precisamos de um espaço
entre essas cordas. Então, podemos fazer isso com muita facilidade. Você pode simplesmente colocar um
espaço na string e executar novamente. E esses são os resultados que esperávamos
para o nosso programa Então é assim que você cria esse
programa nesta seção. Você define uma função em cima do seu script que faz alguma coisa
e a faz muito bem. Então você itera,
você faz um loop. Você solicita que o usuário
insira informações em cada iteração. Verifique imediatamente se a
entrada foi a string. Você não quer acrescentar primeiro e depois verificar se a
entrada do usuário foi igual a Portanto, você não
quer ter isso como a primeira condição,
porque se você adicionar isso, isso significa
que se o
usuário inserir aqui, final da
barra invertida, e
depois disso, você tiver os resultados anexados,
essa string final da barra invertida
será anexada string final da barra invertida será Você não quer isso.
Portanto, você precisa verificar imediatamente se a
string é uma barra invertida d e quebrar o
programa, se for esse o caso, caso contrário, faça isso Portanto, armazene a saída
do criador de frases
na lista de resultados. Por fim, basta concatenar os itens dessa
lista e imprimir os resultados, que
é esse aqui Espero que este programa tenha
sido útil para você e que você tenha aprendido algo
a juntar peças. Nos próximos vídeos,
aprenderemos algumas
coisas mais avançadas sobre Python
e, depois disso,
veremos o primeiro aplicativo do
mundo real No próximo aplicativo
depois desse e no próximo, então você
terá dez aplicativos. E eu sei que se você levar
esses aplicativos a sério, você será
um bom programador Desejo que você continue gostando dos meus ensinamentos
nos próximos vídeos.
55. Introdução à compreensão da lista: Oi, bem vindo de volta.
Nesta seção, você aprenderá sobre as
compreensões de listas Agora, as compreensões da lista
são semelhantes a quatro loops. A principal diferença é que,
em uma compreensão de lista, você escreve o código
em uma única linha E com quatro voltas, você tem várias linhas Além disso, as compreensões de listas são um caso especial
de quatro loops Eles são usados quando você
deseja criar uma lista. Portanto, a compreensão de uma lista é um
loop que constrói uma lista. Você
também pode construir uma lista com quatro loops,
mas, como eu disse, as
compreensões da lista são apenas uma linha Isso torna o código mais
elegante, mais pitônico. Então, vamos aprender sobre as compreensões de
listas nesta seção
usando exemplos, consulte
56. Uma compreensão simples de lista: Ao longo da minha experiência
trabalhando com grandes conjuntos de dados, notei algumas técnicas que
os institutos de coleta de dados usam para economizar armazenamento e fazer seus dados tenham menos
espaço nos discos do computador Uma técnica comum é
não usar decimais. Por exemplo, se você
pesquisar dados de temperatura, não verá as temperaturas
reais digamos
que
sejam Celsius, não as verá assim, mas as verá
sem os pontos, pois isso economizará armazenamento
nos servidores Então, um caractere a menos, isso significa alguns bytes a menos. Portanto, seu dever como
programador é realmente
dividir todos esses valores por dez para
obter os dados reais Então, digamos que esses dados
estavam em alguns arquivos de texto e abrimos esses
dados com Python, e o curso
realmente aborda como
gerenciar a abertura de arquivos de
texto em Python Mas vamos pular
essa parte por enquanto. Então, digamos que os
carregamos como uma lista aqui. Agora, queremos realmente
dividir por dez, qualquer um deles. Então, como você
faz isso? Bem, uma técnica é
iterar sobre TAMs. Então, para temperatura em temperaturas, e em cada iteração, você quer fazer Temperatura dividida por dez. Mas onde armazenamos
essa temperatura dividida por dez? Bem, podemos
armazená-lo em uma nova lista. Digamos, novos funcionários. Essa é uma lista vazia por enquanto. Então, o loop percorrerá essa lista e, em cada iteração, anexaremos
esse valor aos novos TEMs Então, acrescente esse valor. Isso parece bom. E
depois imprima novos TEMs. Deixe-me seguir em frente
e executar isso. Portanto, essa é a saída desejada. Agora, isso está muito correto, mas há uma maneira mais simples de fazer isso em apenas uma
linha de código Python E isso é usando compreensão
de listas.
É assim. Você não precisa criar
uma lista vazia porque
uma lista será
gerada dinamicamente,
você diria, Temp dividido por dez,
quatro temp em temps. Imprima novas temperaturas para
ver o que obtemos, executamos e você obterá
exatamente a mesma saída Então, isso é uma compreensão da lista. É uma forma de criar uma lista sem precisar
criar um loop de quatro,
um loop padrão de quatro,
porque na verdade
temos um loop de
quatro em linha aqui Então, o que está acontecendo
aqui é que
temos uma iteração aqui
e, em cada iteração, vamos
armazenar esse valor na lista
da nova lista TEMS Então, isso é como dizer a temperatura da
loja dividida por dez, mas o Python dirá: Ok
, mas o que é TEM?
É uma nova variável. Não sabemos, não o
definimos em nenhum lugar. E então dizemos: Bem,
para temperatura em TEMs, é uma variável
de TEMs Então é assim que você cria uma lista com esses valores para cada um
dos valores do TAMS. Essa é uma compreensão da lista.
57. Compreensão de lista com uma condição If: Agora, se você trabalhou com observações como observações
meteorológicas,
por exemplo, temperaturas, você deve ter notado
que às vezes há esses tipos de valores
nesses dados, que significa que não houve valor,
nenhum valor válido detectado
para essa observação, e as organizações usam esse valor
especial para significar que não há dados. Então, se quisermos usar uma compreensão de lista em que
dividimos por dez todos esses valores, devemos ter cuidado para não
dividir esse valor por dez Queremos ignorar
isso. Para isso, precisamos de uma condicional I dentro da compreensão
da lista.
Nós podemos fazer isso assim. Portanto, crie uma nova variável onde você armazenará a nova lista. E, novamente, digamos que a temperatura é dividida por dez para a
temperatura em Se a temperatura for diferente, por exemplo, menos 9999. Imprima novos TEMs, execute
no terminal e obteremos o resultado esperado Então, isso é exatamente como o loop
simples que vimos
no vídeo anterior com a adição
da condicional I. Então isso é condicional. Estamos verificando se a temperatura é
diferente de menos 9999.
58. Compreensão de lista com uma condição “if-else” +: Anteriormente, criamos
essa compreensão de lista, que itera
sobre essa lista e divide por dez cada
item dessa lista, ignorando somente se a temperatura for diferente de menos 9999 Então, o que acontece se a temperatura
for igual a esse número? Bem, o loop, a compreensão da
lista
ignorará esse valor, como
você viu na saída Então essa foi a saída. E se você quiser colocar
outro valor em vez disso? Digamos que você queira colocar zero em vez desse número negativo. Nesse caso, se
você acha que pode simplesmente fazer sexo aqui, zero, tente isso, você estaria errado porque isso
produzirá um erro de sintaxe Quando você tem um Is dentro
da compreensão da lista, a ordem dos componentes
é um pouco diferente Você precisa obter as
quatro temperaturas em temperaturas, então o loop deve estar
após a condicional, desse
jeito Se você executar isso,
obterá os resultados esperados. Então você vê o zero lá
em vez de menos 9999. Então, a compreensão da lista
desta vez é assim. Dê-me a temperatura dividida por dez, somente se a temperatura for
diferente desse número, caso
contrário, me dê zero
para a temperatura em temperaturas. Portanto, lembre-se sempre de
que, se você tiver que fazer uma compreensão de Is dentro da
lista, o loop for vai para
o final dessa forma
59. Mais sobre funções: Bem-vindo de volta a uma nova seção. Você aprende mais sobre as
funções nesses vídeos. Você aprendeu como definir uma função e como
chamá-la anteriormente no curso. Mas aqui, você aprende alguns
conceitos mais avançados sobre funções, e você realmente
precisa aprender sobre funções porque elas são alguns blocos de código muito
fundamentais. Então você escreve seus programas usando funções que
fazem certas coisas. Então, vamos aprender mais sobre funções. Nos
vemos no próximo vídeo.
60. Funções com vários argumentos: Talvez você se lembre
da função len e da função is instance. A função len usa apenas um argumento e a função de
posição você,
portanto, usa dois argumentos Você também pode ver isso
na documentação de ajuda. Obj, esse é o único
argumento que o comprimento exige. E se você observar a posição, ela obterá obj e
classe ou Então, algumas funções precisam de um
argumento, outras precisam de dois. Agora, essas duas funções foram
criadas em funções Python. Então, a equipe de desenvolvedores do Python
projetou essas funções. Então, como podemos criar
nossas próprias funções com vários
argumentos? Muito fácil. Digamos que queremos que uma
função de área que calcule a área de um retângulo
tenha mais de um argumento, basta separar
os parâmetros com uma Então, parâmetro e argumento. Um parâmetro é o que nos referimos a essas variáveis quando definimos
a função
e, quando chamamos a
função como aqui, nos referimos a elas como argumentos
no site de chamada da função, por assim dizer. Então, retorne A vezes B que retornará a
área de um retângulo E, claro, quando
você chama a função, você simplesmente passa valores
para esses argumentos. E você obtém a
saída do valor corretamente.
61. Parâmetros padrão e não padrão, argumentos da palavra-chave e não palavra-chave: Em Python, os argumentos podem
ser principalmente de dois tipos. Temos argumentos que não são de palavras-chave e temos argumentos de palavras-chave. Esses dois aqui não são argumentos de
palavras-chave. Eles não têm a
palavra-chave anexada a eles. No entanto, se fosse esse o caso, as coisas ainda
funcionariam da mesma forma. Mas esses dois agora seriam
chamados de argumentos de palavras-chave. Argumentos sem palavra-chave,
que são este um, dois, também são
chamados de argumentos posicionais Eles são chamados de argumentos
posicionais porque a forma como você comunica esses dois argumentos à definição
da função
é baseada na posição Então, a primeira posição,
quatro, vale para A e a
segunda cinco, para B. Então, argumentos posicionais e sem
palavras-chave são a mesma coisa se
fossem argumentos de palavras-chave A posição, na verdade,
não importa. Assim, você pode passar o valor de B como primeiro argumento,
se quiser, e quatro irão para B
e cinco para A. Então, contanto que você os passe dessa
forma, argumentos de palavra-chave, a posição não importa, você ainda obterá
a mesma saída. Agora, também temos parâmetros
padrão,
não parâmetros de argumentos. Isso significa
que um parâmetro pode ter um
valor padrão como esse, o que significa que você não
precisa especificar o valor desse argumento ao
chamar a função. Então, atribuímos cinco a A
e B é seis por padrão. Portanto, obtemos 30. A não precisa necessariamente
ser um argumento do Kord. Também pode ser um argumento
não curdo aqui na chamada da função, você ainda obtém a mesma saída Claro, você também pode
atribuir valores diferentes a B. Simplesmente assim. E, por fim, você também pode deixar assim para argumentos
que não sejam de palavras-chave e ainda obter a
saída corretamente Algo que você
deve saber é que um parâmetro padrão não pode estar antes dos parâmetros não
padrão. Se você executar isso,
receberá um erro. Diz que o argumento não padrão
segue o argumento padrão. Portanto, o não
padrão segue o argumento padrão, que é A. E acho que são algumas informações
muito boas sobre argumentos
e parâmetros de funções.
62. Funções com um número arbitrário de argumentos que não são palavras-chave: Algumas funções em Python
, como a função len, recebem apenas um argumento Se você tentar passar
mais de um, ele retornará um erro dizendo que é necessário
exatamente um argumento. Algumas outras funções
, como instance, usam exatamente dois argumentos. Segundo, se você tentar passar três argumentos ou apenas
um, receberá um erro. Algumas outras funções, como print, recebem um
número indefinido de argumentos, e você viu como podemos
definir essas funções com apenas um ou mais argumentos, mas eu ainda não
expliquei como criar esses
tipos de Vamos criar um.
Defina, vamos chamar essa média para calcular a
média de uma série de números. Então imagine que essa
fosse nossa função. Queremos passar
quantos itens quisermos. Na verdade, criamos uma função
média anteriormente, que poderíamos chamar assim, mas ela ainda tinha
apenas um argumento, então era uma lista como essa. Ainda é um
objeto, um argumento. Nesse caso, não
queremos passar uma lista. Queremos passar
quantos itens quisermos. Então Min e então o que você faz, você usa asterisco e depois arcos Na verdade, isso pode ser qualquer coisa depois do asterisco. Qualquer nome de variável funcionaria, mas é uma boa prática porque todo programador usa arcos Portanto, é bom que você use arcos para que outras pessoas possam
ler seu código E você também se acostuma
a ler o
código de outras pessoas usando arcos o tempo todo Você sabe do que os outros
estão falando. Agora, deixe-me mostrar
uma coisa antes de aplicar o algoritmo que
calcula a média Arcos de retorno. Vamos
ver o que temos aqui. Agora deixe-me chamar a função. Então, um, três, você
também pode passar cordas, o que quiser, desse jeito E o que você obtém é, na verdade um poste superior contendo
todos os itens, todos os objetos que você
passou na função coal. Então, na verdade, é um poste superior. Então, o que podemos fazer
com uma tupla onde
podemos calcular a soma dos arcos Portanto, arcos são uma variável, não arcos de asterisco, divididos
pelo comprimento dos Nesse caso, ocorreria um erro porque temos A lá. Portanto, remova A de
lá e tente novamente. A é uma string, então
não faz sentido ter
a média de uma string. Então, acabamos de criar
uma função apenas com um número arbitrário de argumentos de
palavra-chave conhecidos Eu digo apenas porque você não pode ter
argumentos de palavras-chave aqui. Você vê que X igual a três não
funcionaria aqui. Se você quiser argumentos de palavras-chave
, assista ao próximo vídeo.
63. Funções com um número arbitrário de argumentos de palavra-chave +: Portanto, essa função aqui que construímos na aula
anterior aceitou um número arbitrário de argumentos que não
eram de palavras-chave Para argumentos de palavras-chave,
você precisa adicionar
outro asterisco ao asterisco e depois passar o nome da variável,
mas os arcos Kew são uma mas os arcos Kew Então, por favor, use isso
mesmo que você não precise e depois veja o que é KeyWrc, que significa palavras-chave args Se você tentar chamar
a função lá, obteremos um erro
porque se trata uma função com apenas um número
arbitrário de argumentos
de palavra-chave Portanto, todos esses argumentos devem ser nomeados como argumentos, argumentos palavras-chave, tendo a
palavra-chave, o nome do argumento. B e C gostam disso e executam
e você obtém um dicionário. O dicionário terá
itens em que cada chave será o nome dos
argumentos que você usou ao chamar
a função, e o valor será o
valor desse argumento. Funções com um número
arbitrário argumentos
de palavra-chave são mais facilmente usadas do que funções com um número arbitrário de argumentos que
não sejam de palavras-chave, como a função de impressão
que eu disse anteriormente, na
qual você pode simplesmente
passar o mesmo número de argumentos sem uma palavra-chave. Então
aí está.
64. Introdução ao processamento de arquivos: Você aprendeu sobre os
diferentes tipos de dados que podem ser usados em Python Por exemplo, você aprendeu
que pode ter sequências de caracteres,
listas e números e assim por diante E armazenamos esses tipos de
dados em variáveis. Então, uma variável foi associada
a uma string, por exemplo. O problema com isso
é que você está armazenando dados dentro do seu programa Python Se você quiser
realmente armazenar a hora dos pontos,
por exemplo, você deseja
armazenar previsões do tempo, você não quer escrever esses valores de previsão em sequências de caracteres ou números
em seu script PY de pontos Em vez disso, o que você quer fazer é ter esses dados em arquivos
externos,
por exemplo, arquivos de texto ou
arquivos CRC,
ou mais tarde, aprender
sobre bancos de dados, como armazenar dados em
bancos de dados e obter esses dados via Python
e processá-los em Python Mas nesta seção, você aprenderá
sobre como armazenar dados em arquivos de
texto e como obter
dados de arquivos de texto, como criar
arquivos de texto com Python, como ler os dados arquivos
de texto e
processá-los com Python Então esse é um
conceito muito, muito crucial de programação. Então esse é um conceito
avançado, e você aprende isso
nesta seção. Então divirta-se e nos
vemos no próximo vídeo.
65. Processando arquivos com Python: Aqui no meu desktop, eu tenho um arquivo de texto,
sem ponto TXT Se eu clicar duas vezes nele, ele
abrirá com um
dos editores de texto que eu
instalei no meu computador O editor de texto é um programa
e, nesse programa, eu posso ler esse arquivo, para que eu possa ler essas linhas. Eu posso escrever mais linhas aqui, posso copiar e colar, multiplicá-las para ter muitas dessas linhas
aqui neste arquivo de texto, e posso fazer tudo isso com
esse programa editor de texto que por acaso tenho
aqui no meu computador Agora podemos fazer o
mesmo usando Python, que significa que podemos ler
o arquivo com Python, podemos escrever mais
conteúdo Podemos multiplicar isso e podemos realmente fazer
isso de forma muito eficiente Se eu tivesse que multiplicar isso, teria que copiá-los e
colá-los 1.000 vezes, talvez Mas com o Python, você pode
fazer isso com muita facilidade. Vamos fazer a mesma coisa com o Python e começar com a
leitura do arquivo Então, como ler um
arquivo com Python. Eu vou te mostrar isso
no próximo vídeo.
66. Lendo texto de um arquivo +: Então é assim que você abre um arquivo de texto com seu programa editor de texto
favorito, e deixe-me mostrar como
fazer o mesmo com o Python Claro, a experiência
é um pouco diferente. Não se trata de
clicar duas vezes no arquivo, trata-se de escrever código. Então, quando você abre esse arquivo
com seu editor de texto, o
que acontece é que algum objeto é criado na
memória temporária do seu computador na RAM. Então, o arquivo estava
no disco rígido. Quando você o abre, ele é criado como algum tipo de
objeto na RAM. A mesma coisa acontece com o Python. Nesse caso, talvez você
queira armazenar esse objeto, aquele objeto de arquivo que você
vai criar em Python Talvez você queira
armazená-lo em uma variável. Vamos chamá-lo de meu arquivo. A função de abertura é o que
cria objetos de arquivo. E como é uma função, ela receberá um argumento. Agora, esse arquivo básico de pontos py está no mesmo diretório com
o arquivo TXT fruit dot Faça o download do arquivo TXT de
frutas com pontos, que se parece com este.
Deixe-me dividi-lo aqui. Você pode arrastar um arquivo ao lado aqui para ter duas janelas no editor de código do
Visual Studio, mas você pode fazer isso
mesmo em outros editores, tenho certeza, se estiver
usando outros editores Por enquanto, deixe-o na mesma
pasta com Basics dot py Depois de fazer isso,
a entrada para essa função é o
caminho para o arquivo. Nesse caso,
seria fruit dot TXT,
já que o arquivo fruit DTX está
no mesmo diretório
com Basics Não, para ler o
conteúdo de fruits DL TXT em seu editor de texto,
como fizemos graficamente, basta
clicar duas vezes no arquivo e ver o conteúdo na interface do editor de texto Em Python, as coisas são um pouco mais, elas precisam ser
um pouco mais Você precisa especificar o que
deseja fazer porque, neste arquivo, acabamos de criar
um objeto de arquivo. Se executarmos isso,
nada vai acontecer. Um objeto será
criado na memória temporária e, quando a execução
do programa terminar, o objeto será
excluído da memória. Assim como quando você abre o arquivo de texto com o
editor de texto e depois o fecha, objeto, o objeto do arquivo é excluído da memória
temporária. Se você quiser ler, o que
você pode querer fazer é imprimir meu arquivo. Agora, meu arquivo tem um método de leitura. Esse é o objeto de arquivo, que tem um método de leitura. Ele não aceita nenhum argumento, então deixe assim, salve, execute e aqui você
obtém a saída do arquivo. É assim que você lê
um arquivo em Python.
67. Cursor de arquivo: Agora, algo que você deve
saber é o conceito do cursor. O que acontece aqui é
que você cria um arquivo, um objeto de arquivo é criado
e, quando você aplica
os métodos de leitura, antes de aplicar o método de leitura, o cursor fica no primeiro caractere
do arquivo de texto. Quando você aplica o método de leitura, o cursor vai até o
final do arquivo de texto. Então, agora que o
método de leitura foi aplicado, o cursor fica aqui. Se você aplicar outra operação de
leitura como essa, salve e execute. O que vai acontecer
é que talvez você estivesse esperando que essas linhas
fossem impressas duas vezes Em vez disso, o que acontece é que
eles são impressos
uma vez
e, em seguida, isso é apenas uma string vazia porque o cursor após a
primeira execução da leitura estava neste ponto
e abaixo desse ponto, não
há nada, então você obtém
essa string vazia lá. O que você pode fazer é se quiser imprimir o
conteúdo várias vezes, o que você pode fazer é salvar o conteúdo em uma
variável e depois imprimir o conteúdo quantas vezes quiser e você obterá a saída duas vezes,
como pode ver aqui. Isso porque o método read foi executado apenas uma vez aqui. Isso é algo
que você deve saber.
68. Como fechar um arquivo: Quando você cria um objeto de arquivo, um objeto de arquivo é
criado na RAM e permanecerá lá até a execução
do seu programa. Portanto, pode
ser uma boa ideia realmente fechar o arquivo
para que ele seja excluído
da memória quando você
terminar de processá-lo. Por exemplo, neste script, você está criando
o objeto de arquivo e aqui você está
lendo o conteúdo
desse objeto de arquivo e
armazenando-o como uma string. Então, meu arquivo Read gera uma string, que representa o
texto do arquivo. Essa string será armazenada
nessa variável de conteúdo. Então, terminei de
processar o arquivo
e, depois disso, posso processar a string que salvei nessa variável. Portanto, faz sentido
aplicar meu arquivo dot close. Mesmo que isso não seja
estritamente obrigatório
, é uma boa ideia usá-lo. Portanto, se você fizer isso,
ainda obterá a saída correta. Algo que você deve
saber agora é que, se você aplicar meu arquivo que foi lido novamente depois de
fechar o arquivo, você receberá um erro. Ele diz que essa
operação está sendo executada em um arquivo fechado,
então você não pode fazer isso. Então, isso é como criar
um arquivo e fechá-lo, mas há uma
maneira melhor de fazer tudo isso. Eu vou te mostrar isso
no próximo vídeo.
69. Abrindo arquivos usando: A melhor maneira de fazer isso
para criar o arquivo, ler o conteúdo e fechar o arquivo é usar o gerenciador
Com contatos. A maneira de fazer isso é, novamente, usar a função open, que funciona da mesma forma que o TXT Agora, você diz “myfile”. Meu arquivo é apenas uma variável
e, em seguida, você precisa recuar. Então, o que você fez
aqui foi criar esse myfile igual a open fruits dot TXT,
exatamente da mesma A diferença aqui é que
você escreverá tudo o que tem a ver com o
processamento desse objeto de arquivo. Você terá que escrever
tudo sob essa linha, recuada abaixo
dessa linha como um bloco Isso tornará as coisas
mais organizadas. Então, neste caso, o que
queremos fazer com o arquivo é
lê-lo assim. Depois de terminar, basta fechar
o recuo Portanto, as próximas linhas
não serão recuadas, como a linha de impressão. Veja o que vai acontecer aqui. Essa é a saída esperada
do conteúdo impresso. Mesmo se você excluir isso, para
não confundi-lo,
novamente, você obterá a mesma saída Portanto, essa saída é
, na verdade, dessa linha. E fechar o arquivo
não é necessário aqui porque o gerenciador de contexto With
aplicará o
método close implicitamente Portanto, seu arquivo será fechado
quando esse bloco terminar. Então, por favor, use o With contact manager, e é
assim que você faz.
70. Usando filearpaths diferentes: Até agora, nosso arquivo PY básico e nosso arquivo TXT fruits dot
estavam no mesmo diretório, na mesma pasta
que nos permitia escrever apenas o nome do
arquivo no arquivo PY básico No entanto, se as frutas desse arquivo
TXT estavam, por exemplo, dentro desse outro diretório, então eu apenas movi frutas
TXT para dentro Fils é uma pasta que está no mesmo diretório
com Basics dot PY Então, o básico é PY
na mesma pasta com
scripts com arquivos e frutas dentro dos arquivos Nesse caso, se você
executar o arquivo PY básico, receberá um erro de
arquivo não encontrado Esse arquivo ou diretório não existe, fruits dot TXT.
E isso é verdade. Não há frutas DTXT na pasta onde está
o Dt PY
básico O que você precisa fazer é especificar o caminho completo
para o arquivo em relação
ao arquivo em relação
ao ponto básico PY, ou seja,
arquivos, barra, frutas, ponto Execute isso e
as coisas funcionarão.
71. Como escrever texto em um arquivo: Vamos dar uma olhada na documentação de
ajuda do open. E você verá que
a função open recebe vários argumentos. Os dois primeiros são os
mais importantes. Já usamos file, que é o caminho
para o objeto do arquivo. E para esses outros, usamos seus valores padrão, que significa que para os modos, usamos R, R significa ler. Portanto, esse código aqui
é o mesmo que esse. Então você obtém a mesma saída.
Quais você deve usar? Bem, para tornar o código mais simples
e curto, tudo bem. Para tornar o código mais explícito
em termos de factibilidade para que outras pessoas possam ver que se
trata de ler o código
, você usaria De qualquer forma, está bem. Agora, o que você pode
usar para escrever? Para escrever, você
usaria W para escrever. E deixe-me criar um novo arquivo na
pasta de arquivos. Chame isso de vegetais. Portanto, um arquivo de vegetais não existe atualmente na
minha pasta de arquivos. Ele será criado
pela função aberta. E então, nesse arquivo vazio, vamos escrever
algo no Tomato. Obviamente, a variável de conteúdo
não faz sentido aqui porque não estamos buscando
alguns dados do arquivo Estamos apenas escrevendo lá. Então, vamos mantê-lo
assim, salvá-lo. Execute e um vegetal, o arquivo TXT foi criado no meu computador com um fio
de tomate lá Deixe-me colocá-lo aqui. Portanto, o método de leitura
procura um arquivo existente. O método correto
cria um novo arquivo, e devo avisar
que, se o arquivo existir,
como neste caso, frutifica
que o Tix está lá Se for esse o caso, Python substituirá
o Então, se você abrir
frutas DTixti agora, verá que tem esse
novo conteúdo do Portanto, o
conteúdo existente é descartado. Como podemos escrever mais linhas? Bem, você precisa usar a string especial de
barra invertida N, que cria linhas de quebra Cebola, execute. Então, isso é frutas TXT. E você obtém essas três
linhas como esperávamos. Algo que você deve saber é que você pode aplicar mais de
um método ao arquivo aberto. Vamos escrever alho aqui. Agora, intencionalmente, eu
não fiz nada que eu
deveria fazer para mostrar a
vocês o que acontece Então, o gaélico foi imediatamente colocado depois da cebola
porque
não havia espaço ou um operador N de barra invertida Se eu colocasse um espaço
aqui, você, é claro, obteria um espaço entre
cebola e gaélico Mas o que você quer,
em vez disso, é que depois de cada linha escrita, você queira uma barra invertida
N. E, nesse caso, você obteria a saída correta Então agora você
provavelmente está se perguntando,
bem, eu tenho essa
fruta que o Tixifle Não quero sobrescrevê-lo. Como posso realmente adicionar outra linha abaixo
dessas linhas existentes? Eu vou te mostrar como fazer
isso no próximo vídeo.
72. Anexar texto a um arquivo existente +: Ok, então eu tenho essas frutas
naquele arquivo CX aqui, que tem essas quatro linhas
que não são frutas de qualquer maneira, mas você entendeu É texto. Queremos adicionar mais
duas linhas a essas frutas
existentes nesse arquivo CX Não sabemos o que está
lá no momento. Se você olhar a
documentação aberta e rolar para baixo, verá aqui que é possível passar modos diferentes
neste argumento aqui. Então, o que já usamos, usamos W, e então você tem X. Se você usa X e tenta
escrever, digamos quiabo Se você executar isso, ele
dirá que o arquivo existe. Portanto, ao contrário do modo W, que sobrescreve um arquivo, X não substituirá o
arquivo se o arquivo existir No entanto, ele não pode acrescentar conteúdo a um arquivo existente porque diz que
o arquivo Portanto, pulamos para o
próximo modo, que é A. Você vê que o Okra foi
adicionado lá, é claro, com um pequeno problema
porque não havia uma linha de tijolos aqui
no arquivo de texto existente Essas são algumas informações que
você deve saber, e se você sabe que não
há uma linha de tijolos, então você precisa
me deixar dizer este arquivo de texto, então você precisa adicionar uma linha de quebra lá para
obter a saída correta. Sempre que você adicionar uma nova linha, precisará adicionar uma linha de
tijolos na frente Agora, que tal
ler esse conteúdo? Talvez salve-o em uma variável
e imprima o conteúdo. Será que vai funcionar? Eu acho que não. Diz que a operação não
é suportada. O arquivo não está legível. É A, que serve para anexar. Se você quiser escrever e
ler ao mesmo tempo, adicione um sinal positivo. Assim mesmo. Executar.
Você obtém uma saída vazia. Por quê? Por causa do cursor. Então o que aconteceu é que quando adicionamos a linha Oca lá, então no início, você criou o
arquivo aqui neste momento, o cursor está aqui, ok? Em seguida, você grava o arquivo. Nessa linha, o cursor
vai até o final do arquivo. Então, quando você lê agora, você lê o que
resta abaixo da última
linha, o que não é nada. O que você pode fazer é meu arquivo, Sk, aplicar um método Sk para colocar o cursor na posição
zero novamente. Nesse caso, o cursor
vai até o final. Ele voltará para a
posição zero com esta linha
e, em seguida, você lerá
tudo de lá para baixo para obter
a saída correta.
73. Módulos incorporados em Python: Se você seguir as
seções anteriores do curso, terá percorrido um longo caminho. Então, agora você conhece os
fundamentos do Python. Você sabe como resolver problemas
fundamentais. Por exemplo,
digamos que você queira o número de caracteres
da string. Então você tem métodos e funções que você pode usar. Então, para métodos, você pode
pesquisar com deer SDR, você verá vários métodos aqui que podem
ser aplicados a strings
e, em seguida, você pode ver
funções incorporadas em funções Por exemplo, os métodos n
seriam úteis aqui. Ele retornaria o
número de caracteres para a string Pi Pi Pi,
que é seis. Agora, tudo isso aqui. Então, essas funções e
os métodos de string estão todos incorporados. Portanto, esses são métodos e funções
escritos dentro do software Python que você baixa e
instala Esse software é
escrito em linguagem C. Portanto, esses métodos e funções também são
escritos na linguagem C. E, como você pode ver,
esses nomes aqui estão disponíveis imediatamente em
seu interpretador Python Isso significa que eles estão embutidos. Eles estão dentro
desse intérprete e você pode simplesmente chamá-los
sem importá-los Agora, e se tivéssemos
outros problemas, como, digamos, você vê
o roteiro aqui. O que esse script está
fazendo é um loop. É um loop de tempo.
Então, embora seja verdade, significa
que funcionará para sempre. Então, o que ele faz é
ler esse arquivo, vegetale dot TXT
no diretório de arquivos, que por acaso está
no mesmo diretório
com o ponto pi básico Então esse é o caminho do arquivo. E esse arquivo de texto
contém uma string. E então eu estou lendo
sob essa variável, e estou imprimindo
o conteúdo aqui. Então, se eu executar esse arquivo, você
imprimirá o conteúdo a cada fração
de segundo, dependendo
da velocidade do processador e da velocidade do processador do
computador. Agora, e se não quisermos que isso aconteça
a cada
fração de segundo? E se você quiser ler o
conteúdo a cada 10 segundos? Deixe-me interromper
isso com o Controle C. Você logo perceberá
que não tem nenhuma função embutida
que faça isso implemente algum tipo de
método de sono em seu script Portanto, não há nenhuma função que
você possa usar imediatamente. Nesse caso, talvez você queira
procurar módulos integrados. Para fazer isso,
use essa sintaxe. Importe CS, que significa
sistema e, em seguida, CS embutido em nomes de módulos. E aqui você obterá
uma lista de módulos, módulos integrados, ou
seja, módulos que são
incorporados novamente
no software Python Então, vamos usar uma dessas vezes. A forma como você o usa é
importando o nome do módulo. Então, novamente, você pode usar o DR para ver o que você tem
para esse módulo. Por exemplo, aqui você
verá que temos um método de sono. Use a ajuda para ver como usar
esse método específico. Então, diz que recebe
o segundo como argumento. Então, vamos tentar. T isso é dormir. Digamos que três,
um, dois, três. Então, em quanto tempo esse
sono ocorre, a execução
do script é interrompida por um determinado período de
segundos, três, nesse caso Isso significa que podemos implementar
isso no script. É uma boa prática
importar módulos na
primeira linha do script. E então use esse módulo em seu script
sempre que precisar. Nesse caso, o que
queremos fazer é supor que esse vegetal
que é o arquivo TX esteja sendo gerado em nosso servidor a
cada 10 segundos. Então, digamos que um software
no servidor esteja obtendo
esses dados de algum lugar e escrevendo um novo
conteúdo a cada 10 segundos. Por exemplo, agora é tomate, depois vai
ser alho por 10 segundos. Depois disso,
seria cebola e assim por diante. Então, estamos recebendo novos
conteúdos a cada 10 segundos. Então, queremos imprimir
o conteúdo do arquivo
e, em seguida, fazer com que a lista de
execução dure 10 segundos. Agora vou
salvar o script, ir até a
linha de comando e executá-lo. Então você pega tomate imediatamente. Agora, se eu mudar isso para onion, digamos que o software
tenha alterado e salve, clique em Salvar. A cebola foi impressa
lá depois de 10 segundos. Se eu mudar para alho, economize. Espere, espere alguns segundos. O alho está impresso lá fora. Então, a cada 10 segundos, o script busca os dados
dos vegetais que fazem o CXC e imprime em
uma linha Então, controle C para interrompê-lo. É assim que você usa um módulo. Agora, nem tudo está incorporado em seu software
interpretador de Python Algumas coisas, na verdade,
muitas delas vêm em uma forma diferente, que vou explicar na próxima palestra
74. Módulos Python padrão: Anteriormente, você aprendeu que era possível obter uma lista de módulos
integrados em Python usando nomes de módulos
integrados em C Como exemplo,
usamos o módulo time, que congelaria a execução do
script por um determinado
período de segundos. Agora, deixe-me te mostrar uma coisa. Vou executar um script. A
cebola será impressa porque está lá nos
vegetais aquele arquivo CXT No entanto, se eu
excluir esse arquivo agora, você verá que na próxima vez que o script verificar
os arquivos,
vegetais pontuam o caminho TXT Então, esse é um caminho de arquivo. Isso gerará um
erro de arquivo de erro não encontrado, nenhum arquivo ou diretório desse tipo. Então imagine que você tinha esse
programa rodando em um servidor 24 horas
por dia, 7 dias por semana e por algum motivo o software que estava ,
o software que estava
gerando esses
arquivos, em algum momento ,
ele não gera o arquivo, então a execução do script
terminará e talvez em um minuto, seu software comece a
gerar os arquivos novamente, mas seu script Python não
será retomado
porque há um erro aqui Então, o que
queremos fazer é continuar executando o script Python mesmo quando o arquivo não estiver
no diretório Para fazer isso, queremos
usar o módulo OS. Importe o sistema operacional e você
notará que sistema operacional não está entre os
módulos integrados do Python Na verdade, o sistema operacional é um módulo
escrito em Python. Todos esses módulos são incorporados, o que significa que eles são
escritos em linguagem C dentro da implementação do
software Python O sistema operacional não é um deles. Para descobrir onde o sistema operacional está hospedado, você pode usar o prefixo do sistema operacional. Você obterá um caminho de
diretório lá, que pode ser
diferente
dependendo do sistema operacional que você está usando. Então, por favor, navegue
até esse diretório. Eu prefiro ir até o diretório copiando-o sem os códigos. Então copie tudo sem
a mesa, desse jeito. Vá para o terminal
da linha de comando
e, se você estiver no Windows, use iniciar e cole o diretório lá
e pressione Enter. Se você estiver no Mac ou Linux, use Abrir em vez de Iniciar e
cole o diretório novamente. Pressione Enter, que abrirá seu Windows Explorer ou Finder, tudo o que você precisa
para abrir pastas Para que a pasta 3.7
que você vê aqui e depois vá para Lib, clique duas vezes Em seguida, encontre a pasta, Python 3.7 ou qualquer
versão que Então, Python tem três pontos
. Clique duas vezes nele. E aqui você verá vários
arquivos Python dot pi. Esses são todos arquivos Python. Todos esses são módulos
Python padrão, e o sistema operacional está entre
eles. Acesse Oh aqui, clique
duas vezes nele ou abra-o com o que você usa
como editor de texto,
e você verá que isso
é realmente um código Python Certifique-se de fechá-lo
antes de trocá-lo. Portanto, não mude, não modifique os módulos padrão do
Python. Então, vou
fechá-lo e você pode usar o DR para ver o que você tem
disponível para esse módulo. Entre eles, por exemplo, vou usar
o objeto path. Então, com esse caminho, e Path tem um método
chamado exists. O método exist obtém um argumento que
deve ser uma string e deve ser
o caminho do arquivo que
você deseja verificar se ele existe
no diretório atual. Então, vamos escrever o caminho do
diretório para o arquivo, e eu obtenho false porque o arquivo não estava
no diretório atual. Se eu for lá e criar esse arquivo dentro
da pasta files, agora eu tenho um caminho de arquivo TXT files slash
vegetals dot Se eu executar isso de novo, vou me tornar realidade. E podemos fazer uso desse
fato em nosso programa Python. Então, o que queremos fazer é, antes abrir o arquivo no modo real, verificar se o
arquivo existe, porque se não fizermos isso e
o arquivo não estiver lá, essa linha aqui
gerará o erro de arquivo
não encontrado. Então, antes de fazer isso, queremos verificar se é
esse caminho que existe. Arquivos cortam vegetais com pontos TXT. E como isso é uma condicional, queremos usar uma coluna lá E depois disso, tudo o que
você quiser fazer, tem
que ser indentado Então, vai ficar abaixo se isso também faz
parte do bloco W, então recue isso também E então s entra
no laço de arame novamente. O que você quer
fazer em ls, bem, talvez queiramos
imprimir Arquivo não existe. E então tenha cuidado aqui. O
intervalo de tempo deve estar fora do bloco IL porque você deseja executá-lo independentemente
do bloco condicional, o
que significa que, se o arquivo existir, será Se o arquivo não existir
, ele será executado. E depois que qualquer um
deles for executado, sempre, vamos
executar o tempo necessário para esse deslize. Então, deixe-me salvar o
script e executá-lo. E temos um erro, o
sistema operacional não está definido. Estou feliz que isso tenha aparecido porque os módulos
precisam ser importados. Caso contrário, você receberá esse erro de nome porque o sistema operacional, antes de ser usado aqui, não foi importado e não é uma função ou
método embutido , como imprimir, que
você não precisa importar. Portanto, seu nome não está disponível imediatamente
no namespace. Salve o script novamente, execute e obteremos uma
string vazia porque os vegetais estão vazios no momento. Agora, se eu deletar vegetais
assim, espere um pouco. E nós imprimimos isso. Se você criar o arquivo novamente, escreva algo
lá e salve o arquivo. Não se esqueça de fingir que o software está
gerando esse arquivo Então você tem gaulês lá. Agora eu posso interromper a
execução do script com o Control C, e ambos são módulos Python
padrão , e eles são exatamente iguais
, então você pode usar o JR Portanto, todas as regras do Python
se aplicam a esses módulos. A única diferença é
que o tempo é escrito na linguagem
C e está embutido no
software Python,
e o sistema operacional vem como um script dot pi, e veio aqui quando
você instalou o Python Então, foi basicamente copiado em um dos diretórios do seu
computador, e você pode importar
todos esses módulos, módulos padrão em Python Agora, é claro, nem tudo vem com a instalação do
Python Então, coisas que você precisa instalar. Então eu vou te mostrar isso
no próximo vídeo.
75. Módulos de terceiros: Nas
palestras anteriores, construímos um programa que examina os vegetais desse arquivo TXI cada 10 segundos e
imprime seu conteúdo Então, os programas em execução aqui. Agora, vegetals dot TXT é apenas um arquivo de texto simples com alguns dados inúteis, como
alho e cebola O que aconteceria se
tivéssemos mais dados
do mundo real, como o Temps, sublinhado
no arquivo CSV Portanto, este é um arquivo CSV, que é basicamente um arquivo de texto E tem uma estrutura
de várias colunas. Portanto, cada coluna tem alguns dados. Você vê aqui que isso é um cabeçalho. Tem duas colunas, SD uma para a estação um e
SD dois para a estação dois. Então, temos duas estações de
observação meteorológica, e elas registraram esses
dados, essas temperaturas. Digamos que sejam
observações em um dia. Isso é de
manhã e isso é no
final da tarde
e à noite. Então, temos duas colunas. Nosso dever agora é ler
esse arquivo a cada 10 segundos, assim como estamos fazendo com
vegetais aquele arquivo TXT Mas em vez de
imprimir seu conteúdo, temos que imprimir
o valor médio de todos esses valores. Então, devemos fazer isso a
cada 10 segundos. Bem, normalmente, você
teria que fazer isso cada 24 horas
porque faz mais sentido. Como esses dados são dados diários, dados diários de temperatura, eles
estão sendo alterados todos os dias. Faz sentido
imprimir o valor,
o valor médio a
cada 24 horas. E, claro, você
pode fazer isso facilmente basta alterar o valor
de 10 segundos para qualquer segundo que
seja igual a 24 horas. Você pode calcular isso facilmente. Mas para simplificar aqui, vamos usar apenas 10 segundos. Agora, embora possamos
fazer isso usando o método open para carregar
os dados em Python, isso carregaria os
dados como uma string Portanto, todo esse texto seria carregado como
uma string em Python Em seguida, teríamos que aplicar algumas operações de
processamento de strings para dividir todos esses valores
e convertê-los em float Mas isso seria como
reinventar a roda. O que estou tentando dizer é
que outra pessoa escreveu algum código Python que faz isso com
muita facilidade em apenas uma
ou duas linhas de E os caras que escreveram isso construíram isso como
uma biblioteca terceirizada. Então, assim como usamos o tempo e o sistema operacional
importando-os dentro do Python , também podemos usar
outra biblioteca neste caso
para carregar esses dados
em um bom formato em Python.
Deixe-me te mostrar como. O nome da biblioteca que
eu conheço é Pandas, e Pandas não vem
por padrão com Python Então, quando você instalar o Python, o
Pandas não estará lá, mas você pode instalá-lo PIP é outra biblioteca que vem instalada por
padrão no Python e é usada para
instalar outras bibliotecas de terceiros Um ponto muito importante que
quero destacar é que o comando PIP pode variar entre diferentes sistemas
operacionais e diferentes
instalações do Python Por exemplo, se você estiver
usando o Python versão 3.8, talvez seja necessário digitar
PIP 3.8 em vez de apenas PIP Se você estiver usando o Python 3.9, precisará digitar Se você estiver usando o Python 3.10, que é mais recente que o 3.9, precisará digitar Então, para resumir, você
precisa usar seus próprios comandos. Sempre que eu digito o PIP três, você precisa usar seu
próprio PIP 3.8 ou PIP 3.9,
etc., etc Então, vou usar o Pip three
e depois instalar os pandas. Observe que você não deve alterar a
parte install pandas do comando Você só deve alterar a parte do PIP conforme
expliquei para você Ok, então Pandas é o nome da biblioteca
que queremos instalar Então, as barras estão se enchendo. Isso significa que a biblioteca Pandas está sendo instalada
com sucesso Ótimo. Agora, vamos usar o Pandas em nosso script aqui Importe pandas, assim como
fizemos com outras bibliotecas. Então, esses dois, essa era
uma biblioteca padrão. Ele está embutido dentro
do interpretador Python. E isso é, novamente, uma biblioteca padrão, mas não está embutida,
está escrita em Python Esse pandas também
está
escrito em Python e agora acabou de ser instalado em nossos arquivos de instalação do Python Deixe-me mostrar onde estão
os pandas. Vamos abrir uma sessão de Python. Portanto, se você importar o SIS e , em seguida, o prefixo sys dot, isso
fornecerá esse diretório Seja qual for o diretório que você tenha, copie-o sem os códigos, e então você inicia no Windows
e paga o diretório no Mac e Linux, abre e
paga o diretório, pressione Enter, que
abrirá o diretório, vá para Lib to Python E então OS, por exemplo, estava aqui, Os dot pi. Essas eram bibliotecas padrão. Agora, tudo o que você
instalar com o PIP, estará dentro do diretório de pacotes do
site, que está aqui
em algum lugar, sim Então, pandas, isso é pandas. Acabamos de instalar pandas. Nesse caso, isso não
é um módulo, mas é um monte de módulos. E isso é chamado de pacote. Quando você tem vários módulos, isso é chamado de pacote. Mas você ainda pode se
referir a ela como uma biblioteca. Portanto, uma biblioteca é um nome usado geralmente para se referir tanto a
módulos quanto a bibliotecas. Então, programar quando você usa o Pandas, não
faz nenhuma diferença Se for um módulo ou um monte de módulos,
então um pacote. Então, o código do
Pandas está todo lá, e podemos usar esse
código agora em nosso script Então, deixe-me mostrar
na próxima palestra como
usamos essa biblioteca
terceirizada da Pandas
76. Um exemplo de módulos de terceiros: Então, vamos continuar lendo
o conteúdo desse
arquivo com o Pandas Uma biblioteca de
análise de dados muito poderosa. Mais tarde, vamos
nos aprofundar nos Pandas. Temos uma seção
dedicada aos Pandas e
temos aplicativos nos quais
vamos usar muito os Pandas Mas, por enquanto,
deixe-me dar uma rápida demonstração de como os pandas funcionam Certifique-se de importá-lo. Eu importei aqui
e, enquanto
terminamos, vamos manter isso condicional para verificar se o arquivo está Nesse caso, isso
seria Temps today dot C SV. E então, se o arquivo existir, queremos carregar os dados
nessa variável de dados. A maneira como fazemos isso é usando o método de leitura CSV do Pandas E aí vai, você
adivinhou o caminho
do arquivo. Assim. Portanto, se o arquivo existir, leia os dados e
imprima a média dos pontos dos dados. Então, esse objeto
tem um método médio. Deixe-me mostrar mais tarde
o que é esse objeto. Mas, por enquanto, vamos seguir em frente
e executar esse script. Então, estamos obtendo a média
de cada uma das colunas. Essa é uma média para a estação um, e essa é uma média
para a estação dois. Então está funcionando.
Agora, se você quisesse a média de apenas uma
coluna ST, você simplesmente faria isso. Então, isso lhe dará a
média da
coluna ST
da Estação 1. E assim por diante. Então, a ideia aqui é
importar pandas, e quando você executa isso, o que está acontecendo lá é que um objeto chamado
quadro de dados está sendo criado Você pode ver que tem uma visão estruturada desses dados. Portanto, esse é um tipo específico de
objeto. Assim como temos números inteiros
e flutuantes, também
temos esses
outros tipos que você pode encontrar nas bibliotecas
dessas bibliotecas de terceiros, para que todos possam criar
seus próprios E isso é sobre bibliotecas, então bibliotecas integradas, bibliotecas
padrão, escritas em Python e bibliotecas de
terceiros, que quase sempre são escritas Python. Isso é
sobre bibliotecas.
77. Introdução ao uso do Python com arquivos CSV, JSON e Excel: Olá, bem-vindo a uma nova seção, e será muito
interessante ensinar isso para
mim e também informações
muito, muito úteis
para você aprender. Então, trabalharemos com arquivos CSV
externos, arquivos do Excel e arquivos JSON Portanto, esses são
arquivos externos nos quais você pode armazenar dados e
acessar esses arquivos. Você pode manipulá-los a
partir do seu programa Python. Portanto, seu programa pode
interagir com esses arquivos, e é isso que você aprenderá nesta seção. Então prepare-se, e eu falarei com
você no próximo vídeo.
78. A biblioteca de pandas + análise de dados: Ei, bem-vindo a
esta nova seção. E nesta seção, você aprenderá
a usar o Pandas, que é uma biblioteca
Python muito importante , e você realmente
não quer perder isso Então, o que é Pandas? Bem, o
Pandas é uma biblioteca fornece estruturas de dados e ferramentas de análise de
dados
em Python Ou, se a palavra
ferramentas o confunde
, você pode dizer que o
Pandas é uma biblioteca fornece estruturas de dados
e código de análise de dados Então, basicamente, o Pandas
permite que você carregue dados de
diferentes fontes em Python e, em seguida,
use o código Python para analisar esses
dados e produzir resultados , que podem ser
na forma de tabelas
, texto e também
visualização com a ajuda de
bibliotecas
de visualização , como livro
, livro , que Então, por enquanto, vamos nos concentrar nos
dados sem visualizá-los, e o Panas é ótimo para Então, na prática, como
usamos os Pandas? Bem, você aprenderá
a abrir arquivos de texto
usando os métodos de tratamento de arquivos integrados
do Python no
início do curso Agora, o que abrimos do
TextFils era apenas texto simples. Mas e se você quiser
carregar arquivos de texto com dados construídos de
linhas e colunas. Ou as coisas ficam um pouco complicadas. Mas é aqui que o
Pandas entra em cena. Então, você provavelmente pode fazer
isso usando métodos
Python incorporados que você
aprendeu no curso Mas para ser mais eficiente e
muito mais eficiente, você precisa ter uma
biblioteca de alto nível, como a Pandas, que seja capaz de reconhecer essas estruturas de dados
automaticamente Eu uso pandas para
carregar dados de atividades de mineração de dados
, como web scrapping Então, você retira dados de
um site com
Python e depois armazena esses
dados nesses quadros de dados Então você usa pandas para fornecer estruturas de
dados
para você em Python E eu uso pandas para carregar
dados de arquivos do Excel e também uso painéis para analisar esses dados
em vez de usar o Excel Excel pode ser bom para
analisar uma pequena tabela de dados que cabe na tela do
computador. Mas para dados maiores do que isso, você realmente quer usar código. Você escreve o código Python uma vez e depois o usa com
outros dados também E você não quer fazer
seleções, arrastar e muitas outras
operações complicadas que você normalmente faz em um programa
baseado em gráficos, como Então, o código é o caminho a percorrer se você quiser ser
eficiente com dados, e o Python é ótimo
para isso com Você realmente quer entender
bem os painéis e aprenderá
isso nesta seção e também
praticará com
aplicativos do mundo real que
criaremos à medida que você
avança no curso. Vamos continuar e mergulhar em alguns códigos agora nas
próximas palestras. Te vejo.
79. Primeiros passos com pandas: Ótimo. Novamente, o Pandas
é uma biblioteca que fornece estruturas de dados e ferramentas de análise de
dados em Python Então, nesta palestra, você
verá o que quero dizer com estruturas de
dados
e análise de dados Então você verá o objeto
principal do Pandas, que é uma estrutura
que contém os dados E você verá que
obtemos dados da estrutura
e os analisamos. Então, vou abrir uma linha de comando
simples
e, por enquanto, usaremos IPython, ótimo para análise de
dados e
trabalho com Mas ainda melhor é o caderno
Jupiter. O Jupiter Notebook é
como um Python Shell. Na verdade, é uma combinação de um Python Shell e um editor
Python E é uma ferramenta baseada em navegador na qual você pode escrever código Python, e é muito eficiente, então realmente aumenta Mas para esta palestra, quero
começar com coisas simples, um passo de cada vez, e apresentarei os
pandas usando apenas o IPython Então, na próxima palestra,
mostrarei como configurar um notebook Jupiter, anteriormente
conhecido como notebook IPython Então você configurará Júpiter e eu mostrarei como
trabalhar com Júpiter Então, por enquanto, vamos
usar o console IPython simples Importe pandas. E, normalmente, a primeira coisa que
você faz é importar alguns dados, digamos, de um arquivo CSV ou
de TextFile ou
até mesmo de
um arquivo Excel ou JSON ou outros formatos, que abordaremos Mas também há outras maneiras de
criar uma estrutura de dados de pandas Agora, a primeira coisa que
você deve saber é que
essa estrutura de dados da
qual estou falando é
chamada de quadro de dados. Então, esse é um objeto especial que conterá os dados.
E você pode criar um. Você pode armazenar um quadro de dados em uma variável, digamos uma DF Quadro de dados Mm pandas. Então, estou criando um quadro
de dados manualmente, passando valores
manualmente via Python Normalmente, você deseja usar
outros arquivos, como mencionei. Então, o quadro
de dados agora pense no quadro de dados como uma tabela. Portanto, talvez você
queira passar uma lista de listas em que cada lista
será uma linha dessa tabela. Então, vamos passar alguns
dados dois, quatro, seis e dez, 20, 30. Você executa isso, isso foi bem-sucedido porque você
não recebeu um erro. Você tem um, e
aqui está o quadro de dados. Então 246 é a primeira linha, dez, 20, 30 é a segunda linha Esses zero, um, dois são
os nomes das colunas e são
chamados de índices. Então, 01 aqui estão
os índices das linhas, e esses aqui são os nomes
das colunas A beleza dos painéis
é que você também pode ter seus próprios
nomes de colunas, se quiser. Então, vou chamar
essa expressão novamente e quero passar aqui
um parâmetro chamado columns que espera
uma lista de nomes. Que deve ter
o mesmo número de itens com o número de colunas que seu quadro
de dados tem. Então, se você passar uma lista
com três itens, você quer passar três
colunas aqui também. Digamos que precifique algo
aleatório, idade e valor. Você executa isso e
deixe-me expandir este DF, desta vez você vê que tem seus próprios nomes de
coluna lá Agora, da mesma forma, você também pode
passar nomes personalizados para os índices
passando o índice como parâmetro
e, em seguida, gostaria de
passar uma lista com dois itens porque temos
apenas duas linhas, digamos, primeira,
segunda, DF uma, e você
tem índices personalizados No entanto, normalmente, você não
precisará passar índices personalizados. Os dados normalmente têm um
número definido de colunas, mas nas linhas, você pode ter centenas e milhares de
linhas ou milhões. Então, você realmente não quer
mexer com os nomes dos índices. No entanto, o recurso é
exatamente isso em casos especiais. Portanto, há uma maneira de
criar um quadro de dados em painel e você também tem
outras maneiras. Que não são muito
comuns de usar, mas eu só queria saber
se eles estão lá. Então, novamente, você passa uma lista aqui, e então o que você
pode fazer é passar dois dicionários
dentro dessa Então você pode ver a semelhança. Aqui usamos uma lista de listas. Aqui também estamos
passando um objeto de lista, mas é uma lista de dicionários E o que você pode fazer aqui
é passar valores, chaves e valores para um
dicionário, e aqui também. Então, digamos que nomeie
John, nomeie Jack, execute aquele DF dois E sim, esse é
mais um quadro de dados. Se você quiser ter
mais colunas lá, como sobrenome, você
gostaria de adicionar aqui outra chave e valor
para o dicionário Então, algo como
sobrenome e agora, se você executar isso e DF dois, você terá a
coluna de sobrenome adicionada Mas para Jack, você não ganha
nenhum porque não inseriu um sobrenome
no segundo dicionário Então, se você fizer o mesmo com Jack, se você passar um sobrenome, você
obterá o valor aqui Então, essas são duas maneiras básicas de
criar quadros de dados em tempo real. Como eu disse, normalmente,
esses valores
sairão de arquivos CSV, arquivos do Excel, etc Eu farei isso
nas próximas palestras. E mais uma coisa que eu
quero que você saiba é que isso é uma estrutura de dados, e agora o que a análise de
dados
significa está fora dessa estrutura de dados, você quer obter informações. Então, você pode querer extrair, por exemplo, a média
de todos esses valores. Então, dois, quatro, seis, dez, 20, 30. Então, aqui entramos na
fase de análise de dados. E a abordagem para
fazer isso é, você sabe, esse objeto de quadro de dados agora, que você pode ver
do tipo DF Portanto, é um quadro de dados do Pandas. Agora, esse objeto de quadro de dados
tem métodos anexados a ele. Se você faz DR e sim, vê
que há muitos métodos que você
pode aplicar a ele. Vamos localizar o
método médio lá. Aqui está a maldade. Então, o que você pode fazer é apontar para DF um e
, em seguida, média e colchetes, e obter a média
de todas as colunas E se você quiser a média
de todo o quadro de dados, poderá aplicar novamente o método da
média depois disso. Então, o que isso faz
é aplicar o método
da média nesta série aqui. Então, esse tipo é um objeto
da série panda. As séries têm mais ou
menos os mesmos métodos que você
aplicará a um quadro de dados. Então, DF um e DF um ponto Price, e você obtém a série da coluna
de preços Então, se
você verificar o tipo, isso também é uma série de painéis. Portanto, o quadro de dados é feito de séries. E, claro, você também pode aplicar o método médio
ao preço. Da mesma forma, você
também pode
aplicar outros métodos que estão
disponíveis lá. Então Max e você obtêm
o valor máximo. E sim, isso é sobre a
introdução aos Pandas. Na próxima palestra, você
aprenderá sobre Júpiter. É muito agradável trabalhar com Júpiter. Portanto,
não perca isso. E depois abriremos quadros de
dados,
criaremos quadros de dados a partir de arquivos. Então, te vejo mais tarde.
80. Configurando o caderno Jupyter +: Bem, nesta palestra,
mostrarei como configurar o caderno de Júpiter
ou, abreviadamente, Júpiter, e também como usá-lo Até agora, você trabalhou tanto com Python quanto com um Shell
interativo e Python, mas também trabalhou com
um editor Às vezes, você
pode precisar de um híbrido entre um shell interativo e um editor quando quiser
testar coisas, mas também deseja salvar os
blocos de código que está escrevendo porque um shell
interativo é ótimo para testar
coisas rapidamente, mas você pode salvar o código, e o editor é bom
para salvar o código, mas não é ótimo
para testar coisas. Mas posso dizer que
essa ferramenta híbrida existe, chamada de caderno
Jupiter E essa é uma ferramenta incrível que aumentará
sua produtividade. Júpiter é especialmente bom
quando você trabalha com dados. É um ótimo ambiente
para explorar dados, e você verá sua
utilidade em pouco tempo Obviamente, você ainda
quer usar editores como o Atom ao trabalhar com vários
scripts
Python que interagem entre si Esse é o caso do aplicativo
web, por exemplo, quando você está
desenvolvendo aplicativos web, você terá que lidar com
vários scripts Python e também com arquivos HTML, CSS e outros arquivos Crie um aplicativo web posteriormente
no curso e você verá
como o atom é bom para isso. Mas para dados, use Júpiter. Então Júpiter, vamos ver
como instalá-lo. Bem, você pode ir para
a instalação, então instale e
siga estas instruções. Mas, em vez de
passar por isso, eu recomendaria que você realmente usasse sua
linha de comando para instalar Júpiter e digitar
PIP install Para que baixemos o Jupiter e ele o instale
em seu sistema E então, para iniciar
uma sessão de Júpiter, uma boa prática é
ir até uma pasta Digamos, teste três. E aqui você pode abrir
um prompt de comando e digitar
Jupiter No book E isso abrirá a
sessão de Júpiter no navegador. Portanto, o notebook Jupiter é
na verdade um notebook de navegador. O motivo pelo qual abri o notebook
Jupiter na linha de comando foi que, pelo
menos no Windows, quando você faz Shift e clica com o botão
direito do mouse na pasta, seu prompt de comando é aberto
na pasta atual,
então nesta aqui E então, quando você criar
um arquivo de notebook agora, todos os arquivos serão salvos
neste diretório aqui. Como alternativa, você pode abrir seu prompt de comando
onde quiser
e, em seguida, colocar um CD na pasta em que deseja
salvar seus cadernos de Júpiter Tudo bem, agora não
temos nada aqui. Então, o que você pode fazer é
criar um caderno. E instalamos o Jupiter
Earth como uma biblioteca Python. Então, em notebooks, temos o
Python 3 disponível. Portanto, o kernel
será o Python três. Se você associou
outros idiomas aqui, você os verá aqui
em Cadernos Então, este é um caderno vazio. E esse é o nome de um notebook e você pode mudar isso para, digamos,
testar. Pressione ok. E se você for até a pasta, verá que o arquivo com nome do
teste e a extensão do
notebook IPython foi criado Então, isso é criado automaticamente toda vez que você digita
algo aqui, você faz algumas alterações
ou algo assim. Agora, deixe-me mostrar como você pode trabalhar com o notebook IPython Então você pode considerar cada célula. Isso é uma célula, e
você pode considerar cada célula como uma linha em
um shell Python normal Mas aqui neste shell, você pode realmente escrever várias
linhas de código. Digamos que imprima um
e, se você não quiser executar isso imediatamente, pressione Enter. Então, com Enter, você insere uma
nova linha na célula e depois imprime duas e assim por diante. E se você quiser
executar a célula agora, você pode pressionar Control Enter
e obter a saída. Agora, se você quiser
criar uma nova célula, Alt Enter faria isso. E aqui você pode escrever
outro bloco de código. Com Enter, você vai para a
próxima linha e assim por diante. E se você quiser ir para
a próxima cela imediatamente. Então, antes de pressionarmos
Control Enter, agora você pode pressionar Shift Enter e ir para a próxima
célula automaticamente. E com Shift Enter, você também executa a célula em
que estava trabalhando. Você pode criar novas células com Alta Enter e
excluí-las pressionando primeiro, pressionando Escape e depois pressionando DD
duas vezes DD novamente. Portanto, é bastante flexível. Algo que você deve
observar é que
temos dois modos, basicamente. Temos o modo de comando. Então, quando você está
no modo de comando, você vê um retângulo cinza
ao redor da célula E quando você
for para o modo de edição, pressione Enter. Então, enquanto estiver
focado na célula atual, pressione Enter e
edite a célula. Então, no modo de edição, quando você digita coisas, você insere
texto na célula, insere
código na célula, modo
Escape e comando, DD e exclui a célula, insere uma nova Então, esses são os
atalhos de teclado mais usados. Mas se você quiser
saber mais atalhos, acesse a ajuda e
depois os atalhos do teclado E então você vê uma lista aqui. Mas esses são bons
para começar. Ao terminar, basta fechar
uma guia e também fechar a árvore de diretórios aqui. Portanto, observe que Júpiter realmente abre em uma sessão local do anfitrião E se você quiser abrir
novamente seu notebook, você pode ir aqui
novamente e abrir a Janela de
Comando aqui
e o caderno de Júpiter E aqui está o arquivo, e
está exatamente como o deixamos. Agora, um
notebook Jupiter é melhor usado para fazer explorações e,
especialmente, explorações de dados Então, se você estiver trabalhando, digamos, com análise ou visualização de
dados, o notebook Jupiter
é perfeito para usar Você pode usar o Jupiter
Notebook, por exemplo, para carregar uma tabela de
dados na sessão Para isso, você usaria pandas. Então você importa a biblioteca, Enter ou Shift
Enter para ir para a próxima célula e pressiona Enter novamente
para escrever algo. Então, digamos que DF seja igual a Pandas,
Dal Fred CSV. E eu tenho um arquivo CSV em
algum lugar do meu sistema. Centro de imprensa e Whoa. Assim, você obtém uma boa tabela
HTML que foi carregada do arquivo CZ e também pode traçar gráficos
no caderno Então, isso também é algo
que você está aprendendo no curso. Assim, na análise
e visualização de dados, você também pode usar o
caderno Jupiter para web Isso é muito conveniente porque você tem esses blocos
de código e, em seguida, terá que ajustar
continuamente o código
para que você queira alterar alguma coisa aqui
e, em seguida, obter uma boa exibição Não exatamente porque é uma string confusa,
mas
nesta, por exemplo, você tem um controle deslizante aqui, para que você possa rolar para cima e para baixo dentro de uma
janela separada que não
afeta sua janela geral
, sua janela principal Então, espero que você tenha tido uma boa ideia do livro de regras de
Júpiter Basta anotar os atalhos dos atalhos do teclado
para executar
o código, a edição e o modo de comando, você sabe, Enter escape e Enter novamente e assim por
diante E você
os pratica um pouco e se acostumará com Júpiter muito rapidamente.
Nos vemos na próxima palestra.
81. Como carregar arquivos CSV em Python: Agora que você tem uma compreensão
básica dos pandas e sabe como
usar os cadernos Jupiter, podemos seguir em frente e aprender como carregar vários tipos
de arquivos em Python,
usando pandas pandas e sabe como
usar os cadernos Jupiter,
podemos seguir em frente e aprender como
carregar vários tipos
de arquivos em Python,
usando pandas e Júpiter. Então, eu tenho cinco arquivos aqui. Eles contêm exatamente
os mesmos sites de dados. E esta é uma versão em texto, ou deixe-me abrir a versão do
Excel que mostrará uma visão geral
dos dados, como você pode ver. Então, temos sete
linhas de código, incluindo o cabeçalho, e também
temos sete colunas. Portanto, são apenas alguns
dados básicos dos supermercados, o endereço, cidade,
estado, país nome
do supermercado
e número de funcionários Da mesma forma, temos
exatamente os mesmos dados, mas em formatos diferentes. Portanto, temos CSV e CSV significa valores separados por
vírgula. Então, é basicamente um
arquivo de texto em que os valores, as colunas são separadas por
vírgulas, como você pode ver aqui Portanto, cada coluna é
separada por vírgula. Mas ele tem uma extensão CSV
e pode ser aberto com o Excel Então, se eu abrir isso
agora, você verá o mesmo conjunto de dados que
você viu no arquivo ELS Também temos os mesmos dados
separados por semi colunas, como você pode ver aqui E sim, se você está
trabalhando com dados, provavelmente está familiarizado
com esses tipos de arquivos. Então, é assim que se armazenam dados. Você precisa ter
algumas convenções
e, usando essa convenção
, usa outros programas,
como Python, para carregar Então, quando você carrega o arquivo CS, Python sabe que os
valores serão separados por
vírgulas e sabe
como separá-los Ele sabe como extrair valores. Então, vamos abrir tudo
isso um por um. Também temos um arquivo JSON. Que é mais um
formato para armazenar dados, e parece um
dicionário Python, Então, também aprenderemos como
convertê-los no dataframe do Panda Então, tudo isso será convertido nos
dataframes do Panda. Sim, vou começar Jupiter Jupiter Jupiter.
Aqui estão meus arquivos. Vou continuar e criar um novo caderno Jupiter
para Python 3 Antes de prosseguir e carregar
esses arquivos em Python. Há um truque que eu geralmente faço. Importe o sistema operacional e, em seguida
, uma lista de pontos, e eu entrarei, executarei isso.
Você vai para a próxima linha. E o que você obtém é
uma lista de arquivos e pastas bem
como dos nomes dos arquivos que você tem no diretório
atual. Então, agora eu não preciso mudar
para minha pasta para
ver os nomes. Eu tenho tudo aqui. Agora eu posso ir em frente
e importar Pandas. E vamos começar a carregar
esses arquivos um por um. Digamos que DF um,
então o quadro de dados um, e isso seria
igual a Pandas Vou ler CSV. E então você tem que passar o nome do arquivo
que você deseja abrir. Supermercado o CSV e basta entrar e talvez você queira
imprimi-lo. Então DF aí E sim, o que temos aqui é que
primeiro carregamos o quadro de dados e depois o
imprimimos. Então, temos uma bela
mesa lá dentro. É assim que é fácil
carregar dados do arquivo CS. Agora, a vantagem
de ter os dados em Python é que, depois
de carregá-los em Python,
você pode realizar muitas, muitas operações Você pode fazer estatísticas
e adicionar novas colunas. Você pode mesclar colunas. Você pode adicionar os números de uma coluna aos números
das outras colunas. E, no final, você pode
exportar esses dados de volta para formatos como CSV,
Excel etc Então, vamos fazer isso mais tarde. Mas primeiro, vamos ver
como carregamos dados de vários formatos de arquivo
no próximo vídeo.
82. Como carregar arquivos do Excel em Python: E vamos continuar e carregar
o arquivo Excel Excel X, na verdade, um arquivo Excel. Então, o Pandas lê o Excel e você passa o nome
do arquivo do Excel E normalmente você também
deve passar outro parâmetro aqui
para arquivos do Excel porque, você sabe, os arquivos do Excel podem ter várias planilhas
dentro deles. Então, você deseja especificar o nome da planilha que
começa do zero, então você precisa passar o
índice, na verdade. Se você quiser a primeira folha, você quer passar zero. Se você quiser uma segunda folha, passe uma e assim por diante. Então eu vou passar de zero lá. Eu tinha apenas uma planilha
no arquivo do Excel. Faça três execuções. disso, também conseguimos ler Além disso, também conseguimos ler o arquivo do
Excel
com sucesso. Então, vamos seguir em frente.
83. Como carregar arquivos de texto em Python: Sim, vamos continuar
com o arquivo TXT. Portanto, é um supermercado
separado por vírgulas. Portanto, é uma estrutura de dados
separada por vírgulas. Para isso, para arquivos TXT
separados por vírgulas,
novamente, você usa R Assim mesmo, D quatro. E aqui está o quadro de dados. Portanto, o CSV dos supermercados na verdade, alguns dizem que é
um arquivo separado por vírgula,
mas, para ser mais
preciso, você
diria valores separados por caracteres Então C é para personagem. E pode haver personagens
diferentes lá. Nesse caso, quando você
tem vírgulas como separadores, não
precisa passar nenhum parâmetro
separador Mas quando você tem outros valores como separadores, você
terá que passar isso Esse é o próximo cenário. Então DA cinco, pandas com ponto vermelho, CSV. Então, estamos falando de
supermercados, ponto e vírgula
ou supermercados, ponto e vírgula TXT
. Sim, deixe-me experimentar este SiS agora. Então, se eu executar isso, o
Python não
será capaz de reconhecer
o ponto e vírgula lá A razão para isso é porque o parâmetro separador tem
um valor de vírgula por padrão Então, você quer mudar
isso para o seu separador, que é um ponto e vírgula,
neste caso Recebemos um erro
, separador inesperado de argumentos de
palavras-chave Portanto, parece que
leia o sublinhado, CSV não tem um parâmetro separado
separado Nesse caso, você
quer pedir ajuda. Então, sim, aqui estão os parâmetros
que você deseja passar. Então, na verdade, é um SAP, e você pode ver que o
valor padrão do SAP é uma vírgula Então feche isso e vá aqui, mude para SAP, execute, e aqui está o quadro de dados. Ótimo. O que resta a fazer? Sim, consumimos tudo. E isso é sobre a
leitura de arquivos locais.
84. Introdução ao Numpy++: Considere essa imagem em escala de cinza. Agora essa imagem é
feita de pixels. Este em particular
tem três por cinco, então tem 15 pixels. Portanto, é uma imagem bem pequena. Agora, cada pixel tem um valor, e é isso que
define a intensidade da cor cinza
para cada pixel. Na realidade, são números, mas a tela do nosso computador os
mostra em um formato colorido, que pode ser lido
por nós humanos O que estou tentando entender é que programas usam números
para armazenar imagens. Em seguida, a tela do computador ou a tela converte
esses números em cores O Python também pode processar
imagens, assim como o Photoshop Provavelmente ele não pode fazer todas as coisas legais que
você pode fazer com o Photoshop, mas você pode usar o
Python para automatizar Por exemplo, usaremos os
recursos de processamento de imagem do Python para detectar rostos de fotos de imagens e também detectar
objetos em movimento em vídeos Então, os vídeos são feitos de imagens. Então, é a mesma
coisa, basicamente. E o Python armazena e lê imagens usando matrizes Por exemplo, essa imagem pode ser representada, como você sabe, uma lista de outras três listas. Então, lista três porque
temos três linhas com pixels. Então, em cada uma das listas, você teria cinco números e assim por
diante, e o quinto. E o mesmo para as
outras duas listas. Temos cinco números
porque temos cinco colunas, então cinco pixels para cada linha. E isso é uma imagem para Python. E é aqui que o
Numpi é útil. Portanto, embora você possa representar
imagens com is, como fizemos aqui, isso não é muito eficiente
porque, para imagens grandes, ocupam muita memória
e, elas ocupam muita memória
e, portanto, tornam as operações mais
lentas. Então, isso é resolvido pelo
Numpi, que é uma biblioteca, uma biblioteca Python
que fornece um objeto de matriz
multidimensional Então, deixe-me continuar e
criar esse objeto de matriz. Em primeiro lugar, o que você precisa fazer é importar o Numbi E se você
instalou pandas, numpie deveria ter
sido instalado com pandas porque pandas
é Se você já instalou o
Numpi, vá em frente e instale o
Numpi. E se por algum motivo você
tiver alguns problemas no Windows, vá em frente, como mostrei, e
encontre as bibliotecas
Python pré-compiladas Vá para este lado e
, em seguida, pesquise por Numpi descubra se você está em uma versão
3.5 do Python,
vamos pegar E então você aponta
para esse arquivo com Pip Install e o
nome do arquivo Ótimo. Não, eu tenho o
num pi instalado, então vou criar esse objeto
multidimensional e armazená-lo em variáveis Isso seria um intervalo A de pontos numéricos. E digamos 27. Execute isso e imprima para que esta
seja uma matriz NumPi .
É assim que é chamado. Essa em particular
não é exatamente uma matriz multidimensional porque
tem apenas uma dimensão Então é um avião, é como uma lista de
aviões, uma lista de Python, mas ainda assim não é
exatamente o Desculpe. Portanto, é uma matriz dimensional
NPi Pode ter uma
dimensão, duas ou três. Então, temos um, dois, três, e vou mostrar todos
esses cenários. Então essa era a matriz
unidimensional, e se você quiser
imprimi-la em uma boa forma, essa seria a matriz. Agora, estou apenas criando uma matriz
numérica usando
números em tempo real aqui, mas normalmente você teria que
criar um raio a partir de imagens, e faremos isso daqui a pouco Então, por enquanto, vamos criar
algumas matrizes manualmente. Agora, vamos ver quais matrizes
bidimensionais. Forma de V três por nove. Então, já temos
essa matriz unidimensional e queremos
convertê-la em uma matriz bidimensional. Se você executar isso,
obterá uma matriz bidimensional. Então essa é uma matriz
bidimensional porque tem duas dimensões. Então, pense nisso como se
essa imagem caísse. Temos duas dimensões
vertical e horizontal. Agora, o que é uma matriz
tridimensional? Embora as matrizes
tridimensionais sejam usadas com menos frequência, ainda
é bom
conhecê-las. De qualquer forma, deixe-me criar uma matriz
tridimensional. Eu poderia dizer três por três por três porque
você sabe que tem 27 elementos, então três por três por
três dá 27. Sim, isso é uma matriz
tridimensional. Pense nisso como um cubo
com três dimensões. Então, três por três por três. E, na prática, você verá isso daqui a pouco
nesta palestra. Onde lidamos com a matriz
tridimensional? Então tenha paciência comigo. E você pode
ver as semelhanças entre uma matriz não Pi e uma lista
simples de listas do Python Então, isso aqui seria como
uma matriz bidimensional, se você quiser
chamá-la assim. A estrutura
no nível baixo é diferente entre as matrizes Python
list e NPi Além disso, as matrizes Nopi
permitem que você faça algumas
operações mais eficientes, como iteração entre itens da
matriz e E você também pode criar uma
matriz Nopi a partir da lista do Python. Por exemplo, vou
pegar essa lista aqui e criar um novo objeto e, em seguida, apontar para nupi e, para
converter uma lista em matriz np, você gostaria de usar
um E então, entre os
colchetes , está o objeto que
você deseja converter M e isso é uma matriz, que é quase exatamente
como esta aqui. E se você imprimir isso, não conseguirá
ver a diferença. Você sabe, eles parecem
exatamente iguais. Mas não são
porque isso é uma lista, e isso é um número numérico. Tudo bem. Ótimo. Vamos seguir em frente. Então isso é o Napi e, como
mencionei anteriormente, Napi é uma biblioteca base para outras bibliotecas, como
Pandas e também OpenCV, que é Portanto, os quadros de dados do Pandas são
baseados em matrizes Numpi e os objetos CV abertos são
baseados em Então, o que o Pandas faz é apenas adicionar
alguns recursos interessantes Lá dentro, como acrescenta. Ele oferece recursos para ter cabeçalhos e índices de
tabela, o que você não pode ter no Numpi
porque o Numpi foi criado
para ser mais simples
e ter um nível mais baixo de
armazenamento de objetos e execução de operações Portanto, o Numpi é um requisito
para muitas bibliotecas. vamos resolver esta palestra aqui, e
na próxima palestra, vamos seguir em
frente e criar uma matriz NumPi a partir da
nossa imagem Então, essa imagem. Ok, te
vejo lá.
85. Como converter imagens em matrizes Numpy: E sim, o CV dois está instalado. E o que posso fazer com o Civ
two, entre muitas outras coisas, a
primeira coisa
que posso fazer é carregar uma imagem em
Python usando os métodos CV Então eu vou carregar essa imagem, que é uma imagem muito pequena, aliás, eu só
tenho 15 pixels. Você sabe, uma
imagem normal que você usou para tirar fotos ou
no seu telefone ou qualquer outra coisa. Tem cerca de 1.000
por mil pixels, o que é 1 milhão de
pixels, mais ou menos. Mas devemos manter
as coisas simples para que você entenda o que está acontecendo. Currículo para importar isso e
sim, foi um sucesso. Sabe, vou criar
uma variável e chamar essa imagem do FMI e G de cinza Você pode chamá-lo do
que quiser, e CV para levar uma imagem
a carregá-la em Python, você deseja usar o método de compartilhamento de
imagem E então você passa o
nome da sua imagem. Você pode encontrar essa imagem
na seção de recursos. Então, vá em frente
e faça o download. E agora isso está aqui no mesmo diretor
do
meu caderno Jupiter, então eu posso ir em frente e
apontar para o nome
do arquivo, incluindo a
extensão, PNG com pontos pequenos E aqui, o método de leitura de imagens também espera outro
argumento de você. Isso pode ser zero ou um. Então zero significa que você quer
ler a imagem em escala de cinza. E se você passar por uma, você
lê a imagem em BGR, que significa azul, verde e vermelho E você entenderá o que
cada uma das versões significa. Então, vamos fazer isso primeiro. Sim, vou publicar isso. E como, foi isso. Então,
o que temos é nenhuma matriz É uma matriz bidimensional, então tem dimensões de
três por cinco, o
que é igual à nossa imagem. As linhas e as cinco colunas. Agora, a razão pela qual
passamos zero para lá, então estamos lendo isso como uma imagem em tons de cinza é
porque, você sabe, esse arquivo PNG, na realidade, tem três bandas ou, você
pode dizer, três E cada camada tem uma
certa quantidade de cores. Portanto, a primeira camada tem uma
certa quantidade de azul, a segunda camada tem uma
certa quantidade de verde e a última camada tem uma
certa quantidade de vermelho. Então, combinar cada
pixel é uma combinação da intensidade de
azul, verde e vermelho. Eu sei que em outros
programas eles usam RGB ao contrário, usamos esse BGR agora,
praticamente, esse arquivo aqui,
essa imagem praticamente
é uma imagem em tons de cinza No entanto, cada um desses
pixels tem suas próprias bandas, então a combinação
deles sempre cria, nesse caso, as cores cinza,
branco e preto. Mas se tivéssemos uma imagem
colorida lá, essa função seria convertida
em escala de cinza Então, novamente, o que temos
aqui é que você sabe, 187 é a intensidade do valor
para esse primeiro pixel E então você tem
o outro número, e para branco, você
vê branco aqui. Temos três pixels brancos. E esses são 255, todos eles. Todas as cores variam de zero, zero seria
preto, preto como breu e 255 para branco E tudo entre
eles está na escala de cinza. Agora, se eu mudar esse 21, obterei a matriz
tridimensional, onde isso representa
a camada azul, a verde e a vermelha. Ou você pode até mesmo imprimir isso. Tenha cuidado, porém, para que
isso seja um pouco transposto. Portanto, as matrizes são três colunas aqui e
as linhas são Basicamente, o que isso diz é esse pixel tem esses valores
correspondentes. Portanto, tem uma intensidade
de 187 para azul, 198 para verde e
dois oh nove para E sim, é assim que
você cria
matrizes numéricas a partir de imagens Mas e o
contrário? Então, criando imagens
da matriz numpi. Bem, para fazer isso,
você faz o currículo dois novamente, cv dois, e então você
aponta para o
método Iriz, então imagine E então você quer passar
um nome para sua imagem. Digamos, um novo PNG de
pequenos pontos cinza
e, é claro, você
precisa passar o número sem pi. Então, vamos passar a imagem cinza. Execute isso, você obtém dois, o que significa que sua queda
deveria ter sido criada agora. Sim, novo cinza pequeno. E sim, isso é um contraste e espero que fortaleça seu
conhecimento sobre o Nopi Agora vamos seguir em frente e fazer mais
algumas coisas aqui. E, especificamente,
na próxima aula, aprenderemos como fazer
indexação, fatiamento
e iteração de matrizes e iteração Então, basicamente, você aprenderá
como acessar esses valores. Nos vemos lá
na próxima palestra.
86. Indexando, fatiando e iterando matrizes Numpy: Tudo bem Você sabe
como dividir a lista Então, zero a um, forneceremos o primeiro item da
lista e zero a dois, o primeiro e o segundo
item da lista, e assim por diante. Com matrizes não Pi, você faz
basicamente a mesma coisa, exceto com matrizes não Pi, às vezes você tem duas ou
mais dimensões ou três. Então, deixe-me seguir em frente e vou criar, vou começar com
uma matriz bidimensional. Então, vou pegar isso
da variável. Então, essa é a matriz nonpi com a
qual trabalharemos. E sim, se você quiser
extrair esse número
aqui, aqui, esse e esse. Então, esses quatro números. Bem, primeiro você precisa definir o índice das linhas
que deseja dividir Então, isso seria de zero a dois, que dá as duas
primeiras linhas. Na verdade, podemos tentar isso. E você verá que
obtém as duas primeiras linhas. Agora, se você quiser apenas
essa parte aqui, então esses dois números
e esses dois, você gostaria de passar. A vírgula aqui e, em seguida, o
índice das colunas. que seria, você
sabe, zero aqui, um, então dois, três, sim, dois a quatro, talvez. Sim. Mas você faz isso. Ah, é isso mesmo. Isso significa que você
tem esse sistema de indexação Então, começa do zero para as linhas
e, em seguida, a segunda linha
é uma e duas e assim por diante. Quatro colunas, a mesma coisa. Zero, um, dois, três e quatro. E, na verdade, se quiser, você pode ver a forma
do seu n por matriz. Então é três por cinco, o que significa zero a
dois e zero a quatro. Ótimo. E, claro, você pode usar a convenção
de indexação de listas, para poder passar zero e tudo mais depois disso
ou simplesmente assim Então você obtém todas as linhas
e apenas as colunas 2-3. Da mesma forma, você pode obter apenas
um valor, se quiser. Não particularmente
este, porque três está fora dos
ossos do eixo zero. Portanto, o eixo zero é um eixo
horizontal, o que indica que
não há linha com índice três. Então, definimos zero, um, dois. Então, vamos passar dois para lá. E você obtém 182, que é o último
item da matriz Nopi Sim, isso é sobre indexação. Que tal iterar
por meio de uma matriz Nopi? Bem, há duas
maneiras de fazer isso. A primeira maneira é
dizer, digamos que para I em sua matriz Nopi, imprima I. O que isso fará
é
imprimir as linhas de
suas matrizes numéricas Então, o que eu acesso em
sua matriz numérica são as linhas. Então, em cada iteração, ele pega a primeira
linha e a imprime na primeira iteração, depois na segunda
e depois na terceira E se você quiser
iterar por meio de colunas, você gostaria de acessar
a versão transposta
da sua matriz numpi E é assim que você faz. Por fim, se você quiser
iterar valor por valor, você diria para I em imagem e impressão plana I. Então, essa propriedade, o que
ela faz é permitir que você acesse valores de sua matriz
numpi um por um E isso é sobre indexação,
fatiamento e iteração. Te vejo
na próxima palestra.
87. Empilhando e dividindo matrizes Numpy: Agora que você
sabe como
fatiar e iterar
por meio de matrizes numéricas, vamos fazer E isso seria
estocar matrizes NPi,
concatenar matrizes numpy umas com as outras
e também dividir uma matriz numpi em duas
matrizes e também Sim, eu tenho essa
matriz numérica ainda aqui. Então, vamos começar com o
empilhamento de duas matrizes numéricas. Para fazer isso, talvez você queira
criar uma nova variável na qual
salvará sua grande matriz, que seria
igual a nupi e o método para armazenar
dois raios não Pi;
na verdade, existem dois Uma é a
pilha horizontal, então a pilha H. Isso espera passar duas ou mais matrizes numéricas
que você deseja
empilhar horizontalmente que você deseja
empilhar horizontalmente Então, deixe-me passar OMG, e então a mesma matriz, não
é um problema Se você tivesse duas matrizes diferentes, poderia fazer isso, mas estou apenas passando a mesma matriz para lá Agora, se você executar isso,
você receberá um erro, e eu quero que você veja esse erro para que você o entenda. Então, diz que a pilha H recebe um argumento posicional,
mas dois foram fornecidos, o que significa que a pilha H
dentro dos colchetes recebe apenas um argumento,
mas estamos Então, como vamos
concatenar duas matrizes não Pi? Podemos simplesmente passar uma matriz
não pi para lá. Então, a solução aqui
é ter uma tupla. De matrizes Nopi, sem mais nem menos. Então, uma queda dentro da entrada do método A stack.
Você executa isso. E aqui está uma matriz empilhada. Portanto, esta é a primeira matriz e a próxima matriz,
que neste caso a mesma, mas se você quiser, pode adicionar mais e
obter uma matriz maior, que não é muito
bonita assim. Assim, você pode imprimi-lo. E sim, agora você
vê a diferença. Então, a primeira matriz, a
segunda e a terceira. E se você quiser
empilhar verticalmente, você gostaria de fazer V lá Ah, sim. Como esperado, isso concatenará as matrizes posição
vertical
no eixo vertical Lembre-se de que, se você tentar
concatenar matrizes dimensões
diferentes,
você Portanto, o IMC tem três dimensões, se você se lembra
disso daqui de cima Agora, você aprende como
concatenar e
dividir uma matriz dividir uma Bem, para fazer isso, você pode
criar uma variável e seguida, uma divisão horizontal numérica
para dividir horizontalmente E isso espera uma matriz numérica e quantas matrizes você deseja produzir
a partir dela Então, horizontalmente,
digamos três. Certo. E sim, isso diz que a divisão da matriz
não resulta em uma divisão igual. A razão para isso é que, você sabe, tentamos que essa matriz tenha uma, duas, três, quatro, cinco colunas. Então você está tentando
dividir cinco por três. Um umpi não pode decidir
como fazer isso. Então, ele deve fornecer a você uma matriz pi com essas
duas colunas primeiro, depois outro árbitro
com duas colunas
e, em seguida, uma última
matriz NPi com Então numpi não pode fazer isso. O que você deve fazer
é talvez cinco lá, e L T m I deveria fornecer
cinco matrizes numéricas diferentes, que neste caso uma matriz para cada coluna E você pode fazer a divisão
vertical. Desta vez, podemos tentar três porque temos nove linhas lá. E, no entanto, temos
três pequenas matrizes. Note que esse
LSD, ou seja, a divisão, o que ele produz é uma lista
Python de Portanto, é uma lista simples de Python. E a partir disso, você pode acessar cada uma das protuberâncias
, se quiser Você sabe disso. Portanto, ele
gera a primeira matriz E sim,
trata-se de concatenar e dividir Espero lhe dar uma boa
visão geral do numpi. Eu tento fazer alguns
exemplos práticos, como abrir imagens. Mas isso ainda está
na parte teórica. Portanto, o Napi é bastante teórico, e você só o entende quando começa a usá-lo desta forma Exemplos reais, como
trabalhar com pandas, como
fizemos anteriormente no curso, e também trabalhar com imagens Então, vamos fazer um processamento de imagem
intensivo nas próximas palestras
da próxima seção E você verá como o num pi
é útil lá. E sim, espero que você goste
disso, e te vejo mais tarde.
88. Aplicativo 1: mapa da web com Python e HTML +: Olá novamente e bem-vindo a esta nova seção do
curso. Nesta seção, você criará o
segundo aplicativo, é claro. Especificamente, o que você
vai criar com o Python é esse mapa da web
que você Um mapa da web é um mapa que
é exibido por meio um navegador e pode ser
visitado pela web Este mapa foi construído com
Python e volume. Volume é uma biblioteca Python e
o mapa tem Ele tem uma camada de mapa base. O que você vê
aqui com esses nomes na parte de trás e
tem uma camada poligonal, que representa a
população dos países Também temos essa camada de
pontos aqui com esses pontos e você pode
ativar e desativar essas camadas Também temos essas janelas
pop-up. Isso é o que você
vai construir. A, vamos continuar e fazer isso. Nos vemos
na próxima palestra.
89. HTML e Python: como criar um mapa HTML com Python +: Olá, novamente, espero que você siga o vídeo anterior,
onde apresentei o mapa que você criará
nesta seção. Era um mapa da web e, como você pode perceber, para
criar esse mapa da web, a instalação padrão do
Python não
é suficiente porque, logicamente, um Python não pode ter
todas as funcionalidades possíveis
por padrão, porque se
tivesse todas as funcionalidades,
o Python se pode perceber, para
criar esse mapa da web,
a instalação padrão do
Python não
é suficiente porque, logicamente,
um Python não pode ter
todas as funcionalidades possíveis
por padrão, porque se
tivesse todas as funcionalidades,
o Python se tornaria muito pesado. Portanto, é uma escolha
inteligente ter bibliotecas
externas que você
pode optar por instalar ou não. E esse é o caso
do mapeamento na web. Para criar o mapa da web que
mostrei na aula
anterior, você precisa de uma biblioteca, uma biblioteca de terceiros
, chamada de volume Como você pode perceber, você
precisa instalar essa biblioteca. Agora, observe que
eu tinha alguns vídeos anteriores
sobre esta seção, alguns vídeos antigos, mas
tive que alterá-los. Estou gravando novos vídeos agora. Este é um vídeo novo, um vídeo
atualizado e todos os próximos vídeos
desta seção porque o volume fez algumas alterações
no código em comparação
com as versões anteriores. Portanto, tive que
refazer os vídeos. Agora, desta vez estou
usando um computador Mac, mas isso não
fará nenhuma diferença. Se você estiver usando Windows,
Linux ou Mac, tudo funcionará
exatamente da mesma forma. A única diferença é a
maneira como você abre o átomo, é claro. No Windows, crie uma pasta vazia onde você guardará
os arquivos deste projeto. Minha pasta aqui no Mac
está mapeando no Windows, você pode segurar a tecla shift
e clicar com o botão direito do mouse. E então vá para abrir o átomo aqui para abrir o átomo
nesta pasta. Em um Mac, você pode
pressionar Command Space, atom e, em seguida, acessar View Developer, abrir no View Developer, abrir no modo
Dev, localizar
a pasta e clicar em Abrir. Sim, é isso mesmo.
Vou fechar tudo isso, deixe-me abrir o terminal e agora instalar o volume. Para fazer isso, você precisa
digitar o volume de instalação. Normalmente, você teria que
fazer isso no Windows. No Mac, se você tiver duas
instalações do Python, talvez seja necessário fazer o PIP Isso indicará explicitamente que o volume de instalação do Python 3 O volume foi instalado
com sucesso. Se você tiver uma mensagem
dizendo que Gina two é necessária
para este pacote, então vá em frente e faça o
PIP três instale Gina No entanto, espero que o
volume instale o Jinja two por padrão, como aconteceu comigo, então
deve estar pronto Depois de fazer
isso, vou
abrir o Python, na verdade, o Python três No mapa, você precisa especificar explicitamente o
Python três. O que vou fazer agora
é criar um webmap básico. Vou usar shell interativo do
Python para
mostrar as coisas ao redor Tente importar o volume. Não tenha erros, isso significa que o volume foi
instalado com sucesso. Agora, como funciona o volume? Bem, tudo gira em torno de
um chamado objeto de mapa. A primeira coisa que
você precisa fazer depois importar o volume é criar um objeto de mapa. Estou usando uma variável para armazenar esse objeto de mapa e, em seguida,
igual ao ponto de volume MAP. Essa é a classe que
cria esse objeto. Se quiser, você pode realmente
verificar o volume para obter uma lista dos objetos disponíveis
que você pode usar no volume. Aqui está o mapa. Ignore
os outros por enquanto, nós os examinaremos mais tarde. Você também pode pedir ajuda agora, mapa de pontos de
volume para ver o que você pode passar
para esse objeto de mapa. Crie um mapa com volume
e ponto de folheto Gs. O que o volume faz é realmente
produzir, você usa Python,
escreve Python e esse
código Python será
convertido automaticamente
em JavaScript, código convertido automaticamente
em JavaScript e Porque você precisa de Javascript, CSS e HTML para criar webmps Você não pode fazer isso diretamente com o código
Python. O navegador lê HML, CSS e JavaScript e
renderiza o código
dessas três
linguagens de programação em dois elementos como texto e linhas,
pontos e imagens É isso que o volume faz. É maravilhoso poder fazer
isso com Python por meio de Python De qualquer forma, você pode olhar aqui
embaixo nos parâmetros. Você pode passar um
parâmetro de localização aqui. E você pode especificar a largura. De qualquer forma, se você não
especificar a largura, uma largura padrão de 100% da área do
navegador será usada, você não precisará passar a
largura e a altura também e, em seguida, terá blocos, padrão é Abrir blocos do
Street Map. Os azulejos são o plano
de fundo do mapa. Você vai ver
isso em um minuto. Você também tem outros
parâmetros, que você pode examinar
sozinho, eu acredito. Pressionei Q para sair da ajuda e vamos
criar o objeto do mapa. Finalmente, mapa de pontos de volume. Portanto, localização, você precisa
passar um parâmetro
de localização para que o mapa
saiba onde abrir. Pode abrir,
digamos, perto do Alasca
ou perto da Groenlândia
ou da África do Sul Estamos falando sobre
a visualização inicial, mas depois você pode
aumentar e diminuir o zoom. Deixe-me passar por um local aleatório. As localizações, aliás, são fornecidas por
meio de coordenadas. Por padrão, você precisa passar as coordenadas
geográficas, que são latitude e longitude A latitude varia de
-90 a zero a 90. Então, deixe-me passar 80 lá. A propósito, isso está na
lista, na verdade. 80 uma vírgula e depois
a longitude, a longitude varia de
zero a -180 e de zero a 180 Deixe-me passar -100. E feche o suporte.
Você passa uma lista de coordenadas para o local. Na verdade, isso é
suficiente, você pode ter um objeto de mapa com essa execução, você não recebe um
erro, isso significa que tudo está funcionando bem. Agora você tem um objeto de mapa, mas isso é apenas um
objeto dentro do Python Você ainda não traduziu
esse objeto em código
HTML, CSS e
JavaScript. O que você precisa fazer a seguir é
apontar para esse objeto do mapa. Em seguida, use o
método save e, em seguida, passe um nome para o arquivo de mapa
que será criado. Obviamente, os mapas
serão criados no formato HTML. HTML é o que contém todos esses elementos que
renderizam todo o navegador. Texto e imagens e assim por diante. Feche o colchete e execute. Como você pode ver, um arquivo
foi adicionado aqui, mapeie um ponto HTML. Mas deixe-me ir para a pasta, clique
duas vezes nela, que
abrirá no seu navegador padrão. Portanto, este é apenas um local
aleatório. Eu não sei o que
é. Ilha Magan Isso parece estar no Canadá, bem ao norte do
Canadá. É isso mesmo. Este é o mapa da web.
Se você aumentar o zoom, verá mais detalhes
no mapa dessa forma. Quanto mais você aumenta o zoom,
mais elementos você vê. Isso é o que eu
queria te mostrar. Se você quiser outro local, altere as
coordenadas aqui no local. Mas se você não sabe quais coordenadas seu lugar
favorito tem
, pode haver
maneiras diferentes de descobrir isso, mas uma maneira rápida é
acessar maps.google.com Digamos que você queira saber
isso, deixe-me ampliar aqui. Você deseja centralizar o
mapa em torno desse local, clicar com o botão
direito do mouse e
ir até O que está aqui, copiar essas coordenadas,
copiar essas coordenadas
ou, se não conseguir
copiá-las, lembre-se delas? 38,58 aproximadamente menos 99 Em seguida, você precisa
salvar o mapa novamente, mapear um ponto ML e isso
substituirá o mapa anterior Vá aqui, recarregue, você vê que agora temos um centro
diferente do mapa Obviamente, você também pode
brincar com o Zoom, então você pode adicionar um
parâmetro de Zoom aqui. Isso é chamado de início do Zoom. Vamos colocar em seis. Não se esqueça de fechar
o suporte aqui. Execute a tecla de seta superior para chamar uma
instrução executada anteriormente, como map save. Você também pode optar por
acessar o navegador e recarregar com o Controle
R ou o Comando R, e isso
mostrará o novo mapa com outro fator de zoom De qualquer forma, é só isso. brincar um pouco com
isso. Na próxima palestra,
mostrarei como
adicionar pontos a esse
mapa. Eu vou ver o
90. HTML e Python adicionando um marcador ao mapa: Olá, novamente, e bem-vindo
a esta nova palestra. Nesta palestra,
você aprenderá como adicionar pontos
ao mapa que construímos anteriormente,
que é este aqui Tudo o que temos aqui é um
mapa base, o mapa de fundo, que é uma camada,
na verdade, é uma camada proveniente do serviço OpenStreet
Map Então, os mapas do Open Street fornecem uma camada. Na verdade, o volume fornecerá essa camada em segundo plano
por meio de JavaScript. Mas você também pode adicionar
outras camadas, outras camadas base e também pontos que você pode adicionar
sobre a camada base. Deixe-me voltar ao código. Isso é o que escrevemos
na palestra anterior. Na verdade, escrevemos isso aqui
no shell interativo. Mas eu apenas copio e colo
isso em um arquivo para que tenhamos e possamos adicionar
mais código agora em cima disso. Novamente, como eu disse,
você pode ajudar no mapa de pontos de volume e ver que pode adicionar
outras coisas aqui, como aqui você
tem parâmetros. Você pode adicionar blocos. O padrão são mapas de ruas abertos, mas se você especificar outro bloco, como caixa de mapa brilhante e
que tenha que estar entre aspas, como você pode ver aqui, no parâmetro tiles, isso espera um objeto de string. localização, por exemplo,
espera uma queda ou uma lista, e é isso que
passamos por uma lista de coordenadas A largura seria um número inteiro, um inteiro, a altura Além disso, você também tem
outras opções, que você pode experimentar sozinho. Eu só quero experimentar
este por enquanto. Deixe-me abrir um novo shell do Python. Python three map one, certifique-se de ter salvo a execução do
script Depois, você pode voltar para
a pasta e abrir o mapa. Deixe-me ir ao Farfox
Control R ou Command R para recarregar e você verá que
o plano de fundo mudou, então temos um novo mapa básico Vamos voltar ao roteiro agora. O que eu vou fazer
é adicionar alguns marcadores de pontos no topo do mapa base.
Como você faz isso? Bem, se você fizer o volume, aqui você pode ver que você tem alguns objetos e o que
queremos é um marcador ou
um marcador circular Vou experimentar os dois. Mas
eu quero explicar a lógica de como você adiciona
objetos ao objeto do mapa. No portfólio,
criamos um objeto de mapa
e, em seguida, entre
o objeto de mapa e o método seguro
do objeto de mapa, você pode adicionar
objetos de elementos a esse mapa. O que eu quero acrescentar
neste caso é um marcador. Então, eu posso fazer map add child. Usamos o método Adil
para adicionar filhos. Esses objetos dos quais estou
falando são chamados de filhos quando você os
adiciona ao mapa. Mapeie adchild e, em seguida, você
deseja apontar para o marcador de volume Agora, esse método de marcação, ele próprio espera alguns
argumentos. Você pode ajudar no marcador
de pontos de volume. Crie um marcador simples de
folheto de ações no mapa. O Leaflet é a biblioteca
JavaScript que ajuda você a
visualizar Esse é o mecanismo que cria esses mapas no navegador. O Python cria um código
JavaScript usando a biblioteca de folhetos e marcadores permitem que você Quando você clica em um
marcador no mapa, ele permite que você mostre informações e
parâmetros necessários para
passar um parâmetro de localização
para o marcador
para visualizá-lo passar um parâmetro de localização para o marcador
para visualizá-lo Portanto, localização é igual a dois. É uma lista típica. Digamos, 38 pontos dois e -90 91 e você também
pode passar Depois da lista, eu abro um poometer que pode
estar alto. Sou um marcador. Também preciso passar
o parâmetro icon, que na verdade é outro
objeto que vem do ponto de volume Con, o que você espera que eu
passe uma cor lá, como, digamos, verde. Basicamente, é isso. Verifique se os colchetes estão corretos Eu tenho três colchetes aqui, três colchetes de fechamento
e um e dois,
e três colchetes
redondos de abertura OK. Salve um script, vá para o outro
terminal e execute. Vá para o Firefox para carregar,
e aqui está um marcador. Se eu clicar, recebo a mensagem pop-up em
uma boa janela aqui. É assim que você adiciona
marcadores ao seu mapa. No entanto,
sugiro que você siga uma abordagem um pouco diferente
para adicionar crianças ao seu mapa. O que eu sugeriria
é realmente criar um grupo de recursos,
dados de volume, grupo de recursos. Mas você pode dar a
ele um nome como meu mapa. Então, o que acontece é que
nesse grupo de recursos, o marcador é um recurso
com grupos de recursos, você pode adicionar vários recursos
ao grupo de recursos Então você pode adicionar um marcador, você
pode adicionar polígonos, etc. Em vez de dizer mapa, você
faz o objeto do grupo de recursos, a variável que eu
criei aqui, que estou passando aqui. Depois disso,
você mapeia uma criança. E você passa o
grupo de recursos para lá. Isso é mais do que isso. Isso é feito para manter seu
código mais organizado
e também ajuda você mais tarde, quando quiser adicionar uma camada,
uma feição de controle de camadas em seu mapa para permitir que você ative e desative
camadas. Veremos isso mais tarde. Salve esse script
e deixe-me experimentá-lo. Página bem baixa. Portanto, não
temos nenhuma mudança. As coisas funcionarão da mesma forma, que significa que o
grupo de recursos está funcionando bem. Mas, como eu disse, é bom manter
a chamada
organizada e isso também ajuda você mais tarde ao adicionar um recurso de controle de camadas. Isso é o que eu
queria te ensinar por enquanto e falarei com você mais tarde.
91. HTML e Python: usando loops forçados ao adicionar vários marcadores: Ótimo. Conseguimos construir esse mapa na aula
anterior Temos um mapa base e temos um recurso de marcador aqui.
Esse é o nosso código. Agora, nesta palestra,
mostrarei como adicionar vários marcadores ao seu A maneira de
fazer isso é escrever essa expressão
várias vezes. Eu gosto disso e, claro, você precisa alterar a
localização desses marcadores. Salve o script e
execute o reload. Assim, você terá
vários marcadores Como você sabe,
não é possível adicionar vários marcadores com
um único método Com um único método de marcador, você precisa aplicar o
método várias vezes. No entanto, isso não é
muito inteligente de se fazer. Essa é a beleza
da programação. Você pode usar um loop for para realmente adicionar vários
marcadores ao mapa Estamos falando sobre
Python for loop, que é um dos
recursos fundamentais do Python Os quatro loops não têm nada
a ver com volume. Digamos que para coordenadas, é
claro, você precisaria alguma entrada com as coordenadas. Não sei, desse jeito. Digamos que seja uma lista de listas. Temos essas duas coordenadas.
Deixe-me copiar isso. Coloque-o lá e
outra vez e deixe-me alterá-los para nove e sete. Em seguida, você precisa recuar isso
com quatro espaços em branco. Vou explicar isso daqui a pouco. Então, no local, você
precisaria passar as coordenadas. Antes de explicar o
código, deixe-me experimentar isso. Execute, vá recarregar, ainda
temos os marcadores Claro, a localização
mudou em relação à anterior porque eu mudei as
coordenadas e aqui. Então, como isso está funcionando?
Bem, estou iterando com um loop for
nesta lista de listas Os itens na lista
dessa lista principal são
duas outras listas. Os itens podem ser qualquer coisa. Nesse caso,
existem duas listas. O que acontece é que as
coordenadas variam. Na primeira
iteração, ele obterá esse primeiro item da lista
e colocará essa pequena
lista, então 32,2 Ele colocará essa lista aqui. Basicamente, isso
será colocado aqui. Mais ou menos. Essa é a ideia. Então, na próxima iteração, as coordenadas
buscarão essa outra lista e a
colocarão aqui novamente, e assim o método marker
será executado Então, na primeira vez que ele
gerará um marcador com essas coordenadas e
na segunda iteração, ele gerará um marcador com essas coordenadas e
na segunda iteração,
ele gerará um marcador com
essas coordenadas. É isso mesmo. No entanto, temos um
pequeno problema aqui. O problema é que, na realidade, você não pode simplesmente digitar as
coordenadas em uma lista do Python Digamos que você tenha 1.000 coordenadas que
precisa mapear em um mapa e é
difícil digitá-las
aqui ou até mesmo paginá-las, copiá-las e colá-las
do documento aqui. A solução para isso é que suas coordenadas,
normalmente na vida real, talvez venham como um arquivo de texto,
como um arquivo de texto
separado por vírgula, CSV, arquivos do Excel, etc Você deseja carregar esse
arquivo em Python
e, em seguida, adicionar os valores desse arquivo
ao método marker Você pode fazer isso usando um
loop for e como você
faz isso exatamente? Bem, vou explicar isso
na próxima palestra. Vou te dar um arquivo separado por
vírgula com muitas coordenadas, e vamos usar isso
neste script.
Falarei com você mais tarde.
92. HTML e Python: processamento de arquivos adicionando marcadores de arquivos: Olá. Na aula anterior, você conseguiu criar esse
mapa com vários marcadores Acontece que esse mapa
tem apenas dois marcadores, mas você entendeu e o
script era esse aqui, então você pode adicionar quantos pares de
coordenadas
quiser Mas nesta palestra,
quero mostrar como
adicionar pares de coordenadas a partir de um arquivo de texto,
que é esse aqui, vulcões com pontos Se quiser,
basta renomear o nome
disso a partir de vulcões que
escrevem vulcões em CSV abri-lo em
um programa como Se quiser, você pode mostrá-lo em um arquivo de texto simples, como
estou fazendo aqui. O Python pode ler arquivos
CSV e de texto. O que temos aqui são
alguns dados sobre vulcões. Basicamente, temos o
número do vulcão, que é algum ID, vulcão Temos ainda outro
número, então, como você vê, cada coluna, temos colunas
neste arquivo de dados e cada coluna
é separada por uma vírgula Esse é o nome
da primeira coluna, o primeiro valor da primeira
coluna é esse aqui, depois é o nome
da segunda coluna. O primeiro valor da segunda
coluna é este aqui, então o segundo valor
da segunda coluna
é essa resposta, e então temos uma coluna de nome, o nome do
vulcão e aqui Desculpe, o nome está aqui, Baker e, em seguida, a
vírgula começa aqui, o que significa que o local é este aqui, EUA Washington Então você tem o
status histórico do primeiro vulcão e depois
temos a elevação, que é essa aqui Não tenho certeza se
estão em pés ou metros, mas
você pode descobrir isso. Se você estiver curioso,
pode fazer uma pesquisa sobre esse vulcão em particular
e comparar a elevação De qualquer forma, então temos
um tipo de vulcão. Você tem um período de tempo, que é D três, não tenho
certeza do que isso significa, D quatro. Então, por fim, é aqui
que estamos interessados. Temos as colunas largas
e longas. Isso é tarde, o que significa latitude e esta é a
longitude do vulcão Então, você precisa desses
dois valores
numéricos para mapear as feições, os vulcões em um mapa, neste caso, em um mapa de volume Isso tem cerca de 63, na verdade 62 63 incluindo
o cabeçalho dos dados. Como carregamos esse
outono no Python? Bem, para carregar isso,
caia no Python. Deixe-me limpar o
terminal e
primeiro você precisará instalar
uma biblioteca muito útil chamada Pandas Vamos usar essa
biblioteca mais tarde, então
não vou explicar os pandas em detalhes por enquanto, porque usaremos apenas uma ou duas
de suas funções, que explicarei
nesta palestra Vá em frente e instale pandas
se você não tiver pandas. Instale pandas ou
PIP three install pandas, dependendo de como você
configurou o Python, e então você pode prosseguir e
abrir Importe pandas. A maneira de carregar um
arquivo com Pallas é apontando para Pallas
que lê CSV,
vulcanos TXT, certifique-se de que sua sessão de
Python tenha
sido aberta no diretório
em que seu sido aberta no diretório
em apontando para Pallas
que lê CSV,
vulcanos TXT, certifique-se de que sua sessão de
Python tenha
sido aberta no diretório
em que seu vulcão está esse arquivo TXT. Por exemplo, minha sessão
está dentro da pasta de mapeamento, que é essa aqui, então eu
posso simplesmente passar um nome de arquivo. Caso contrário, talvez você precise
passar o caminho absoluto
do arquivo que começa
com a barra C e assim por diante,
dependendo do
sistema operacional em
que você está,
executá-lo e chamar os dados e obter os dados impressos
exatamente assim Panda é, na verdade,
o CSV lido. A matemática é capaz de distinguir
entre essas vírgulas, onde
estão as vírgulas, e cria um formato de dados
estruturado na web Se você descer até aqui, você tem algumas colunas
aqui, coluna
coluna, coluna e depois até o final. Então você tem outras
colunas porque Python não pode
imprimir, na verdade, o terminal não permite que você
tenha todas as colunas em uma dentro desta área aqui
porque seria demais. De qualquer forma, você tem elevação de
status, tipo timeframe, lat e long Isso é sobre os dados. Agora
você precisa descobrir uma maneira de iterar por meio
desse quadro de dados Isso é chamado de quadro de dados. O objeto de dados é
chamado de quadro de dados. Na verdade, você pode verificar seu tipo. Quadro de dados PanascFrame. O que estou pensando é,
na verdade, criar duas listas a partir
dessas colunas do quadro de dados para
colocar a coluna de latitude em uma lista de Python e a coluna de
longitude em outra lista de
Python para que tenhamos um objeto
Python nativo,
que é uma lista, e
então possamos iterar
por essa lista uma lista de Python e a coluna de
longitude em outra lista de
Python para
que tenhamos um objeto
Python nativo,
que é uma lista, e
então possamos iterar
por essa lista usando o loop de quatro. Deixe-me tentar fazer
isso. Importe Pandas e crie o objeto do quadro
de dados Carregando os dados, eu li
CSV volcano TXT, só isso. Como convertemos uma
coluna de dataframe em uma lista? Bem, a maneira de fazer isso
é simplesmente fazer, digamos dados legais
L ou T e, em seguida,
o nome da coluna, que é LT, para que você possa obter uma
lista de colunas, a
propósito, fazendo colunas de pontos de dados Aqui você vê, você tem uma
coluna longa e uma longa. Então você faz isso da mesma forma que
listar listar entre colchetes, O que você fez aqui são dados
com um único atributo, retornamos um objeto sério Mas esse objeto sério, estamos convertendo-o em
uma lista negativa Essa será uma lista do Python. Isso também aparecerá
como um objeto similar. Esse é um objeto sério. Essa é uma lista, mas eu prefiro
trabalhar em uma lista
porque trabalhar em listas é mais rápido do que trabalhar
em séries de quadros de dados. A ideia é ter
duas listas aqui. Isso é igual a listar uma
cópia colada aqui, o mesmo vale
para a longitude Última e longa lista. Portanto, precisamos ter cuidado aqui ao iterar
essas duas listas porque o que temos é que temos duas listas e cada uma
delas tem 62 itens Você pode verificar isso usando
um aqui, aqui embaixo, para
que tenha 62 itens e o mesmo vale
para a lista de longitude Isso significa que
o primeiro item
da lista de latitude corresponde
ao segundo item
da lista de latitude, desculpe, da lista de longitude Os dois primeiros itens compõem a primeira localização
do primeiro marcador. Isso significa que,
na primeira iteração, precisamos extrair
os dois locais Na verdade, essa estrutura
não será mais apropriada. O que você precisa fazer
é examinar digamos, as variáveis lat
e loan Quando você percorre
duas listas ao mesmo tempo, você precisa usar a função zip e, em seguida, ela fica paralela Basicamente, o que essa
função faz é assim. Digamos que para I, J e Zip. Digamos que a primeira lista seja 123. O segundo é 456. Print, I e J. Isso é o que acontece.
Esse loop percorrerá essas duas
listas ao mesmo tempo. O que acontece é que eu vou
passar pelo primeiro item
da primeira lista, enquanto J vou
passar pelo primeiro
item da segunda lista. Na primeira iteração, um
e quatro são extraídos. Um, aqui, e quatro aqui. E você pode fazer
essa extração usando a função ZIP. Caso contrário, você
não poderá fazer
isso se não usar
a função ZIP. Então, o ZIP meio que distribui
os itens um por um. E então o mesmo acontece aqui, LT receberá o primeiro
item desta lista. L one receberá o primeiro
item desta lista. E aqui, o que você precisa fazer é construir uma lista com LT e
LN. Sim, é isso mesmo. Salve o script, vá até
o terminal para executar. Não está aqui, é o terminal. Eu acabei de sair disso. Python três, mapeie um ponto de corte. Sem erros, acesse o
Firefox e recarregue. Não tenho marcadores
por algum motivo, mas não recebi um erro Esse é um daqueles cenários em que você não recebe um
erro no terminal. Nesse caso, você precisa
verificar seu código com cuidado. Painéis de dados, três CSV, falar nos dados. Aqui está o erro. O que está
acontecendo é que estou atribuindo a coluna errada
à lista de latitude Deixe-me alterar o
pedido e tentar novamente. Portanto, não se
deixe intimidar por erros. Erros acontecem o tempo todo. Você só precisa ter sangue
frio e ler os erros se encontrar
algum erro aqui e também examinar o código Deixe-me recarregar. Eu
tenho alguns marcadores agora Essas são as localizações
dos vulcões no norte dos EUA, na verdade, nos
Estados Unidos OK. Eles também têm esse
pop-up, que está funcionando bem, mas presumo que você
não goste
muito porque não está
mostrando nenhuma informação. O que precisamos fazer
aqui é realmente
tornar esse pop-up dinâmico para que ele mostre algumas informações
reais. Mostrarei como criar pop-ups
dinâmicos no próximo
vídeo. Fale com você lá.
93. HTML e Python: manipulação de strings: Oi, de novo. Neste vídeo, mostrarei como
adicionar os valores de elevação. Esses estão aqui na janela pop-up. Atualmente, nosso script
simplesmente imprime essa string na janela
pop-up. Nós vamos mudar isso. A maneira de fazer isso é primeiro carregar os
dados de elevação em uma lista do Python Então, no loop aqui,
você quer dizer,
digamos que L em Z plat
lone Lv assim Aqui no argumento pop pop, você passa o atributo L. Novamente, criamos uma lista
chamada F, variável LV. Essa será uma lista de todas
as elevações e, em seguida,
analisaremos essas três LT receberá o
primeiro item do aluguel, LN receberá o
primeiro item do empréstimo, L receberá o primeiro
item do LF e esses itens serão distribuídos
nesta função aqui. LT aqui, LN aqui e
L aqui, EL aqui. Agora, quero salvar
isso e executar, mas espero receber um
erro. Quero que você
veja o erro para que também se familiarize com o tratamento de
erros. O erro está
acontecendo na linha 14. Neste arquivo, mapeie um ponto pi, que é nosso arquivo, linha 14 está aqui. Esta é uma linha e depois
temos a criança Pop Up. Parece que esse erro tem a
ver com um objeto pop-up. Eu direi que essa não é uma mensagem de erro muito
boa, na verdade. É difícil ler esse
erro e solucioná-lo. Não são informações muito boas
fornecidas por volume aqui, mas de qualquer forma, temos algumas pistas. Pop, diz nome do
atributo do nome do filho ou NupiFlow 64, objeto não tem
atributo, obtenha Parece que o volume está tentando aplicar
esse método get name, que é um método dentro
da base de código do volume, e está tentando
aplicá-lo a um número. Eu acho que esse L aqui
é na verdade um número. Posso verificar isso
dizendo tipo de impressão, salve execute o script.
Novamente, aqui está um tipo. Este é um num pi float 64. Basicamente, é do tipo flutuador. Na verdade, é um
flutuador especial da biblioteca numpi. Mas de qualquer forma, você pode
chamá-lo de carro alegórico. Então é um número, não
é uma string. Mas se você observar help sorry, help volume, dot marker, verá que o parâmetro
pop-up espera uma string
sua como entrada Mas, em vez disso, você está
passando um número flutuante. Então você não quer fazer isso. O que você quer fazer é simples, basta converter esse número
de fluxo em uma string. Salve o script. Vá para o
terminal. Execute novamente. Vá para o Firefox, recarregue e você verá a elevação
exibida corretamente. Sim, é só isso. Você também pode estilizar o que está exibindo para adicionar
mais informações,
como mais medidores de espaço Estou adicionando a string a todas as informações da janela pop-up para todos os números de elevação. Estamos falando de
2.447,0 metros. Essa é a elevação
do vulcão. Sim, essa é a ideia. Espero que tenha ficado claro e
falarei com você mais tarde.
94. Usando funções - criando uma função de geração de cores para marcadores ++: Olá de novo e bem-vindo
a esta nova palestra. O que temos até agora é esse
mapa com esses 62 marcadores, cada
um representando a localização de um vulcão
nos Estados Unidos No entanto, esse mapa não é
muito inteligente, por assim dizer, a única informação
que ele transmite é a localização
dos vulcões E você também tem um mapa básico. Também há um bom aspecto
desse mapa porque você pode extrair informações como
essas se clicar nos ícones. No entanto, talvez você queira
transformar esse mapa para realmente mostrar um atributo em vez
de apenas localizações de vulcões A maneira de fazer isso, pode
haver maneiras diferentes, depende do seu conhecimento
sobre citografia, mas eu poderia fazer o mapa
mostrar um atributo aqui Por exemplo, eu poderia
alterar as cores
desses marcadores para realmente
mostrar a faixa de elevação Digamos que possamos categorizar esses marcadores em três cores Digamos que verde, laranja e vermelho, verde seria para elevações 0 a 1 mil metros, por exemplo, ou 2.000 metros e
laranja seria de 2.000 a 3
mil metros, e então os marcadores vermelhos
representariam vulcões com uma elevação Então, como fazemos
isso com volume? Vamos voltar ao átomo. Aqui está nosso código,
o que temos até agora. Atualmente, o que estamos
passando para o argumento do ícone é um argumento de cor
com um valor verde. Basicamente, o que precisamos fazer fazer essas
dinâmicas para que a cor mude
dependendo da elevação. Infelizmente, não podemos
fazer isso com volumes. O volume não tem funcionalidade
nativa para criar cores dinâmicas
para seus marcadores. Portanto, precisamos ser um pouco criativos aqui e usar principais funcionalidades do
Python
para fazer Quando você pensa em dinâmica, eu penso em funções. Basicamente, esse loop
passa pela altitude de latitude, longitude e, em seguida, passa esses três valores
para essa expressão aqui No entanto, a cor está sempre sendo
passada como string. Mas como faço para alterá-lo
dependendo da elevação, por exemplo? Bem, a maneira de fazer isso
é criando uma função, uma função que obtém como entrada a elevação e, em
seguida , realiza algumas ações
dentro da função , realiza algumas ações
dentro da função e retorna uma cor
dependendo do valor da elevação. Você pode dizer que, se a elevação
for menor que isso, me
dê a cor verde, uma corda verde aqui. E assim por diante e assim por diante.
Para se ter uma ideia, a forma como isso funcionaria é, deixe-me escrever a função aqui. Esse seria um bom
lugar para fazer isso antes de criar um objeto de mapa. Mas sempre
é necessário criar uma função porque eu vou
chamar a função aqui, então você precisa criar
a função antes dessa expressão
daqui para cima Eu vou criar isso aqui. Vamos chamar uma função de
chamada de produtor. Vamos
simplificar por um tempo, apenas para demonstrar
como isso funcionaria. Vamos manter isso muito, muito simples. Digamos que retorne verde. Se você alterar isso para produtor de
cores e não
esquecer os colchetes, passando colchetes, isso
significa que você está chamando
a função Se você não passar os colchetes, isso significa que você está apenas chamando o nome da função e
não está executando a Vou continuar
assim
e executar o map one dot pi. Tudo bem. Recarregue e
você terá a mesma coisa Porque o que acontece é isso. Essa coisa aqui, essa
função carvão
será igual ao que
você devolver aqui. O tipo desse objeto
é, na verdade, uma string. É exatamente a corda verde. Portanto, agora você pode adicionar
algumas condicionais aqui. Basicamente, você precisa
passar uma entrada aqui, elevação, deixe-me escrever
qualquer variável que você quiser, escrever elevação e aqui, você precisa passar
L. L para letlon L, digamos que temos 62 linhas
na tabela de dados e for loop passará pela
primeira linha da tabela Ele obterá a elevação e a
passará para essa chamada de função. A função passará L para a elevação,
então você diz aqui, se a elevação for menor que 1.000, você
deseja retornar verde para a elevação
menor que 1.000 metros. elevação de uma folha está
entre 1.000 metros, é maior que 1.000 metros ou menos do que, digamos, 3.000 metros Devolva a laranja. Caso contrário, retorne vermelho. O vermelho será devolvido se nenhuma dessas condições
for satisfeita, o que significa que a elevação
não é inferior a 1.000 metros nem 1000-3
mil O que significa que o que resta é
maior que 3.000 metros. Nesse caso,
retornaremos vermelho. Para descobrir esses
valores, na verdade, você precisa explorar um
pouco os dados. Por exemplo,
talvez você queira examinar os dados rapidamente dessa forma
para ver quais valores você tem. Em seguida, decida o limite da
categoria. Mas você também pode fazer análise
estatística
mais significativa você pode fazer um histograma e ver
a distribuição dos dados e , em
seguida, decidir sobre esses valores Mas vamos manter as coisas simples e decidir
sobre esses valores. Vou resolver essa verificação se tudo estiver
pronto rapidamente. Deixe-me testar o código.
Vá e recarregue Temos algumas
cores diferentes aqui. Sim. Isso está parecendo bom. Deixe-me verificar novamente os valores. Por exemplo, o laranja está entre 1.000 metros
e 3.000 metros. Estamos indo bem. O vermelho
está acima de 3.000 metros. Parece que está funcionando.
95. HTML e Python: como adicionar e estilizar marcadores: Tudo bem. Espero que você
resolva o exercício, mas não se preocupe se seu mapa parecer um pouco diferente do meu. De qualquer forma, aqui estão meus marcadores, marcadores
circulares, na verdade. E eu tenho marcadores verde, laranja,
vermelho e laranja. Você entendeu a ideia.
E eles também têm algum tipo de opacidade Então, eu defini um valor de
opacidade de 0,7, o que significa 70% para eles Como você pode ver, você pode ver o marcador que está
embaixo deste aqui De qualquer forma, aqui está um código. Deixe-me explicar o que eu mudei do código original em relação
ao anterior. Eu mudei o marcador
para o marcador circular. A localização continua a mesma. Além disso, o atributo pop-up
permanece o mesmo. E então eu adicionei um
raio aqui de seis, o que significa seis pixels Esse é o tamanho
desses marcadores circulares. Em seguida, adicionei uma cor de campo. O atributo de cor do campo é para a área interna
do círculo. Você vê essa área laranja, mas também tem essa
cor externa aqui, que eu
defino cinza e você faz isso
com o argumento de cor. A cor é igual ao cinza
para todos os marcadores. A cor padrão será preta, que eu acho um pouco
pesada para os olhos. De qualquer forma, aqui está uma opacidade do campo. Para a transparência,
eu disse para 0,7 e pronto. Espero que isso esteja claro agora
e falarei com você mais tarde.
96. HTML e Python: trabalhando com dados JSON: Oi, bem-vindo novamente.
Nesta palestra, mostrarei como adicionar
outra camada neste mapa Atualmente, temos duas camadas. Temos o mapa base, que são blocos de mapa por
caixa de mapa, você pode ver aqui, e os dados são servidos
pelo mapa OpenStreet e você também tem sua camada
personalizada, que é uma camada
contendo marcadores circulares Nos sistemas de
informação geográfica GIS, eles são chamados de camadas Agora eu gostaria de adicionar uma
terceira camada ao meu mapa, que será uma camada poligonal Essa camada atual com marcadores pode ser chamada
de camada de pontos Você também tem camadas de linha
e camadas de polígono. Com pontos, os pontos são
melhores para representar locais e você tem linhas, as
linhas são melhores para representar características
geográficas que se assemelham a linhas
, como estradas e rios Então temos polígonos. Os polígonos são os melhores
para representar áreas. Por exemplo, nesta palestra, mostrarei
como adicionar uma camada,
uma camada poligonal que representa população
mundial Os países são
representados como áreas. E o que vamos fazer é que cada um dos países terá uma cor específica que indicará a
população desse país. Pontos para locais,
linhas para linhas e polígonos para Agora, é claro, você precisa ter alguns dados para criar
uma camada poligonal Assim como
fizemos com os marcadores, tínhamos alguns dados em
CSV em formato de texto E então usamos esses dados, os
abrimos com pandas e
depois iteramos essas linhas de dados
e adicionamos os marcadores ao Agora, para polígonos, a
forma de adicionar polígonos via volume é usando o método GeoJSON de ponto de
volume Basicamente,
deixe-me abrir um espaço aqui, a maneira como isso funcionaria é. Você deseja adicionar a variável do
grupo de recursos aqui, você deseja adicionar um
filho, que seria um objeto Geo JSON de volume Este é o método
com colchetes aqui. Isso cria um objeto GeoJSON. Para dados GeoJSON, usaremos
esse arquivo JSON de pontos mundiais. Você pode encontrar isso em
anexo nesta palestra. Deixe-me explicar o que é isso, mas cuidado para não abri-lo no átomo, porque se seu
computador estiver um pouco lento, seu átomo pode falhar. Tente abri-lo com um
editor mais leve, como o Notepad, por exemplo, ou o CAT no terminal
Linux ou Mac De qualquer forma, esse é o arquivo JSON. Você pode se referir a ele
como JSON ou GeoJSON. Na verdade, o GeoJSON é um caso
especial de JSON. Basicamente, o formato
é sempre o mesmo. Ele começa com
colchetes e, basicamente, contém uma string
que é como um dicionário
Python
com Chaves chave e valor onde esse colchete ondulado
termina em algum lugar aqui, eu acredito, se eu não Agora, essa acaba aqui. Sim. Então você tem a outra geometria chave.
O que é geometria Bem, o tipo de geometria
é multipolígono. Basicamente, você tem
esses atributos que descrevem os dados. Digite coordenadas de vários polígonos. Isso agora está começando a descrever as características,
os polígonos Essas são as coordenadas
do primeiro polígono que
será exibido no Digamos que este seja
um país específico que seja Antígua e Berbuda Um país pequeno, mas de qualquer forma. Essas são as
coordenadas que
determinarão a localização do
polígono em seu Basicamente, o volume lerá todas essas informações e decidirá onde
colocar os polígonos Então você também pode usar outros atributos disso,
como população, que está aqui, você usará esse valor populacional para colocar
uma cor para essa população. E assim por diante, você tem todos os países
do mundo nesse arquivo JSON Passe alguns minutos examinando esse arquivo para entender
sua estrutura. Na próxima aula,
vou continuar carregando o arquivo JSON no
Python
e exibirei Nos vemos lá.
97. Python e JSON: adicionando uma camada de mapa de população: Ótimo. Na aula anterior, mostrei como é a aparência de um arquivo
JSON Nesta palestra, adicionarei esse arquivo JSON ao código Lembre-se de que eu
lhe forneci o arquivo JSON. Na palestra anterior,
você pode
baixá-lo dos recursos da palestra. Portanto, esse método GeoJSON obtém um atributo de dados
que é igual ao objeto
de arquivo dos dados JSON Basicamente, você precisa
criar um objeto de arquivo Python que possa ser criado com open Lembre-se de que open é um método Python
clássico para criar objetos de arquivo Lá vai o caminho
sobre o arquivo. Acontece que isso está
no mesmo diretório meu script Map one dot py. Estou acabando de passar pelo JCO mundial. Basicamente, estou
abrindo-o no modo de leitura. Vou deixar assim
por enquanto, salvar, executar. Acho que vamos ter um erro aqui. Sim, precisamos adicionar
um parâmetro de codificação lá, conforme sugerido
pela mensagem de erro Isso está dentro
do método aberto. É igual a UTF oito SIG. Diga novamente, vá e execute o carregamento, e teremos os polígonos
exibidos no mapa Isso foi muito fácil de fazer. Algo que você deve saber
é que você também pode adicionar pontos por meio do GeoJSO Nesse caso, adicionamos polígonos, mas esse arquivo JSON também
pode ter linhas ou
pontos em Então, neste caso, tínhamos um
atributo que dizia são vários polígonos, mas podem ser Nesse caso, o
volume exibirá esses recursos dependendo
desse tipo de atributo aqui. Obviamente, você também teria o atributo de coordenadas com as coordenadas da linha. Nos pontos em que
a linha quebra e gira, no caso de pontos, você teria pares
de coordenadas aqui. Espero que você tenha entendido.
Isso foi sobre essa palestra. Na próxima palestra,
mostrarei como criar um mapa coroplético,
que é um mapa que usa cores de áreas Nesse caso específico, o que fazemos é ter
esses polígonos com cores
diferentes para representar a população
do
mundo para qual Faremos isso na
próxima palestra. Te vejo.
98. Python e JSON: estilizando a camada de população: Oi, de novo. Nesta palestra, mostrarei como criar um mapa de
país por população Mostraremos a população de cada país por meio de cores
graduadas. Então, vamos pensar em
uma variedade de cores para representar a população
de baixa a alta. Temos essa informação
em nosso arquivo JSON w dot, que é armazenado nesse atributo
pop 2005 Pop 2005 significa
população de 2005, que é bastante antiga, mas não
deve ser um problema
para fins educacionais. Então, vamos voltar ao código e
à maneira alterar
a cor desses
polígonos porque, por padrão, temos essa cor verde Também há transparência
nos polígonos. Você pode ver o
mapa base em segundo plano. Para mudar isso, você precisa
acessar o argumento da
função de estilo. Mas eu errei algo aqui da palestra anterior, o que pode causar
alguns problemas Isso não precisa
estar entre colchetes, então exclua esse aqui também Portanto, temos um, dois, três colchetes abertos e
três colchetes de fechamento Agora, deve estar tudo bem. adicionar outro
argumento
ao GeoJSON Esse é o primeiro argumento. Os dados são o primeiro argumento
que termina aqui. Adicione aí outro argumento de
função de estilo e você pode realmente
quebrar a linha aqui. Você pode quebrar
linhas em Python
quando a expressão está dentro de colchetes ao redor de
colchetes,
colchetes ou colchetes . Nesse caso, essa expressão
está entre colchetes, então podemos
dividi-la e é bom
dividi-la na vírgula função de estilo é igual a, agora isso espera uma função
Lambda As funções lambda são
como funções, funções
normais, mas são escritas em linhas
únicas de código Por exemplo, digamos que
L seja igual a Lambda. Essa é uma função Lambda
X em potência de dois. Oh, desculpe, eu cometi um erro de digitação aí,
não um amigo, mas um
cordeiro. Outro A é uma função aqui,
assim como você
teria uma função normal,
e então você pode chamar L. Você pode passar um valor como cinco e isso retornará
cinco em potência de dois. Como você pode ver, você
pode escrever a função em uma única linha. Isso também pode ser
útil em outros casos como este aqui, que
você verá daqui a pouco. Lambda X. Isso também permite que você
escreva funções anônimas Essa função
não tem nome. Como aqui, atribuí um nome a essa função porque
precisei chamá-la mais tarde. Mas este aqui, não
precisamos chamá-lo mais tarde, então você não precisa
dar um nome. Aqui, a sintaxe estaria
correta se eu fizesse exatamente isso. Vamos seguir em frente e fazer isso. Preencha a cor com C
maiúsculo, F
minúsculo, maiúsculo e isso
deve estar Digamos, amarelo. Agora, se você quiser,
pode deixar assim. Salve o script. Saia
do shell do Python e execute o script A execução correu bem. Deixe-me verificar o mapa, recarregar e você verá que as cores
dos polígonos
mudam É assim que você pode alterar os atributos do
seu arquivo JSON Para dizer, basicamente você adiciona esse atributo que
não está no arquivo JSON
se você pesquisar por ele Você não encontrará nada abaixo. Agora você pode
brincar com isso
adicionando condicionais
dentro deste dicionário, como I X properties Pop 2005 é menor do que,
digamos, 10 milhões, dez, um, dois, três,
um, dois, três O que estou fazendo aqui é
dizer que defina amarelo para a quinta cor se X representar
a característica adjacente aqui. Se as propriedades realmente
forem o atributo Pop 2005
desse atributo desse
atributo que está aqui, isso é Pop 2005. Eu sei que isso é um
pouco complicado. Deixe-me pegar uma embalagem de software. Agora eu tenho todos os contornos de
texto aqui na exibição e aqui
o Pop 2005 é, na verdade, parte desse
dicionário até aqui Este dicionário
é um conjunto de propriedades. Esse dicionário é o valor
dessa chave da chave de propriedades. Isso significa
que estamos acessando o valor do
esquema da hélice usando essa sintaxe
, conhecida em Python Enquanto isso, as propriedades X, o que é X, aqui
representam características. Então você está acessando
propriedades a partir de recursos. No fundo,
é uma espécie de caixa preta, mas o volume, o que o volume fará
é examinar todas as características de
todos os polígonos e verificar se o valor do pop 2005 é
inferior a 10 milhões
e, se for, definirá essa cor para
preencher o atributo de cor É mais ou menos isso. Eu acho que é melhor
colocar isso verde. Se for menos de 10 milhões, coloque verde ou laranja. Se estiver entre 10 milhões,
faça a mesma coisa aqui. Propriedades, na verdade, você
pode quebrar o código aqui. Então, propriedades Pop 2005 ,
vamos colocar aqui 20 milhões. Esses são apenas números
arbitrários. Você pode colocar tudo o
que quiser, mas isso afetará a forma como seus polígonos são
classificados Para a população de
10000000-20 milhões, obteremos Caso contrário, vermelho. Tudo acima de dez
será colorido em vermelho. Salve isso e espero que
funcione. Sem erros. Recarregar Temos os EUA coloridos em
vermelho porque tem uma população de
mais de 20 milhões de pessoas, parece estar funcionando bem. Sim, Portugal Portugal
tem uma população de
cerca de 12 ou 15 milhões de
pessoas. Não tenho certeza. Está na faixa intermediária do
nosso algoritmo de classificação. , é mais
ou menos isso, e se quiser, você
pode fazer perguntas. Ficarei feliz em ajudá-lo e falarei com
você mais tarde. Obrigada.
99. Python e JSON: adicionando um painel de controle de camada +: Olá, bem-vindo novamente a
mais uma palestra sobre mapeamento
da web com
Python Este é o mapa
para o qual construímos e ele contém
uma camada base,
uma camada poligonal e uma camada de marcador
. Esse é o nosso código. Agora, o que eu quero
fazer nesta palestra implementar um
recurso que me
permita ativar e desativar as
camadas personalizadas Com camadas personalizadas, quero dizer
a camada poligonal e a camada de marcador porque
não é possível desativar o mapa base, pelo menos
até onde Não faria sentido
desligar a camada base. Você não quer uma página em branco. Então, vamos ver como fazer isso. O principal recurso aqui é classe
de controle de
camada do módulo de volume, que pode ser adicionada desta forma. Você deseja apontar
para o objeto
de mapa ao qual deseja adicionar um filho. O controle de camadas é
adicionado quando criança. Controle da camada de volume. Agora, isso não vai funcionar. Mas eu ainda quero executar
isso para que você não cometa
esse erro mais tarde. Deixe-me recarregar a página. Você só vê o mapa base aqui, sem nenhuma camada. A razão pela qual isso não funciona é que quando você adicionou o
controle de camada no mapa, você ainda não adicionou
o grupo de feições, que é um objeto que contém a camada Jason
e a camada de marcador Então, basicamente, no
controle de camadas,
procuraremos o
grupo de feições adicionado ao mapa, mas
ele não o encontra neste momento. Portanto, as coisas estão confusas. É importante colocar
essa oferta de que você adicionou a
camada do grupo de feições no mapa aqui. Execute novamente. Recarregue o mapa e você verá as camadas lá e
você verá esta caixa aqui Caixa de mapa brilhante. Isso é sobre o mapa base
e você não pode desativá-lo. Você também tem esse item
Meu mapa aqui no painel de controle de
camadas. Esse é o painel
de controle da camada e você pode ativar e desativar essa camada. Mas, como você vê, isso
é desligar e ligar o polígono e a camada de
pontos ao mesmo tempo, o que é algo que
você não quer Vamos em frente e mudamos isso. Vou explicar por que isso acontece. Isso está acontecendo porque o controle de
camadas, o que
ele faz, é procurar objetos adicionados ao mapa
com uma criança, como aqui. Você adicionou um
filho e
adicionou somente um filho
ao objeto do mapa. Portanto, o
controle de camadas considerará esse objeto como um único item do painel de controle de camadas. Mas esse objeto do grupo de recursos contém marcadores circulares, mas também contém
a soma GOJ Camada. Portanto, você precisa
mudar sua estratégia aqui. Como você pode fazer isso?
Pode haver maneiras diferentes. Uma maneira é realmente
criar um
grupo de características para vulcões Vamos chamá-lo de Fg V. Você adiciona GV aqui e depois quer
outro grupo em destaque Deixe-me copiar essa
linha e colar aqui. Você quer outro
grupo de características para a população. Vamos chamar essa população. Vamos chamar esses
vulcões assim,
mudar o nome da variável FGP, FGP aqui , FV ali. Adicione uma criança alfa que deve ser FG P
para a população. Agora está tudo bem. Vamos ver se o controle de camadas será capaz de ler esses
dois grupos de feições agora. Vá e recarregue o
mapa, parece bom. Vulcões funcionando
bem, população também. Tudo está funcionando
bem. Isso é um mapa. Se você foi capaz de construir
isso como eu fiz, então bom trabalho. Você também pode optar por não
usar grupos de recursos, na verdade. Você poderia ter adicionado GeoJSON diretamente
ao mapa. No entanto, neste
caso, para vulcões em que você está executando o método at child
várias vezes, nesse caso, você teria uma
camada para cada Você teria adicionado
62 filhos ao seu objeto de mapa
se tivesse mapeado sem o grupo de
recursos aqui. Isso significa que neste painel de
controle aqui, você teria 62 entradas, 62 camadas, e
não é isso que você quer. O grupo de
recursos é útil aqui. Para vulcões, é necessário. Mas para GeoJSON, você poderia ter usado o mapa aqui e
tudo ficaria bem Mas, para fins de consistência,
é bom adicionar ambos a grupos de recursos
específicos ou específicos. Vulcões aqui e
população aqui. Então, esse é o código, e espero que você tenha gostado desse programa e fique à
vontade para fazer perguntas. Falarei com você
mais tarde. Te vejo.
100. Aplicativo 2: Glossário de inglês +: Olá, bem-vindo a esta nova
seção do curso, e nesta seção
começa o negócio real. Então, nesta seção,
vamos desenvolver a primeira aplicação
do curso. Até agora, você conhecia
o básico do Python. Você aprende funções, loops, condicionais e manipulação de
arquivos, etc. Agora vamos praticar
todos esses conceitos criando programas
reais que podem
ser usados
pelos usuários em vez de apenas percorrer
cadeias e números triviais e E então, o que vamos
construir nesta seção? Bem, você vai criar um programa no qual você
pode dar uma palavra, uma palavra em inglês, e
o programa retornará a definição
dessa palavra em inglês. Então, deixe-me prosseguir e
demonstrar o programa. Estou usando o Python três.
App dot p é um script. Portanto, o programa solicita que
você insira uma palavra para a
qual você deseja a
definição. Por exemplo,
digamos Mountain. E então você obtém a
definição de montanha. E, nesse caso, ele tem duas definições. Portanto, a montanha montanhosa
é uma característica
da superfície da Terra que
se eleva acima da base. A, montanha tem outro significado, que é um
grande número de coisas
não colocadas em uma pilha De qualquer forma, existem palavras que têm apenas um significado, como
matemática. Espero que sim. Portanto, você obtém apenas uma
definição para matemática. Mas o programa também tem
outros recursos,
como se você colocasse
AN com N duplo, então com um N extra
e pressione Enter. O programa, em vez de travar, ele exibe uma mensagem Diz a você: Em vez disso, chovi
? Portanto, é um programa bastante
inteligente que adivinha a palavra que o usuário tinha em mente pode ter tido em mente
ao digitar a Então, insira Y se sim, se você quis dizer chuva ou N se não. Ah, sim, eu quis dizer chuva, então por quê? E você obtém a
definição de chuva,
que por acaso tem
duas definições. Esse é o primeiro, e
esse é o segundo. O programa
dirá que, se você digitar uma palavra muito aleatória que não tenha nenhum
significado como esse, você receberá
a mensagem, a palavra não existe Verifique novamente
porque o programa não consegue encontrar uma
palavra semelhante a esta. Ele não consegue encontrar uma palavra primeiro. Além disso, ele tenta encontrar
uma palavra semelhante a esta, mas não,
porque eu não acho que exista uma combinação para isso. Então, ele imprime essa mensagem. Há também outras
coisas como, você sabe, se você tem uma mistura de letras maiúsculas, como R e A
maiúsculas, você ainda obtém a entrada
correta Então isso é um programa. Ele tem
uma interface de linha de comando, o que significa que você é uma entrada, está passando
a entrada pela linha de comando
e está recebendo a entrada novamente
da linha de comando. No entanto, mais adiante nas próximas seções, explicarei
seus aplicativos web, como criar
aplicativos web com Python Então você volta aqui
e realmente cria uma aplicação web usando o código que você aprenderá
nesta seção. Assim, você pode estender esse programa para torná-lo mais fácil de usar com uma interface da web na
qual os usuários podem inserir a entrada
por meio de um formulário da web, percorrer uma
página da web e, em seguida, pressionar um botão e obter a
saída na página da web. No entanto, o código que
você aprenderá nesta seção é
muito importante. É chamado de Python. Então, você aprenderá
sobre condicionais e loops. Então, você implementará
tudo o que aprendeu na seção anterior desenvolvendo este programa. Então, espero que você goste
e desejo-lhe sucesso. Nos vemos na próxima palestra.
101. Como entender seu conjunto de dados em Python +: Ei, oi de novo.
No vídeo anterior, fiz uma demonstração do
programa para que você saiba como é a aparência do programa e qual é a saída que
o programa gera. Também a interface
do programa, que é uma interface de
linha de comando. Você insere os dados
pela interface, o usuário insere os dados pela interface
da linha de comando e você obtém a saída novamente
da linha de comando Agora eu criei uma pasta aqui em algum lugar e
dei um nome a ela. Você pode dar
o nome que
quiser dentro desta pasta, vou colocar todos os
arquivos desse projeto. Estamos falando sobre os
arquivos de dados, como data dot JSON. Este é um arquivo que contém um vocabulário onde o
programa extrairá, solicitaremos uma palavra e esse arquivo tem a
definição da palavra E também os arquivos dot Pi
serão colocados aqui. Conhecemos a saída,
agora precisamos descobrir como
chegar a essa saída e
adotaremos a abordagem passo a
passo, que significa que
primeiro
desenvolveremos uma
versão simples do programa, basta dar uma palavra ao programa e o programa retornará a
definição dessa palavra. Mas isso será muito
simples porque o usuário às vezes pode passar uma
palavra que não existe
e, como programador, você precisa contar essa palavra
para aquela palavra inexistente Em vez de quebrar,
interromper o programa, mostrar um erro para o usuário, você precisa mostrar uma mensagem mais amigável para o usuário Eu farei isso
nos próximos vídeos. Mas, por enquanto, a
primeira coisa em que
precisamos pensar são os dados. Então, fiz algumas pesquisas
na web e encontrei esse conjunto de dados de palavras
e definições Agora, isso é cerca de
5 megabytes de dados. No átomo, demora
um pouco para abrir, então eu cliquei nele e ainda estou esperando que ele
abra. Agora ele abre. Se seu átomo congelar, você
poderá abri-lo com um editor mais leve,
como o Notepad ou o Nano
no Mac ou De qualquer forma, este é
um arquivo JSON de pontos. O que é Jon JSON é
como uma linguagem. Alguns dizem que não é uma linguagem, é apenas um conjunto de regras
para formatar alguns dados. O JSON segue esse formato. Começa com um colchete e, em
seguida, tudo o que temos são pares
de chaves e valores Isso é como um dicionário de
Python. A chave é separada
pelo valor por uma coluna. Nesse caso específico, nossos valores estão entre colchetes, que sugere que
às vezes você pode ter mais de um item dentro
dos colchetes, por Deixe-me pesquisar a palavra
control F ou Command F. Rain. Isso nos levará até aqui. Primeiro, deixe-me ver
e usar a capa macia do Toogle. O que isso fará é caber o texto na minha tela. No momento, você vê que precipitação está fora
dos limites da tela. Isso também demora um pouco porque temos muitos dados aqui. Agora os dados parecem melhores, então deixe-me pesquisar chuva novamente, descubra se essa é a chuva chave, digamos, a palavra chuva e essa é a definição de chuva. Nesse caso,
temos duas definições porque, para algumas palavras, você pode ter
mais de um significado ou ter mais de uma forma. Por exemplo, isso é
a chuva como substantivo, é uma precipitação e
esse é o verbo para Quando chove para cair das
nuvens e das gotas de água. É um verbo e um substantivo e
eles são separados por uma vírgula. Então, isso é como
um dicionário Python. Agora precisamos descobrir como carregar esses dados no Python Porque para acessar
dados desse arquivo, primeiro
você precisa carregá-los no Python como um tipo de dados específico do
Python
e, em seguida, acessar os dados desse tipo de dados Pense por um momento qual tipo de dados
Python seria mais apropriado
para esse arquivo JSON Pense nisso
e mostrarei exatamente isso na próxima
palestra. Nos vemos lá.
102. Carregando dados JSON em Python: Então, acredito que foi muito
fácil perceber que
a melhor maneira de
carregar esses dados em Python é um dicionário Python Isso se parece com
um dicionário Python e, quando você o carrega em um dicionário
Python
, fica muito fácil
acessar um valor para uma chave Então, como carregamos isso
em um dicionário Python? Bem, deixe-me abrir um shell de
comando aqui. Por enquanto, vou
demonstrar algo rápido em um shell Python interativo Mas primeiro, talvez seja necessário fechar esse arquivo JSON porque isso está desacelerando o atom.
Não diga as mudanças. De qualquer forma, eu não fiz nenhuma mudança. Python três, que
abrirá meu Python 3.6 0.1. De qualquer forma, mesmo
que você tenha o Python 2, esse programa funcionará da Então, como carregamos o JSON
em um dicionário Python? Bem, para isso, precisamos usar
a biblioteca padrão JSON. Com uma biblioteca padrão, isso significa que você não
precisa instalar o JSON Você só precisa ir
em frente e importá-lo. Depois de fazer isso, existe um bom método JSON dot
Load Esse método de carregamento, o
esperado, na verdade, posso mostrá-lo assim, ajuda JSON dot Load
This obtém esse argumento aqui, que é um arquivo semelhante a um objeto que contém
um documento JSON Estamos falando sobre um objeto de
arquivo em Python e precisamos criar o A maneira de fazer isso é simples. JSON novamente faça Load. A forma como criamos um objeto de arquivo é usando o método open. Você já sabe disso. Em seguida, você passa o caminho para o arquivo. Agora, como meu terminal aqui
está apontando para essa pasta, eu só preciso passar um nome de arquivo. Eu não preciso passar por
nenhum caminho completo lá dentro. Assim, você pode
passar o método R, que significa modo de leitura, ou pode simplesmente
deixá-lo assim e o modo de leitura estará por padrão. Certifique-se de fechar os
colchetes duas vezes. Temos dois
colchetes de abertura aqui, dois colchetes
de fechamento aqui, só isso Agora, o que são dados?
Os dados são um dicionário. É um dicionário Python
e você pode imprimi-lo. Sim, são muitos dados. Isso demorou um pouco, mas normalmente você não precisará
imprimir o dicionário inteiro. O que você pode verificar é
acessar uma palavra, uma chave
do dicionário. Digamos que o pano da chave, você precisa usar colchetes,
desculpe, aspas para a Isso é o que você obtém,
defina o valor da palavra
para a classificação chave Agora que você sabe como
isso funciona, mais ou menos, tente criar uma
função que obtenha como
entrada uma chave e, em seguida retorne o valor
dessa chave específica, e também tente incorporar o carregamento de adjacon fall e também imprimir a saída Se você tiver problemas com
isso, no próximo vídeo, mostrarei como fazemos
isso. Nos vemos lá.
103. Como fazer o aplicativo retornar a definição de uma palavra: Espero que você tenha
descoberto como criar uma função que receba uma chave, uma palavra e retorne a
definição dessa palavra Deixe-me
criar rapidamente esse programa. Deixe-me chamar esse aplicativo de
One point in pot Jason. Dados, por exemplo, veja JSON load, open data dot JS É isso mesmo. Defina a função. Traduza, deixe-me
chamar isso de tradução. Word, e tudo que você precisa
fazer é retornar a palavra de dados. É isso mesmo. Então você pode, digamos, fazer algo
como usar a palavra águia para denunciar ou fazer isso dinamicamente
solicitando informações Imprima uma palavra assim, deixe um espaço e, em seguida,
tudo o que você precisa fazer é imprimir a saída
do dicionário. Como você conhece esse
dicionário por enquanto, ele apenas retorna uma string, mas você não está
imprimindo nenhuma saída. Se você quiser mostrar essa
saída na linha de comando, precisará
imprimir a palavra traduzida. É isso mesmo. Agora, não se confunda
com esses nomes de variáveis. Essa é uma variável global e também é uma variável
global. Definimos a variável aqui
e a passamos aqui. Então, tudo o que é passado aqui vai
para este aqui. Isso pode ser uma palavra diferente, um nome de variável diferente. Então, digamos que W W. Essa
é uma variável local. Tem um significado dentro da função e
pode ser tudo. Se você passar W aqui
, tem que ser W aqui também. Isso passa esse valor
para esse valor aqui. Normalmente, os programadores
preferem simplesmente digitar o mesmo
nome aqui e ali Mas para você, como iniciante, eu queria
mostrar a diferença que isso não precisa
ser o mesmo com isso Salve o script, talvez
abra outro terminal. Python three app dot pi,
execute, Enter a word,
Rig, e esta é Que tal essas palavras? Temos um erro grave lá. Mas você não quer
mostrar isso
ao usuário porque isso não
é muito legível Rastreie a última chamada mais
recente Como contabilizamos esse cenário em nosso código?
Você precisa descobrir isso. Pense sobre isso.
Mesmo na próxima aula, faremos exatamente isso, então precisamos
levar em consideração que a palavra que o usuário passa pode não estar no conjunto de chaves do
dicionário Chuva era uma chave de dados do dicionário
Jason, mas esse nome não era, então precisamos contar com isso Eu vou te mostrar isso na
próxima palestra. Te vejo.
104. Como o aplicativo lida com palavras inexistentes: Tudo bem, vamos
continuar e tornar esse programa mais fácil de usar. Em vez de mostrar
esse bloco de erro, mostraremos
uma mensagem que
diz que a palavra não existe Verifique novamente
ou algo parecido. A maneira de fazer isso é, deixe-me ir para o shell interativo do Python Você pode verificar algo como aquela chuva nos dados
e obter dois. Se você fizer isso em
dados, ficará falso. Precisamos fazer uso
disso e dizer que, se a palavra estiver nos dados, isso tem que ser W. Estamos
falando sobre essa variável,
então, se estiver nos dados, o que você quer fazer
é retornar o valor. Esse é o valor e, se retornar verdadeiro, será executado, s, retorne a palavra
que não existe, verifique novamente. Quando isso é falso, então o else é executado. Na verdade, a expressão
abaixo de else é executada, e isso não é executado. Como você vê, isso é bastante
legível, muito legível com humor. Esse é um bom dos ótimos recursos
do Python Eu posso salvar isso agora e ir
aqui, executar o programa. A chuva funcionaria como antes. E isso diz que a
palavra não existe,
por favor, verifique
novamente. Tão fácil quanto isso. O programa está tomando forma. No entanto, você precisa fazer
mais testes para verificar se há entradas
diferentes, a fim de levar em consideração
todas as entradas possíveis que o usuário possa colocar lá Digamos que o usuário coloque chuva em letras
maiúsculas e isso
diga que a palavra não existe Mas, na verdade, chuva
é a palavra que existe em seu conjunto de dados. E então, como contamos letras maiúsculas
diferentes? Você também pode ter uma mistura
de letras como essa, e ainda diz que
a palavra não existe ou até mesmo chove desse jeito. A palavra não
existe. Pense nisso novamente e,
na próxima palestra, implementarei isso, o que
é muito fácil. Nos vemos lá.
105. Como o aplicativo lida com palavras chamadas para maiúsculas: Ótimo. Agora temos esse
programa que retorna um valor de
uma palavra que colocamos. Eu raciocino a definição
dessa palavra. Também conta com palavras
não existentes em nosso conjunto de dados, que
é data dot JS Para contar os diferentes casos de letras que podemos inserir, você pode consultar o querido STR mostra os métodos que
você pode aplicar a uma string Aqui está um método inferior. O que isso faz é se
você colocar chuva lá, então o método deve
ser aplicado com colchetes. Você recebe chuva na
versão inferior da carta. Como nossos dados estão todos em minúsculas em nosso JS de pontos de
dados no arquivo, o que você faz é assim que obtiver a
entrada aqui, a string, convertê-la em
minúsculas e depois passar
essa versão para a expressão do eixo do dicionário Isso seria algo
como, você sabe, W é igual a w ponto Estamos atualizando
o valor W aqui, a string que o usuário
insere, e então o W aqui
será passado minúsculas, tão fácil quanto Deixe-me fazer um teste rápido. Chova e você terá a definição
correta de chuva. Vamos pensar em
mais valores possíveis que o usuário possa inserir. Deixe-me limpar a
linha de comando, para que você veja melhor. Deixe-me ligar para o programa novamente. O clima funciona bem. Mas que tal, em vez
de colocar chuva, o usuário
digitar um extra lá dentro. O programa diz que a palavra
não existe, o que é verdade. Mas, como programador, você quer tornar seu programa mais inteligente possível Nesse caso, talvez você
queira considerar a verificação de cadeias de caracteres semelhantes
às inseridas pelo usuário Em, você precisa
verificar se há alguma string
semelhante a essa palavra. Em vez de dizer que a
palavra não existe, você quer sugerir ao usuário que talvez você tenha se referido a essa palavra, mesma forma que faz
uma pesquisa no Google. Isso é um pouco complexo,
mas nem tanto. Mostrarei como
implementar isso na próxima palestra, passo a
passo. Então, lá.
106. Como calcular a semelhança entre palavras: Bom. Como mencionei anteriormente
no vídeo anterior, agora precisamos levar em consideração quando o
usuário digita algo errado. Em vez disso, eles inserem um extra lá ou
algo parecido. Nesse caso, você quer
que o usuário saiba
que ele digitou algo errado
lá. Como fazemos isso? Bem, se você não tem
ideia de como fazer isso, a melhor prática
é realmente fazer alguma pesquisa no Google,
porque o mundo da programação é muito amplo e você não precisa
necessariamente conhecer todas as
soluções ou soluções possíveis para fazer algo Basicamente, precisamos
descobrir um algoritmo para comparar,
digamos, a acusação com
N e a palavra real
acusação com um N, no final e dizer se
elas são, decida se são semelhantes ou não,
mas você não precisa reinventar
a roda se outra pessoa já a roda se outra pessoa É por isso que você
precisa fazer uma pesquisa na web e ver
se isso é algo se
existe uma biblioteca lá ou alguém, um
código-fonte que faz isso, uma função ou
algo parecido. Mas geralmente
você encontra uma biblioteca para isso. Se você fizer alguma pesquisa, perceberá que pode fazer isso
usando algumas bibliotecas,
e uma delas é
uma biblioteca
padrão chamada D Flip. A propósito, você pode obter uma lista das
bibliotecas padrão do Python nesta página HTML de pontos de
índice da biblioteca Python.org. Esse é o link. Aqui estão todas as bibliotecas padrão que você pode importar para o Python Deixe-me ir aqui e importar o Dilip. Esta é uma biblioteca
para comparar texto. Um dos métodos
é o sequence matcher. É um nome longo, então o que
você pode fazer é dizer, a partir de lip, Import sequence matcher O que ele faz é combinar
sequências. Você não precisa passar nenhum lá. Nenhum é o valor
do argumento ser lixo. O primeiro
argumento é chamado de lixo, o que significa que, se você estiver
comparando dois blocos de texto, nesse caso, estamos
apenas comparando palavras Se você está comparando
dois blocos de texto e tem
algum lixo lá, você tem linhas de quebra e espaços, então você precisa passar aqui uma função que
ignora essas Não temos esse cenário por enquanto, então vamos
simplificar. Não
aceitamos essa discussão. Em seguida, você passa as duas strings, deseja comparar a palavra
chuva com N duplo com a palavra real chuva e isso retornará um objeto de combinação de
sequência, que não é nada interessante, então você precisa aplicar
o método de proporção a
isso para obter a proporção real Isso indica uma
semelhança entre essas duas sequências
em uma escala Eles dizem que
são bem parecidos. Agora, trata-se de obter a semelhança
entre duas strings, mas o que precisamos é,
basicamente, ter uma lista,
uma sequência de Nós temos essas chaves do dicionário. Temos um dicionário
com muitas chaves e o usuário passa uma palavra, digamos raiva com
N e você
precisa comparar essa palavra
com todas as chaves
do dicionário porque você
não pode comparar RN com N com um N em seu programa porque
você não sabe que isso é realmente
semelhante a É o
problema inverso, por assim dizer. Mas o Diclip tem outro
recurso para isso,
chamado de partidas acirradas Você precisa importar isso
das partidas do DLPGClose. Mas vou consumir esse recurso
na próxima palestra. Nos vemos lá.
107. Encontrando as melhores combinações em uma lista de palavras: Então, examinamos a
classe de combinação de
sequências que retorna o método de
proporção dessa classe Ele retorna esse número, mas agora precisamos
ver como tirar
a palavra mais semelhante de uma lista ou das
teclas de um dicionário. Vamos nos
concentrar primeiro na sequência. Uma lista é uma sequência e, a
partir da entrada de Philip, você obtém correspondências próximas Agora, se você ajudar,
consiga combinações próximas. Você pode ver os
argumentos que você pode passar para esse método. A primeira é a palavra. Essa será a palavra
que o usuário passará
e, em seguida, você terá uma
sequência de possibilidades. Palavra é uma sequência para a qual combinações
próximas são desejadas,
normalmente uma string. Normalmente, essa será uma string que você
deseja comparar. Possibilidades é uma lista de sequências ou uma lista
de strings que você pode dizer, normalmente é uma lista de Então você tem N igual a três. Isso definirá o número de correspondências que você deseja que
o método de correspondências
aproximadas retorne. Digamos que você passe uma lista
de possibilidades com seis itens e cada item tenha essa proporção de 1 a 0 0 a 1 e esse método
retornará as três correspondências mais
semelhantes, as sequências de caracteres mais semelhantes
à palavra passada Você pode alterar o valor desse
argumento se quiser, e
você tem um limite Essa é a proporção
aqui, por padrão, isso retornará somente
os itens que tenham uma proporção de pelo menos
0,6 ou maior que isso. Sob isso, as partidas não
incluirão. P para a ajuda e
deixe-me tentar partidas disputadas. Vamos ver o que obtemos. Digamos que chova, então você tem uma lista
entre colchetes, é claro Digamos que ajude as
pirâmides e a chuva. Vou deixar o N e o ponto de
corte como estão por padrão. Então, neste caso, você recebe chuva. A razão pela qual você chove é
porque a chuva teve um limite maior que 0,6 ou
semelhante a esse Se você estiver
interessado no limite, você pode usar uma correspondência de sequência, mas não estamos interessados
no valor específico E então Rain foi a
única que satisfez
essas condições. Recebemos chuva aqui como uma lista. Conseguimos tirar a correspondência
aproximada de uma lista, mas como podemos obter
a correspondência
aproximada das chaves do dicionário? Bem, ainda temos a variável de
dados aqui, que eu carrego anteriormente
aqui nesta sessão, eu a carrego do arquivo JSON Então, com teclas de pontos de dados. Existe um método de dicionários, chamado de chaves
,
e com isso, você
pode obter uma lista de todas as chaves do Estamos falando
apenas das chaves e de todos os valores das chaves. Essas são as palavras e cada delas tem um valor
associado a elas. Basicamente, você pode verificar
o tipo de data dot kiss, só para ver o que é. É como um objeto de beijo escavado, mas se comporta como Tudo o que você poderia fazer então é aplicar os métodos G matches. Passe a chuva lá para data dot
kiss. Vamos ver o que obtemos. Temos três partidas. Ele teve chuva. Treine e chova. Se você ultrapassar o final de cinco, obterá mais partidas lá. Mas é importante observar
que a lista aqui está ordenada. A primeira palavra é aquela com maior
proporção de semelhança, estamos interessados apenas
nessa primeira palavra Como conseguir isso? Bem,
você vai ignorar esse número, pois deseja
apenas a primeira palavra e pode passar zero para
lá porque essa é uma lista e o primeiro item
tem um índice de zero, então você recebe
chuva pela palavra digitada incorretamente Então, basicamente,
temos o mecanismo para tirar a palavra
mais semelhante da sequência agora, e tudo o que precisamos fazer é implementar essa funcionalidade
em nossa função aqui. Primeiro, gostaria apenas de
informar ao usuário, por meio uma mensagem, que ele
inseriu uma palavra errada. Eu só quero que o usuário saiba
para que ele possa executar
o programa novamente. Da próxima vez, eles inserem
uma nova palavra por enquanto, mas depois faremos
algo mais inteligente. Então, por enquanto,
pense nisso, dê uma mensagem em
que você mencione sua sugestão com
a palavra correta que o usuário possa
ter em mente. Vamos fazer isso na
próxima palestra. Te vejo.
108. Como encontrar a palavra mais semelhante em um grupo de palavras: Ótimo. O programa está indo bem. Espero que você goste disso. Não é um programa grande , então não temos
muitos códigos aqui. Mas, no entanto, isso implementa
muitos aspectos do Python Estamos carregando dados
em Python em tipo de dados Python
e temos funções,
temos condicionais aqui,
temos entradas do usuário
e, posteriormente, também
implementaremos quatro loops nesse código Falaremos sobre isso mais tarde,
por que precisamos de quatro loops. Temos bibliotecas,
estamos importando bibliotecas aqui, aqui é Jason Também precisamos importar
a biblioteca Diflp. No qual estamos trabalhando
atualmente. Vamos nos concentrar na reviravolta por enquanto. E a palavra que temos é que passamos essa string com double e aqui temos um
conjunto de sugestões. As melhores combinações da palavra estão fora das teclas do
nosso dicionário. Mas o usuário também pode passar uma palavra que não
existe e que não tem nenhuma
correspondência semelhante. Basicamente, você tem
três cenários. O usuário insere a palavra exata como chuva, e imediatamente você retorna os dados com essa chave específica,
esse é o primeiro cenário. O segundo cenário
é quando o usuário insere uma palavra muito
próxima de uma das palavras que você tem em seu dicionário, como chuva com um N extra. Nesse caso, você deseja retornar o primeiro item da lista que o get
close matches gera. O primeiro cenário é quando
você recebe uma lista vazia, o que significa que
não existe uma palavra semelhante
à da sua lista. Temos três cenários,
o que significa que precisamos
aplicar três condicionais
no bloco condicional aqui No momento, temos apenas dois. Precisamos de mais um que diga, você
quis dizer essa palavra,
por favor, verifique novamente. Por enquanto, vamos apenas passar uma mensagem e também
anotar algo. Você também pode querer passar um valor
de corte mais alto, como 0,8 Porque às vezes, se for um valor
baixo de 0,5 e você passar
alguma palavra aleatória, isso
sugerirá algumas palavras que talvez você não queira. Talvez você queira
brincar com isso. Nesse caso, você
recebe uma lista vazia. Acho que vou usar um valor de 0,8 para o corte ao
implementá-lo no script aqui. Então, vamos ao nosso código. A primeira coisa que precisamos
verificar é se a palavra está nos dados e retornar
o valor dessa palavra. Você pode perguntar: e se você quiser
verificar as semelhanças
primeiro e não isso Bem, acho que a primeira
condição que você
precisa aplicar é aquela que você acha que terá
mais ocorrências Se você acha que
a maioria dos usuários digitará
a palavra correta
, primeiro verifique
essa condição. Você não quer que o
programa passe
pelas condições que têm
menos probabilidade de acontecer. Então, primeiro você quer passar por isso e depois os outros são ignorados se isso retornar verdadeiro. Se isso não voltar para verdadeiro, se for falso, você deve
verificar se há outra condicional Ao verificar
mais de duas condições, você precisa implementar
a instrução IF para várias condicionais. Basicamente, precisamos
verificar se essa
lista está vazia ou não. Se não estiver vazio, significa
que temos uma
correspondência no dicionário. Nesse caso, queremos
sugerir essa combinação. Queremos mencionar essa
combinação na mensagem. O que significa que se chegar perto. Desculpe. Deixe-me importá-lo primeiro. A partir da importação da biblioteca,
obtenha correspondências aproximadas. ALIF obtém partidas acirradas. A palavra dada em
DTakes é assim. Esse é um objeto de lista. É a
mesma coisa que essa aqui. Este é um objeto de lista e
você deseja verificar
se o comprimento dessa lista
é maior que zero. Se for, você quer voltar. Mensagem, digamos,
você? Usamos um
formato de string aqui, porcentagem. Vou explicar o que é isso. Em vez disso, você
precisa disso? Depois da string, depois
de fechar os códigos, está o operador de porcentagem, e aqui você passa a
variável que
substituirá esse formatador
dentro dessa string Isso será substituído por
qualquer variável que você passar aqui. No nosso caso, queremos passar correspondências
aproximadas para W e teclas e você deseja obter o primeiro elemento dessa
lista e colocá-lo aqui. Isso é para entender isso. Digamos que temos uma
variável que tem um valor de um e você diz:
Ei, assim, porcentagem A e a porcentagem S
serão substituídas por um. É o mesmo que
estamos fazendo aqui. E isso é tudo que temos que fazer. Se isso for avaliado como quedas, e isso também
for
avaliado como falso, isso significa que estamos
lidando com uma lista vazia O usuário inseriu uma palavra que
não tinha nenhuma correspondência em nosso dicionário e que não tinha nenhuma palavra similar
em nosso dicionário. Você quer retornar a
palavra não existe. Deixe-me dizer o roteiro,
vá para o terminal. A tecla de seta aparece para chamar um comando executado anteriormente Python three app one dot
py, execute Enter word. Deixe-me começar com
uma palavra correta, chuva, e você terá outras
definições para chuva. Deixe-me executar novamente,
chova com um N extra. Recebemos esta mensagem. Você quis dizer chuva em vez disso? Portanto, a porcentagem a
foi substituída pelo primeiro item do
retorno da lista por obter correspondências próximas. Novamente, se passar uma string muito
aleatória para lá, ela diz que a palavra não
existe, verifique novamente. É isso mesmo. No entanto, ainda
vejo um problema com isso, ainda
podemos tornar o
programa mais fácil de usar. problema agora é que quando o usuário entra em uma
chuva por
engano, o que você acha, você simplesmente passa uma mensagem lá dizendo que, você
quis dizer chuva em vez disso? Ah, sim, quero dizer chuva, mas
como posso entrar na chuva? Por que eu tenho que sair
do programa novamente? Então, estou pensando em uma solução em que, em vez de apenas passar uma mensagem
aqui e finalizar o programa, em vez disso, você executa
outra instrução de entrada. Outra declaração de entrada e outra função de entrada
como esta aqui, onde você pede que o usuário
insira, digamos,
Y se ele quisesse dizer pano ou N para não, y para sim e para não, se não quisesse dizer pano Se sim, então, basicamente, passe, você retorna
o valor da palavra chuva. Se eles passarem não para
a mensagem de entrada, você pede desculpas, se essa
não é a palavra que você quis dizer, então não sabemos
o que você tem em mente. Então, dizemos que a palavra
não existe,
por favor, verifique novamente.
Isso é o que eu estou pensando. Sim, pense sobre
isso e eu vou
implementá-lo na próxima
palestra. Fale com você lá.
109. Como obter a confirmação do usuário: Ótimo. Como mencionei anteriormente
no vídeo anterior, agora vamos implementar uma
mensagem extra de entrada do usuário no programa. Em vez de retornar
essa string, basicamente o que eu quero
retornar é uma mensagem de entrada. Se o programa descobrir
que o usuário passou uma palavra que tem
palavras semelhantes em um dicionário, peça ao
usuário que digite Y ou N. Como fazer isso? Bem, com uma função de entrada, é claro. Assim. Vamos adicionar outra
mensagem da lista. Entrar. Por quê? Sim. Eu, sim. Ou N, eu não. Basicamente,
o que quer que o usuário insira, você precisa processar essa
entrada, essa entrada Y ou N, eles serão basicamente armazenados
em uma variável, mas ainda não. Nessa configuração
que temos aqui, nada será armazenado
na variável. Será apenas um
valor em tempo real, então você precisa
armazená-lo em uma variável. Digamos que Y N, então para sim e não,
é igual a Então, agora, Y ou N
serão armazenados em Y e na variável. Você precisa processar
essa variável. YN Eagles para, sim,
o que precisamos fazer? Se o usuário quis dizer chuva
, retornamos os dados. Aqui precisamos passar
a palavra correta. A palavra correta,
obtemos a palavra correta dessa expressão. Obter correspondências aproximadas
nos dará a melhor correspondência e precisamos passar essa correspondência
para
o dicionário de dados, para obtermos o valor da
definição de chuva. Usamos essa correspondência porque o usuário concordou que a melhor combinação foi chuva. Isso será
substituído pela chuva e o usuário concordou com isso. Espero que isso esteja claro.
Por favor, faça perguntas. Se isso for complicado, ficarei feliz em responder. Se sim, então devolva isso. Deixe-me verificar, execute esta etapa
intermediária Desculpe, eu usei o operador igual aqui, que é um operador de atribuição, você precisa verificar para usar
o operador de comparação, que é construído de
dois operadores iguais Salve o script novamente e
vá em frente, digite a palavra Rain. Você quis dizer chuva em vez disso? Insira Y se sim ou N se não. Deixe-me inserir Y.
Obtemos corretamente as definições de chuva Ótimo. Talvez eu precise
melhorar a mensagem aqui, deletar o ponto e usar uma
coluna ali e um espaço. Isso deveria ser
melhor. Se você chover novamente e passar sim ou não, basta dizer N, você não receberá nenhuma. Porque você não está levando em consideração a string N. Você recebe não porque a função não
está retornando nada. O que aconteceu aqui foi
usar um passe aqui. Então, palavra é igual a chuva. A notícia é passada aqui. Y é igual a chuva
, então verificamos se a chuva nos dados não está nos
dados porque está com N. Isso não é executado. A função não
executa essa instrução, ela não retorna a
definição de chuva, mas vai para essa instrução. Isso encontra uma semelhança para que a
lista seja maior que zero
e, em seguida, executa isso É por isso que recebemos outra mensagem
de entrada aqui. Em seguida, continuamos lá. Estamos recuando
abaixo de L se tivermos outra condicional aninhada, o
que não é problema Mas tenha cuidado, você
precisa indentar. Este é um nível de indentação
mais profundo do que este aqui Aqui estamos. Se o usuário passou, por que retornamos essa declaração? Se o usuário passar por todo
o resto
, você não está contando com
esse cenário específico. Portanto, não há nenhuma instrução de
retorno executada, então o programa
terminará aqui e retornará nenhuma porque
nada foi retornado. Isso também não será executado porque esse é um nível de indentação com este
e, como foi executado, o programa nunca vai
para esse nível aqui O que precisamos fazer
é contar
as entradas de outros usuários, como N.
Nesse caso, se o
usuário digitar entradas de outros usuários, como N. N, bem,
tudo o que podemos fazer é retornar a
mensagem. A palavra não existe, verifique novamente, que é a
mesma que esta aqui Precisamos contar para
outra condição. Os usuários podem passar N, mas também podem passar outra string aleatória e você não quer que o programa
retorne nenhuma, você quer que o programa
retorne uma mensagem. Por exemplo, não entendemos
sua consulta. É isso mesmo. Isso é tudo que você pode
fazer para se inscrever, talvez seja melhor.
Isso é um programa. Novamente, temos um cenário em que o usuário
insere exatamente chuva, e isso será
executado nesse caso, e o cenário em que
o usuário digita uma palavra, que não tem nenhuma correspondência. ASD CAC C, algo parecido. Nesse caso, isso não
será executado. Eu tenho aquele assento. Deixe-me
testar o programa agora. Digite a palavra. Chuva. Nós obtemos
as definições para chuva. Novamente, digite a palavra.
Chuva, desse jeito. Você quis dizer chuva
em vez disso? Digite se sim, digite, não, se não. Deixe-me tentar sim, e obteremos
a definição correta. E digite N para não. A palavra não existe,
verifique novamente. Isso também foi bom.
Fizemos com que isso fosse executado. O outro cenário
seria assim. Em vez de inserir Y e N, você simplesmente digita algo e diz que não
entendemos sua entrada. Bom. O outro cenário é quando você insere uma palavra que não tem
nenhuma correspondência
e, nesse caso, isso
será executado imediatamente. E é isso. A propósito, mesmo que você insira números, digamos um, a palavra não existe porque não está
incluída no dicionário. Acho que nosso programa
é muito inteligente agora. Ele está considerando
muitos cenários e é bastante
fácil de usar, eu diria. No entanto, há
uma última coisa que podemos melhorar:
a forma como o programa
exibe as definições. Quando você passa, digamos que três
também tenha duas definições. Vamos passar uma palavra que tenha uma definição.
Estrutura, talvez. Oh, isso tem três definições. Tudo bem Pirâmide. Isso também tem duas definições.
De qualquer forma, você entendeu. Eu estava tentando encontrar uma palavra
que tivesse uma definição. Mas, basicamente, o que você obtém com uma palavra que tem uma definição é que você
ainda recebe uma lista, que termina aqui,
então ela não tem uma vírgula e não
tem nenhum outro item É uma lista com um item. Quando você tem uma palavra que
tem mais de um significado, você obtém essa lista com
mais de um item. E então você não quer mostrar
a lista de usuários com
colchetes como esses A melhor coisa a fazer
para mostrar ao usuário é que, se você tem um significado, uma definição para a palavra, basta mostrar essa definição, sem aspas, sem
colchetes, apenas uma definição Se você tiver
mais de uma definição, mostrará apenas
uma definição por linha. Então, basicamente, você tem várias
linhas com definições. Sim, precisamos implementar
isso também para dizer, finalmente, que nosso programa é bom e
pode ser usado por qualquer pessoa, e a saída é fácil de ler. Pense sobre isso. Vamos implementá-lo na
próxima palestra, SU
110. Como otimizar o resultado +: Ótimo. Agora temos um programa funcionando e editamos todos os
recursos que queríamos. O único problema agora
com o programa é que a saída não é
muito fácil de usar. Com isso, quero dizer,
vamos dizer sim aqui. Essa é a saída e
você obtém uma lista aqui. É uma lista de Python. Em vez disso, o que queremos fazer
é mostrar cada uma
dessas linhas em uma
linha separada no terminal. Portanto, essa saída será mais
legível ao olho humano. Vamos seguir em frente e fazer isso. Como podemos implementar uma coisa
dessas? Essa saída agora
é um objeto de lista, que significa que a chamada aqui, a chamada de função,
produz esse objeto de lista. O que podemos fazer é talvez iterar
por meio desse objeto de lista,
algo como se
pudéssemos algo como se
pudéssemos armazenar o objeto de lista
em uma variável, saída será
atribuída a essa lista Então, o que você pode
fazer é salvar quatro itens na lista de saída imprimir o item. Vamos guardar isso e experimentar. Teremos
um problema aqui, mas um passo de cada vez. Digite Y, Y, e isso é
o que eu queria ter. A primeira definição,
precipitação na forma de água
líquida, vai
na primeira linha e a segunda definição
de cair das nuvens e gotas de água
vai para a segunda linha. Isso é bom. No entanto, devemos ter em mente que nosso programa
não produz apenas listas, mas às vezes também produz
strings, como esta aqui Não, eu não quis dizer
isso. De qualquer forma, isso é o que você ganha e
você não quer isso. Esta é uma mensagem dizendo
que a palavra não existe. Então, o que o programa está fazendo, o que o Python está fazendo
é iterar
todos os tipos de saída
que a Uma função gera uma lista, às vezes e às
vezes gera uma string. Como podemos corrigir isso?
Temos uma lista e uma string. Vamos pensar na diferença. Como podemos discriminar
uma lista de uma string? Qual é a diferença entre
uma zona de lista e uma string? Bem, a diferença é
claramente um tipo de dados. Uma lista é um objeto de lista e
uma string é um objeto de string. Que tal implementar
uma condicional aqui? Dizemos algo
assim se for o tipo de saída. É uma lista, então indente isso com quatro espaços
e aquele também Essa aparência agora está aninhada
dentro da condicional e será executada somente quando
for avaliada como verdadeira, somente quando recebermos
uma lista do programa contrário, se não for uma lista, tem
que ser uma string. Nesse caso, queremos
imprimir a saída sem
iterá-la. Deixe-me verificar. E obtemos a saída
corretamente, desta vez a mensagem de que a palavra não existe, verifique novamente. Vamos verificar outra vez com a palavra correta e
obteremos as definições corretas. Vamos tentar outra
palavra. Matemática. Desta vez, a
palavra matemática tem apenas uma definição, então colocamos a definição
pret aqui É uma ciência. Vamos tentar o outro
cenário também, trapo. Você quis dizer alcance? Não. A palavra não existe,
por favor, verifique novamente. Executamos essa linha aqui. Então esse é o código completo. Acho que podemos considerar
nosso programa concluído agora. Foi isso que pensei em
adicionar ao programa. Agora, o programa é bastante fácil de usar e
estamos considerando muitos cenários que o usuário
pode inserir no programa. No entanto, a interface ainda é
uma interface de linha de comando,
portanto, não é um programa
gráfico de desktop e não é um aplicativo da web. A interface é
a linha de comando, você envia a entrada
pela linha de comando e obtém saída pela linha de comando. O que estou tentando dizer
é que você pode realmente estender esse programa
para
transformá-lo em
um aplicativo web em que transformá-lo em
um aplicativo web o usuário,
em vez de
inserir a entrada
por meio da linha de comando,
pode inserir a entrada
por meio de uma página da web. Por meio de um site ativo,
eles podem inserir, apertar um botão e obter a saída dinamicamente
na página HTML da web Isso é possível com o Python, mas você ainda não está
pronto para fazer isso porque temos mais
algumas seções Temos alguns aplicativos nos
quais eu vou te ensinar como desenvolver
aplicativos web com Python E depois disso,
você pode voltar a esse código, estendê-lo e
criar uma interface web. Além disso, você poderá criar uma
interface gráfica de usuário para desktop com o
conhecimento adquirido
nessas seções, pois também
abordaremos interfaces gráficas de
usuário no curso. E também estamos
cobrindo bancos de dados. Por que estou mencionando bancos de dados? Bem, porque neste programa, estamos usando esse arquivo
para armazenar nosso conjunto O problema com
isso é que, se ficar muito grande por enquanto, são apenas 5
megabytes,
isso é bom Mas se o arquivo ficar muito grande, você
precisará
carregá-lo em Python toda vez que
executar o script Como aqui, estamos
carregando o arquivo na sessão do Python quando
você executa o script Agora, se o arquivo for muito grande, isso será muito caro
em termos de tempo Em vez disso, o que
você quer fazer é usar um
banco de dados. Talvez. Com o banco de dados, o que
acontece é que você
faz uma consulta
ao banco de dados e, em vez de
obter o conjunto de dados inteiro, obtém
apenas a linha ou o valor
que você consulta Os bancos de dados são muito eficientes e abordarão os bancos de dados
posteriormente no curso. Depois de algumas seções,
voltarei a este programa. Vou apresentá-lo como
um exercício para que você possa estendê-lo
criando uma interface,
uma interface gráfica para
isso ou uma interface web, e darei acesso a um banco de dados onde
você pode consultar dados
desse programa para que ele se torne realmente robusto com uma interface de usuário muito
amigável. Espero que você goste da ideia e espero que esteja
gostando do curso, vamos continuar com mais
algumas seções. Te vejo mais tarde
111. Como corrigir erros de sintaxe em Python: Ei, bem-vindo a
esta nova palestra. Esta é a palestra mais
importante que você teve até agora
neste curso Por favor, tente tirar
o máximo proveito disso. Na verdade, este é um novo vídeo que estou adicionando ao curso. Eu não tive essa
palestra algumas vezes atrás, então eu a adicionei um bom tempo depois de
publicar o curso E até agora, eu havia
explicado esse conceito, então os erros pouco a
pouco em outras palestras Mas achei que isso não era suficiente e
percebi que os alunos ainda
estavam tendo
dificuldades em entender e lidar
com erros em Python Decidi fazer uma palestra
dedicada erros em
Python. Aqui estamos. Eu disse que esta é a palestra
mais importante porque aprendemos sobre funções cadeias de caracteres e números até
agora nos vídeos anteriores E esses são
conceitos individuais que você aprende uma hora ou mais tarde, aprende funções e
cordas, etc Mas se você não sabe
como ler um erro, como entender um
erro e lidar com ele,
se você não sabe disso, você
terá problemas para lidar
com tudo, com
todos os outros objetos, como funções cadeias de caracteres e números, etc Portanto, entender um erro e saber como lidar com ele, como corrigi-lo, é muito importante. E até mesmo os programadores mais
experientes cometem erros em seus programas A diferença é que eles sabem como ler esses erros, como entendê-los e corrigi-los. Mas todo mundo comete erros. Se aparecer um erro no seu
programa, não entre em pânico, basta seguir as instruções
que darei neste vídeo sobre como
corrigir o erro. É disso que trata esta
palestra. Então, o que é um erro, afinal? Um erro em um programa é um bug que faz com que o programa
funcione incorretamente. Agora, em Python, temos
basicamente dois tipos de erros. Temos erros de
sintaxe e temos exceções. Primeiro, vamos nos
concentrar nos erros de
sintaxe e
esquecer as exceções Iremos às exceções depois de
explicarmos os erros de sintaxe. Eu tenho esse código
aqui e, na verdade, é um arquivo Python Esse é o ícone
exibido em um Mac. Atualmente, estou em
um computador Mac, mas isso não faz a
menor diferença, não importa onde você esteja, Linux,
Windows ou Mac, tudo é o Eu tenho o terminal aqui e deixe-me prosseguir e
executar este programa. Isso tem alguns erros.
Deixe-me mostrar a eles. No Mac, você pode chamar Python três com o comando
Python No Windows, você pode simplesmente chamar Python ou qualquer
comando que esteja usando Você também pode usar qualquer
editor de sua preferência Errors dot pi é um nome que
dei à execução do script. Portanto, este é agora um exemplo
de um erro de sintaxe. Esse é o corpo inteiro
da mensagem de erro, e isso é muito importante. Sempre que você receber um erro, o primeiro conselho que
dou é não entre em pânico. Apenas se concentre no erro, leia-o linha por linha, como se
estivesse lendo
um poema ou qualquer outra coisa Portanto, a primeira linha
do erro aponta para
o nome de um
arquivo que contém o erro. Nesse caso, são erros dot pi. Então você tem uma vírgula
e depois da vírgula, você tem a linha onde
o erro ocorreu É a linha três e você pode ver aqui que a linha
três é essa aqui. Mas você também tem, para
sua conveniência, Python imprime a
linha no terminal Em nove, aqui está onde está o
erro e depois disso, você tem o tipo do erro. É um erro de sintaxe. Você também tem outros
tipos de erros como erro de nome, erro de tipo, mas esses são exceções, e explicarei mais tarde por que os
chamamos de exceções Esse é um tipo de erro de
sintaxe e os outros são exceções Esse é um tipo e, em seguida, você tem uma descrição após a coluna. Às vezes, a descrição é mais específica, mais detalhada. Desta vez, é apenas uma
sintaxe inválida. Você precisa descobrir
onde cometeu algum erro ou onde perdeu alguma
sintaxe do seu programa Você também tem essa seta
aqui apontando para cima, e a seta aponta o símbolo de que o erro está ocorrendo ou para o
final do token Token é este é um token,
neste caso, nove. Pode ser um número, pode
ser uma string, qualquer coisa. Neste ponto, isso está
apontando para o token. Mas também pode
ser como aquele 999, salve o script como
fofo nesse caso, você vê que ele está apontando para
o final de um token Aqui por aqui
você tem uma seta agora e eu sei que
na verdade é uma função
e as funções em Python A
precisam ter colchetes, então você precisa passar 999 dentro de colchetes assim e deixar
isso Salve e execute novamente. Tudo bem. Você
tem outro erro, mas não entre em pânico novamente. Esse é sempre meu conselho. Em vez disso, eu li
o erro, ele diz erros de
arquivo Linha cinco,
linha cinco desta vez. Não é mais a linha três, o que significa que a linha
três foi corrigida. O que o Python está
fazendo é
passar por todas as linhas, uma a uma
, de cima para baixo Ele verifica a primeira linha e diz
que está tudo bem. Sem erro, vai
para a próxima linha, sem erro, vai para a terceira
linha, sem erro desta vez. A quarta linha também está boa. A quinta linha tem um erro. Novamente, é um erro de
sintaxe, e este é descrito mais
especificamente Falta um parêntese
na chamada para impressão. Observe que você receberá esse
erro somente se
estiver no Python três; se
estiver no Python dois,
isso não será uma seta porque, no
Python dois, print era uma declaração
e não uma função Com declarações como return
ou print no Python 2, você não precisa passar A sintaxe estaria correta. Novamente, esta seta aqui está
apontando para você para o token, nós apenas adicionamos colchetes lá Controle S para salvar o
script e executá-lo novamente. Desta vez, não
obtivemos nenhum erro, o script funcionou bem e imprimiu a saída
aqui, um, dois, três. Tínhamos três funções de
impressão, saída de impressão. Isso não retorna nenhuma saída porque não estamos
imprimindo nada. Isso apenas obtém a entrada da
função e produz alguma saída, mas isso não imprime nada. Se você quiser
imprimi-lo, passe
a função de instrução de impressão para lá. Também pode haver outros
tipos de erros de sintaxe, como você deseja definir
esses um, dois e três Mas, em vez de fechá-lo
com um colchete, use um colchete
redondo, salve o script e execute Você vê que você tem um erro de sintaxe
inválida na linha cinco, que é esta aqui Novamente, a seta aponta
para o token, então você precisa descobrir como consertar esse colchete redondo
aqui, e você sabe disso Você precisa fechá-lo
com um colchete, isso deve resolver o problema Isso é sobre erros de sintaxe. Eles são muito fáceis de consertar. Na próxima palestra,
explicarei as exceções.
Te vejo lá.
112. Como corrigir erros de tempo de execução em Python: Olá, mais uma vez, bem-vindo
a esta nova palestra. Na
palestra anterior, falamos sobre erros em geral e eu me concentrei nos erros de sintaxe, que é um dos dois tipos de erros que você tem em Python Você tem erros de
sintaxe e exceções. Agora vamos falar
sobre exceções em Python. Qualquer outro tipo de
erro que não seja um erro de sintaxe é uma exceção Freqüentemente, todos os erros,
erros de sintaxe e exceções são chamados de Então você vai ouvir
isso em todo lugar. Agora eu tenho um novo roteiro aqui que eu criei
para esta palestra. Tente adivinhar o que vou
obter como saída para
executar esse script. Eu tenho A igual a um, B igual a dois caracteres, imprimo em 2,5 e imprimo A mais B.
Adivinha o que vou
comprar por um Adivinha o que vou
comprar Agora deixe-me executar o script, Python three, errors dot Erros de arquivo que pi, linha quatro, que
é a última linha. Neste caso, obtemos um
erro de sintaxe: sintaxe inválida. Agora, isso pode ser muito confuso
para você, porque você está vendo a expressão impressa
A mais B, mas não vê
nenhuma seta lá Para um iniciante, isso pode
ser bastante frustrante, mas tente olhar para trás à
esquerda da seta Pense na seta que
a seta está apontando para o token e o token não
foi escrito corretamente
no script. Nesse caso, o problema
aqui é que essa linha aqui tem um colchete aberto, um colchete redondo e, em seguida
, tem a função int,
então a função int
tem seu próprio colchete que está dentro de sua entrada. Esses são os colchetes
da função in,
mas a função de impressão não
tem um colchete de fechamento O que você fez em vez disso,
o que eu fiz na verdade. O que eu fiz foi que, em vez
de colocar um colchete lá, eu realmente escrevi
outra função de impressão Python esperava um
fechamento entre colchetes, mas eu digitei É por isso que isso está dizendo
que essa função de impressão não
está na
posição correta. Essa é a ideia. Sempre, quando você vê essa seta, primeiro olhe para essa linha, mas depois olhe antes
dela. Desculpe por isso. Sempre, quando você vê
essa seta aqui, primeiro olhe para essa linha aqui, mas também não se esqueça de que o problema também pode
estar antes dessa linha. Isso foi sobre o erro de sintaxe. Vou explicar por que falei
sobre esse erro de sintaxe aqui. Deixe-me executar isso de novo. O erro de sintaxe foi corrigido agora, mas ainda temos outro erro Então, a razão pela qual eu incluí
um erro de sintaxe no meu código foi para mostrar que o
Python , na verdade, primeiro
verifica Basicamente, ele analisa o código. Ele procura erros de sintaxe. Ele ainda não executa o código. Quando executei os três
erros do Python dot pi aqui,
o código não foi executado, mas o intérprete apenas
verifica Ele ainda não verifica
exceções. Primeiro, você precisa corrigir
os erros de
sintaxe, e foi isso que fizemos aqui Adicionamos esse colchete e
corrigimos os erros de sintaxe. Agora, o Python está
lançando uma exceção. E vamos aqui onde eu
executei o código e
veja a próxima linha, temos o número dois lá, que vem da
saída desta linha aqui. Da linha três, obtivemos
a saída corretamente. Basicamente, novamente, o Python executa um script de cima para baixo Se não encontrar erros de
sintaxe,
se encontrar erros de sintaxe, não executará nada To é impresso e, em seguida, você obtém esse
rastreamento do erro. Que começa aí
e termina aqui. Isso é um bloco do erro. Às vezes, os erros podem ter mais de um tipo de erro. Nesse caso, temos
apenas um tipo de erro, que é um erro de tipo, mas você pode ter vários
blocos aqui. No entanto, o erro mais
importante em que você deve se concentrar é a
última linha do erro, o último bloco do erro. Nesse caso,
temos apenas um bloco, no qual
estamos focados. Linha quatro, que é
essa aqui. Isso é uma linha. Novamente,
a linha está sendo impressa exatamente como no
caso de erro de sintaxe Aqui você tem um tipo
de erro aqui, que é um erro de tipo. O que é um
erro de tipo? Um erro de tipo significa que
há algo errado com um dos
tipos de objeto em seu script. Você tem a descrição aqui. Eu apoiei o operando
tipo quatro plus. Então, isso está tentando dizer que o operador positivo tem
um tipo não suportado, o operador positivo,
em outras palavras, não suporta um
dos tipos que
você deu a ele, seja o tipo
de variável A ou o
tipo de variável B. Ele diz Int e string Não diz especificamente se Int ou string é objeto, mas diz que você não pode usar um operador de adição
com um inteiro e
uma string que estejam logicamente errados porque você não pode
adicionar um número a algum Isso é o que o Python
não entende e gera um As exceções são erros lógicos e você precisa
usar sua lógica agora para corrigir o erro e usar nossa lógica
inspecionando cuidadosamente o erro,
e foi isso que fizemos O que
queremos fazer é corrigir isso. Agora cabe a mim decidir se
eu pretendia concatenar esses dois objetos ou fazer uma operação matemática Digamos que se eu pretendesse
fazer uma adição entre
esses dois números
, teria que converter
B em flutuante ou inteiro Diga isso. Executar. R, neste
caso, você não recebe nenhum erro, você obtém dois impressos
da terceira linha e 3.0 da última linha que
acabamos de corrigir. No entanto, se minha intenção fosse realmente imprimir
a concatenação entre essas duas strings, em vez de converter
B em um fluxo, eu teria que
converter Nesse caso, vou receber o
texto um e dois, um e dois. Isso seria um
objeto de string, não um número. Embora aqui
apareça como um número, é exatamente como o
terminal o imprime. Novamente, esses são erros
que ocorrem em tempo de execução, então o script é executado. Os erros de sintaxe são erros de
análise, então o intérprete
tenta entender se o script está
sintaticamente correto,
se você está cheio, se seguiu as regras de sintaxe
do Python do Você precisa de suporte, suporte de fechamento para
suporte de abertura. Você precisa de uma cotação de fechamento após a
cotação de abertura e assim por diante. Agora também existem outros
tipos de exceções. Além de um erro de tipo, você pode ter um erro de nome. Digamos aqui que, em vez
de imprimir,
imprimimos C, salvamos, executamos. Aqui está um rastreamento. Novamente, dois foram
impressos na terceira linha. O traceback diz a linha quatro na impressão C. O nome do erro de
nome C não está definido Novamente, isso não é
um erro de sintaxe porque você não cometeu
nenhum erro com uma sintaxe Você tem esse
nome de variável que está correto. Você tem suportes abrindo suportes redondos e
fechando ao redor do suporte Tudo está
sintaticamente correto, mas esse objeto C,
Python , não sabe Você não definiu
essa variável C, Python não sabe
o que imprimir Python é capaz de imprimir
A porque sabe que A
se refere ao inteiro
um se refere ao inteiro e, portanto, imprime
o inteiro um, mas C não tem nada Você recebe esse erro de nome. E sempre que você receber
seu erro de nome, você sabe que esse nome aqui não
foi definido por você. Para corrigir isso,
talvez você queira definir C dessa forma e
executar, sem obter nenhum erro. Você também pode ter outros
tipos de erros, como C dividido por zero,
veja o que você obtém. Erro de divisão zero,
divisão por zero. Essa é a descrição
desse erro. A divisão por zero não é matematicamente possível
ou significativa Como o Python é
baseado em matemática
, ele gera um erro
e você precisa corrigir isso, remover a
expressão que divide De qualquer forma, isso é sobre
erros em Python , espero que você tenha
entendido
muito dessa palestra e
também da palestra anterior É relativamente fácil
corrigir erros, no entanto, às vezes há
erros que você pode ter dificuldade em
entender e corrigir. Mais tarde, por exemplo,
vamos trabalhar em bibliotecas e,
às vezes, bibliotecas, elas têm diferentes
tipos de erros. No entanto, nada com que se
preocupar , pois
há outras coisas que você pode fazer para corrigir um erro
que você não entende. Falarei sobre isso
na próxima palestra. Te
vejo lá, veja.
113. Como corrigir erros difíceis: Ótimo. Bem-vindo novamente
a este novo vídeo. Este é o terceiro
vídeo sobre erros. Falamos sobre erros de sintaxe, falamos sobre exceções e agora vamos
falar sobre como
corrigir um erro quando você não
entende a Vamos nos concentrar nesse erro. Um erro de divisão zero. Caso você fosse
bom em matemática, você poderia facilmente
corrigir esses erros. Você será capaz de
entender que não pode dividir, não pode dividir
um número por zero. Você corrigiria isso removendo
essa expressão aqui. No entanto, se você não
fosse muito bom em matemática, talvez achasse isso
difícil de entender. Nesse caso, a
maneira mais rápida de corrigir esse erro é
copiando esta linha
aqui, Controle C.
Selecione, copie com o
Controle C ou
clique com o botão direito do mouse e copie lá e vá para o Google. Basta colar. Agora, no Google, eles obtiveram cerca de
100.000 resultados. Python é muito popular
e você terá uma solução para quase todos os problemas
que tiver com o Python Antes de examinar a documentação ou fazer uma pergunta em algum lugar, é muito provável que
outra pessoa tenha tido seu problema antes fazer uma pergunta sobre isso e também haja uma solução
para isso. Um site de perguntas e
respostas muito bom é o
stock overflow.com Quase sempre, quando você pesquisa
por um erro no Google, os primeiros resultados
serão do suck overflow Alguém fez uma
pergunta com esse título. Eu enfrento um erro ao executar
o programa usando Python. É exatamente o mesmo
erro que você gosta. Como evitar esse erro. Ele também fala sobre
a saída desejada. Há duas respostas
para essa pergunta. A resposta com esta marca
verde aqui é uma resposta
aceita e
tem mais votos positivos. 11 e isso tem dois
votos negativos, menos dois. Na verdade, a diferença
entre votos positivos e negativos é a
favor dos votos negativos. Essas são duas
respostas diferentes que você pode ver. Normalmente, você quer ver
a resposta aceita
que tem a solução. No entanto, nesse caso, isso também tem a explicação. Diz que você não pode
dividir por zero. Isso faz com que o Python
gere um erro. Essa ainda é uma boa
resposta, e acho que não merecia ter
esse equilíbrio de votos. Mas este fornece uma solução
sobre como lidar com um erro que nos leva a outro conceito que é
lidar com erros em Python Digamos que você tenha um programa, uma função que obtém dois valores de entrada e depois divide esses
dois valores de entrada No entanto, às vezes o usuário pode
passar zero como segunda entrada. Nesse caso, se você
dividir, digamos, o primeiro valor seria dois e o segundo valor seria zero,
seu programa
falharia e, se você quiser, poderá usar o
tratamento de exceções para realmente evitar
que o programa falhe Você pode fazer isso tentando
aceitar declarações. De qualquer forma, abordaremos isso
nas próximas palestras
desta seção Tratava-se de pesquisar um erro no Google e você pode encontrar facilmente
a solução para isso. Como você vê. Essas são perguntas
muito claras. É uma grande comunidade
e todos podem votar a favor e contra
e podem comentar. Basicamente, as respostas
são muito precisas. No entanto, nem sempre você
encontra uma resposta no Google. Nesse caso, é hora de
fazer sua própria pergunta. A primeira coisa é, novamente, verificar se
você entendeu o erro e corrigi-lo
se você o entendeu. A segunda coisa é
fazer uma pesquisa no Google e, se as duas primeiras
não resolverem seu problema
, é hora de
fazer uma pergunta. Você pode fazer uma pergunta
dentro do curso. Enquanto assiste a um vídeo,
você pode navegar por Perguntas e respostas, que significa
pergunta
e resposta, e pode fazer uma pesquisa rápida se encontrar uma resposta existente
para sua pergunta aqui Se não conseguir
encontrá-la, você pode fazer
uma pergunta ou fazer uma
pergunta no Stock Overflow Você pode usar esse botão aqui, fazer perguntas e
ficarei feliz em
ajudá-lo aqui na interface do
curso, na seção de
perguntas e respostas, ou outras pessoas também
podem ajudá-lo
no estouro de estoque No entanto, algo é
muito importante saber. A estrutura da
sua pergunta é muito importante para
obter uma boa resposta. Às vezes, há perguntas muito
ruins, como, digamos, meu código não
está funcionando, como faço para corrigir isso? Isso é tudo. Com essa
pouca informação, é muito difícil
obter uma boa resposta. É muito importante
fazer uma boa pergunta e eu vou te mostrar como
fazer uma boa
pergunta de programação na próxima palestra Essa também é uma
palestra muito importante. Veja lá.
114. Como fazer uma boa pergunta de programação: Olá, mais uma vez e bem-vindo
a mais uma palestra. Nesta palestra,
mostrarei como
fazer uma boa pergunta de
programação Como mencionei na palestra
anterior, fazer uma boa
pergunta de programação é muito importante para obter uma boa resposta Deixe-me primeiro mostrar o que é
uma questão de programação de leitos. Por exemplo,
vou clicar em
Fazer pergunta e aqui está
o título da pergunta. Uma pergunta de programação Bt teria um título muito
genérico como esse. Aqui está o corpo da pergunta em que você deve descrevê-la
em detalhes. Algumas pessoas simplesmente dizem que cometi um erro ao tentar fazer dois números. Eu apenas
pauso a pergunta Uma pergunta melhor seria
incluir o código que
você executou dessa forma. No entanto, isso também não é suficiente porque você também precisa
mostrar a mensagem de erro. Deixe-me excluir isso e uma boa pergunta de
programação
seria quando você está falando sobre perguntas
que têm um erro, perguntas que falam sobre um erro que você
recebeu em seu código. Esse é o seu código.
Um bom título seria incluir a mensagem de erro. Essa seria uma boa opção. Se for uma mensagem muito longa, você pode optar por incluir somente o nome
do erro em tudo isso. E então uma boa
pergunta seria, oi. Executei o código a seguir
e esperava obter divisão na última impressão
principal, mas recebi um erro. Aqui está meu código. Então você coloca o código lá,
o script inteiro. Não se preocupe se sua
pergunta for longa, é melhor ser longa
do que incompleta. Aqui está o erro. Aqui, certifique-se de incluir todo
o rastreamento de erros
, incluindo também a saída Dessa linha da linha de comando
até a próxima linha. Tudo isso vai
para sua pergunta. Basta copiá-lo. Não
se preocupe se for longo. Você pode ajudar? Essa seria
uma boa pergunta de programação. Agora, ainda falta
algo muito importante, que é o
destaque do código Você precisa selecionar o código
e clicar neste ícone aqui. O erro também.
Deixe-me fazer a pergunta. Os links externos devem fornecer conteúdo educacional
gratuito, basta clicar em continuar. Aqui está uma pergunta:
parece que está do outro lado. Essa pergunta tem quatro bons elementos que a
tornam uma boa pergunta. O primeiro elemento é que
o autor da postagem está mencionando o que
esperava obter como resultado do script
que estava executando Então diz que eu
esperava
obter a divisão na
última declaração impressa, que é esta aqui,
mas recebi um erro A primeira coisa é que você precisa incluir a saída esperada. Você precisa explicar o que estava esperando
porque, caso contrário, se você não explicar
o que está esperando, a outra
pessoa que quer
ajudá-lo não sabe o objetivo do seu código ou
da sua pergunta e,
portanto, não sabe como
ajudá-lo a alcançar esse Esperar a saída é
a primeira coisa. A segunda coisa é que você precisa
incluir todo o código. E certifique-se de
incluir seu código como texto. É melhor usar texto como telas em vez de
capturas de tela, porque o texto, a pessoa que
quer ajudar você, pode copiar seu código e executá-lo em
seu interpretador Python Mas se você incluir capturas de tela, elas são imagens
e é difícil para outras pessoas
testarem seu código Se você fizer isso no
stack overflow, sua pergunta será
encerrada porque se você fizer isso usando uma captura de tela em
vez da versão em texto do seu código, a pergunta será
encerrada porque
existem regras muito fortes no stack overflow para ter um lado de perguntas e respostas de alta qualidade Esse é o segundo elemento.
O terceiro elemento é que você precisa incluir
o rastreamento de
erros em toda a tela inteira, Do começo
ao fim, esse foi o terceiro elemento
e o último elemento, o quarto elemento é que você
precisa destacar seu código. Assim, você
vê que isso é muito mais
visível e mais fácil para
outras pessoas solucionarem A interface do curso tem aquela função na qual você
pode destacar seu código. Em caso de estouro de estoque, você também tem essa capacidade,
basta fazer uma pergunta, escrever sua carreira
e destacá-la e depois usar esse suporte encaracolado Sim, é isso mesmo. Se você fizer boas perguntas, é
provável que também obtenha uma boa
resposta. Espero que isso faça sentido
e espero ter mostrado algo que você não
sabia e falarei com você mais tarde. Te vejo.
115. Como o código manipula erros sozinho: Oi, de novo. Vamos fazer mais
uma palestra sobre
erros em Python Esta palestra em particular
será sobre como lidar com erros. Lidar com erros pode ser
um conceito
avançado digerir por enquanto, porque você
ainda está aprendendo o básico do
Python e ainda não viu
nenhum Mais tarde, porém, usaremos o tratamento de
erros quando estivermos criando
aplicativos do mundo real. Então, você entenderá melhor o tratamento de
erros mais tarde. Por enquanto, vamos nos concentrar apenas na sintaxe e tentar
entender o máximo possível Vou dar um exemplo aqui, que mencionei anteriormente, digamos que temos uma função que faz a divisão entre
dois números dados dessa forma. Retorna A dividido por B. Então você chama a função. Divida um, dois. Nesse caso, a função tentará
dividir um por dois. Deixe-me imprimir
a saída para que possamos vê-la no terminal. Vá para o terminal e
execute o script, você obtém 0,5. Agora, isso é bom. No entanto, se o usuário
digitar, digamos, zero desse jeito, execute e seu
programa falhará, então ele mostrará um erro. Agora, este aqui
é um exemplo de uma mensagem de erro mais longa que
mencionei anteriormente
nos vídeos anteriores de
que você pode ter mais de um erro
em seu rastreamento. Por exemplo, isso diz arquivo,
linha quatro, esta linha aqui. Essa linha é onde o Python
capturou o erro primeiro. Basicamente, o Python estava
tentando executar essa linha, mas não conseguiu Não conseguiu
fazer isso porque essa linha estava tentando
obter as informações dessa função e
essa
função estava tentando fazer essa
operação matemática usando zero após a divisão. Então isso não é possível e Python está apontando
isso aqui. Esse é o principal erro na
linha dessa expressão. É aí que você deve se concentrar. No entanto, ao fazer perguntas, você deve incluir
toda a mensagem de erro em sua pergunta, conforme
mencionei anteriormente. Voltando ao tratamento de erros agora, o que estou tentando dizer
aqui é que, se você tiver outras funções aqui e
outras linhas de código que deseja executar,
deseja que o Python Mas se o usuário passasse
esse número zero aqui, as outras linhas
não seriam executadas. Seu programa falharia
e você não quer isso. A maneira de evitar isso é
usando tentar e aceitar. Basicamente, você tenta
capturar a exceção. Para lidar com a exceção. A maneira de fazer isso
é bem fácil. Tente, você diz, tente retornar A B. Isso tem que ser
recuado assim Try é recuado
porque está sob a definição da
função
e, em seguida, return é
recuado
porque está sob a expressão tri Então você tem, exceto executar. Isso deve estar no mesmo nível de
indentação com tr. Eles são do mesmo bloco. Exceto se houver uma exceção, o que você quer fazer é antes
de dividir por zero ou não tem Deixe-me tentar isso agora. E você obtém que a
divisão zero não tem sentido. Desculpe, eu queria devolver
aqui, não imprimir. Eu te explico por que
você não tem nenhum lá. Você não obteve nenhum como
saída porque o
que a função fez foi
tentar fazer essa expressão, mas recebeu um erro, então
ela ignora essa linha, não a executa e
depois vai para a próxima linha Essa linha é executada quando
não é executada. Portanto, imprimir a
divisão zero não tem sentido, mas também não imprimiu nenhuma porque quando você executa uma função que não
tem uma instrução de retorno, como neste caso,
tínhamos uma instrução de impressão aqui, função de
impressão, não
uma instrução de retorno Nesse caso, se a função não
estiver retornando nada, ela também poderá ter uma função de impressão
ou outra função. Mas se não tiver
uma declaração de devolução
, ela não imprimirá nenhuma. Basicamente, ele
executa os outros procedimentos,
como a instrução de impressão, ele imprime a instrução Mas se não tiver
uma declaração de devolução, não imprime nenhuma. De qualquer forma, diga isso, execute
novamente e, neste caso, você terá apenas essa divisão
zero impressa sem sentido Basicamente, se você tivesse
outras linhas de código aqui, assim, elas também
seriam executadas. Isso acontece usando o bloco
try and accept, que garante que
o fluxo do código continue. Outra
coisa importante a ser observada é que é aconselhável usar aqui o nome exato do erro que
você deseja aceitar. Então, erro de divisão zero. Como você pode ver, isso se
transformou em azul, o que significa que
essa é, na verdade uma palavra-chave do Python
reconhecida pelo Python Nesse caso, se
você executar isso, obterá a mesma saída
, na verdade. Ou se você passar um número qual seja possível obter uma divisão,
você obterá isso. Desculpe pela barra invertida. Digitei isso por engano na minha execução interna
novamente, então você entendeu O que estou tentando dizer sobre o erro de divisão
zero é que às vezes você pode ter outros tipos de
erros em seu código. Outros tipos de exceções. Digamos que você tenha
um erro de nome e esteja dizendo que exceto todos os erros em que
você não passa isso, você está basicamente incluindo
todos os tipos de erros. Isso é um pouco perigoso para o seu código porque você pode ter problemas que não percebe e, basicamente , os
está ignorando,
mas não deveria Você deve ser específico
, explícito assim. Se houver outros tipos de
erros, como um erro de nome, esse erro de nome travará seu programa. Você
sabe o que está
acontecendo e precisa ser específico. Se você quiser lidar com
esse erro também
, você pode adicionar
outra exceção aqui, exceto
erro de nome, por exemplo. Sim, trata-se de
lidar com erros em Python. Espero que isso faça
sentido. Espero explicar bem
isso sobre erros. Eu falarei com você nas
próximas palestras com você.
116. Introdução à visão computacional com Python +: Ei, bem-vindo a
esta nova seção. E ao longo das
palestras desta seção, você aprenderá visão
computacional com Python Vou explicar a
visão computacional em um minuto. Então é isso que vamos
aprender nesta seção. E, na
próxima seção,
criaremos um aplicativo que detecta objetos em movimento da webcam
do computador e armazena e visualiza os horários em que
os objetos entraram e saíram
do Então essa é uma
área de aplicação da visão computacional. Agora, talvez você tenha uma ideia
do que é visão computacional, mas se não, vou explicar agora. Portanto, a visão computacional
é o campo que lida com a aquisição
e o processamento de imagens e toma decisões com
base nelas ou nas imagens Então você passa uma imagem
para o computador, e o computador
tenta
entendê-la e pode fazer certas
coisas, como dizer quantas
fases existem na imagem e qual cor
domina a imagem, e assim por diante Eu sei, computadores são lixo. Quero dizer, você tem que dizer a
eles o que fazer exatamente. E é aí que entra o
Python. Usaremos o Python para carregar
imagens, processá-las
e fazer coisas como detecção de rosto
e movimento Agora, a visão
inclui imagens e vídeos porque os vídeos são simplesmente pilhas de imagens
que aparecem muito rapidamente Portanto, os computadores e, portanto, Python usam os mesmos comandos
para ler imagens e vídeos E você pode fazer visão computacional
com Python usando o OpenCV. OpenCV significa visão computacional de
código aberto. E a biblioteca Ise
é usada não apenas em Python, mas em outras
linguagens de programação também
em outras
linguagens de programação para realizar tarefas de
visão computacional Portanto, nesta seção,
apresentarei OpenCV e você
aprenderá como usá-lo
detectando rostos a Então, na próxima seção, vamos nos aprofundar e
processar vídeos com OpenCV e detectar
alguns objetos
em movimento em vídeo de webcam em tempo real Então, sim, isso é
sobre esta palestra, e vamos seguir em frente e
configurar rapidamente o OpenCV
na próxima palestra e trabalhar com
ele depois disso trabalhar com
ele depois Então, sim,
obrigado e até a próxima palestra.
117. Carregamento, exibição, redimensionamento e criação de imagens ++ com OpenCV: Ótimo. Então,
vamos brincar um pouco com o OpenCV Especificamente, o que você aprenderá
nesta palestra é como carregar imagens em
Python usando o OpenCV como
exibi-las
, redimensioná-las e depois salvar as imagens
redimensionadas e depois salvar Portanto, carregue, exiba, redimensione
e grave imagens. E eu tenho uma bela imagem da galáxia, então vou
brincar com isso. A primeira coisa que você quer
fazer é importar a biblioteca. A segunda coisa é que você
quer carregar a imagem em Python. Portanto, a imagem seria igual ao método REIT de imagem de
dois pontos cv. Portanto, o método espera agora o caminho para a imagem que
você deseja carregar em Python E isso seria
galaxy dot JPG. Então, meu roteiro, um arquivo Pi de um
ponto, está
no mesmo diretor
do Galaxy dot JPG. Então, eu só preciso passar
o nome do arquivo aqui. E depois há ainda
outro parâmetro imagem
para ele no método. E então esse parâmetro
usa três argumentos. Agora, esse parâmetro especifica como você deseja ler
a imagem em Python Então, você quer
lê-la como uma imagem RBG, o que significa que você quer
três bandas na sua imagem Então você quer uma
imagem colorida com uma faixa vermelha, azul e verde. Então, se você quiser ler a
imagem como ela está com as cores, passe uma aqui. Se você quiser ler a imagem como uma
imagem em preto e branco em uma escala de cinza, passe zero. E ter uma imagem em tons de cinza implica que sua imagem
terá uma faixa E eu vou voltar às bandas e explicá-las em apenas um momento. Então, também temos menos um. Isso significa uma imagem colorida, mas você também tem
um canal Alpha, o que significa que sua imagem terá
recursos de transparência. Portanto, se você aplicar operações
que exijam transparência, poderá fazer essa leitura ao carregar a imagem com um argumento de
menos um aqui Ok, então eu gostaria
de experimentar o zero. Ótimo. Agora, antes de
mostrar a imagem, antes de exibir a
imagem na tela, gostaria que você entendesse do que se trata
esse objeto de imagem. Então, eu gostaria de imprimir o
tipo, sem mais nem menos. Execute o script. Roteiro um. Sim. Claro, e tente novamente. Então essa é a matriz
dimensional NumPin. E se quiser, você
pode imprimir isso. E você verá a matriz
real de num pi. Portanto, essa é uma
matriz bidimensional com valores no eixo horizontal e também
no eixo vertical. Então pense na imagem agora, e esta seria
a primeira, então o
valor de intensidade superior esquerdo de um primeiro pixel. Então 14, por exemplo, seria o
valor da intensidade na escala de cinza. Para o primeiro pixel
da imagem, então para o
pixel superior esquerdo da imagem. E então o segundo
pixel e assim por diante, e então você tem esses pontos, que significa que o
Python não pode exibir a lista , a lista longa
aqui porque você tem alguns
milhares de valores na primeira linha , e então você tem
a segunda linha de pixels na imagem e
a terceira e E isso forma a matriz
dos pixels da imagem. E se você quiser
saber quantos números,
quantos valores você tem
na direção horizontal e quantos valores você tem nas direções verticais,
você pode ir em frente e
imprimir a forma da imagem. Ok. Então, digamos que a
resolução da imagem seja 14 85 por 990. Então, o Python armazena a imagem como uma matriz de árbitros, como uma matriz
de números, tão fácil quanto Se quiser verificar
a
matriz dimensional da sua imagem, você pode fazer isso com
essa expressão E você vê que
tem duas dimensões. Agora, se fosse uma imagem colorida, com três morcegos vermelhos, azuis e verdes, as coisas
mudariam um pouco Então você tem três dimensões. E você também vê que a nova
matriz é um pouco diferente. Então, aqui você tem valores para cada uma das faixas de verde, vermelho
para verde e azul. Então, eu gostaria de ficar
com a imagem cinza. E o que eu posso fazer agora é mostrar a
imagem na tela. E para isso, você quer
usar a imagem, então eu uso o método show. E isso exibirá uma janela e você
deseja nomear essa janela, então você deseja colocar um título para essa janela. Digamos que galáxia. E o que você passa aqui
é o objeto de imagem. Então, esse. Ótimo. E então o que você
quer fazer é especificar um horário para que
sua janela seja fechada, pois isso
mostrará a janela, mas você também deseja definir
algumas funcionalidades para que o usuário possa fechar a janela Se você colocar zero aqui, quando o usuário pressionar qualquer
botão, a janela será fechada Deixe-me mudar isso para Cb dois. Então, se você colocar zero, o usuário pode fechar a janela
pressionando qualquer botão. Se você quiser colocar um tempo, você poderia dizer 2000 e isso
implica 2000 milissegundos. Então isso significa 2 segundos. Então, dissemos como o usuário
deseja fechar a janela
e, em seguida, você deseja
especificar o que fazer quando o usuário pressiona um botão
ou espera por 2 segundos Então você quer
destruir todas as janelas. Esse é um método que
fecha a janela. Bom. Vamos ver
o que vai acontecer. Ok, então exibimos a
imagem, ela esperou por duas
sagas e depois fechou Se você colocar em zero, a
imagem ficará lá. E se você pressionar o
botão, ele será fechado. Deixe-me mostrar a imagem novamente. Agora, o motivo pelo qual
você não vê a imagem caber na minha
tela é que a imagem, como você vê aqui nesses
valores, tem 1485 pixels de altura Então, a altura, essa
é a altura, e tem 990 pixels de largura Portanto, minha resolução de tela
está definida em 1.280 por 720. Isso significa que essa imagem
com esse tamanho não cabe na minha tela porque minha
tela é muito pequena para isso. Então, neste caso,
deixe-me fechar isso. O que você pode fazer é redimensionar
a imagem e depois
mostrar a imagem
precisa . Então, carregamos a imagem
e antes de mostrá-la antes de passá-la para
o método I'm show, você quer dizer,
digamos, redimensionar Imagem. Isso seria igual a. O CV dois é redimensionado e isso obteria
dois parâmetros O primeiro é, obviamente,
o objeto de imagem que
você deseja redimensionar Então IMG é nossa variável, e então você quer especificar uma tupla com as novas dimensões, eu diria 1.000 por 500 E então você quer
passar a nova imagem aqui. Então, o que está acontecendo aqui é que o Python está, na verdade,
redimensionando a matriz num Então, ele pegará a matriz com esse
número de valores em pixels e criará uma matriz
com essas novas dimensões. Então, o que acontecerá
lá é que o Python interpolará esses valores Portanto, tem
muitos valores aqui, mas depois vai
disso para isso. Então, quando vê, digamos, tem quatro para um valor e depois seis
para o valor vizinho. E o que o Python fará é
obter quatro e seis, basicamente, e simplesmente
criar um valor com isso Então, digamos cinco. Essa é
basicamente a ideia. Então, ele interpola os valores
e, em seguida, mostra a imagem
interpolada O que parece muito
bom aos nossos olhos. Ok, vamos ver isso. E essa é a imagem. E você vê que isso é um pouco
exagerado Então era uma imagem alta, mas agora é bem larga. E porque essa é , na verdade, a largura da
imagem e essa é a altura. Então, se você quiser,
pode dizer 501.000. Então, novamente, e agora você vê mais ou menos as duas
proporções da imagem. Mas se você quiser manter
a proporção da imagem, convém ir
mais longe aqui. Então, digamos que, a partir disso, digamos que gostaríamos de
mostrar um tamanho que seja a metade disso para manter
a proporção da imagem. Então, o que podemos fazer é precisar
acessar esses valores. E podemos pegar esses
valores do método shape. Então isso produz um topo
com esses dois valores, e então vamos aqui
e dizemos, imagem, forma E esse seria esse valor, então 990, que tem
um índice de um E então temos,
novamente, imagem e forma com índice
zero para esse número. E então queremos
dividir isso por dois. Ok. E espero obter um erro com isso,
mas o que é S. Então, sim, temos um erro. É um
argumento inteiro de erro de tipo esperado para flutuar. Mas aqui, o que estamos fazendo
aqui é que, ao
dividirmos esse número por
dois, obteremos um flutuador Então, obteríamos
algo como 742,5. Nesse caso, o que queremos
fazer é
converter isso em um número inteiro Então 742,5 se torna 742. Ok. E vamos manter a
consistência em números inteiros para isso também. Vamos ver. Temos uma
sintaxe inválida aqui, então ela nos aponta para a linha 11, em
algum lugar no
início, o que pode ser bastante Então você quer ver antes
dessa linha, que está aqui. E você pode ver que esse
colchete aqui fecha aqui. Então, precisamos de outro colchete, que fecha no
primeiro colchete aqui Então guarde isso. Tente novamente. E desta vez, a
imagem parece boa. Então, você aprende a carregar
uma imagem em Python e
a redimensionar uma imagem, a
mostrar uma imagem
na tela E agora vamos escrever a
imagem redimensionada em um novo arquivo Para isso, você gostaria de
usar o método de gravação de mensagens instantâneas. Então, a imagem é shte. E você quer dar um nome
à nova imagem, Galaxy,
digamos, JPG de pontos redimensionados E então você passa o objeto de
imagem que você deseja armazenar neste arquivo. Então, a vírgula fica salgada aqui, e a imagem que você deseja
armazenar é uma imagem precisa É isso mesmo. Executar. E
redimensionamos rapidamente a imagem antiga. Então, o Python obtém o array numpy. Eu o intercalo,
então ele o redimensiona e depois o mostra
na tela Então esse é o Galaxy,
esse aqui, e então podemos fechar isso. E aqui temos
nossa nova imagem. Então, a galáxia é redimensionada. Então, se você for até a pasta
onde estão esses arquivos, verá que essa
imagem tem novas dimensões. Então 495 por 742. E isso é o que eu queria
ensinar a você nesta palestra. Espero que tenha gostado
e fale com você mais tarde.
118. Explicação do exercício anterior: Bem, espero que você
resolva o exercício, e acredito que
não foi difícil. Meu objetivo era fazer com que
você se acostumasse com o código OpenCV. E por que não
praticar um for loop? Então, como você pode imaginar, esse exercício seria
vendido usando um loop for. Então, deixe-me examinar o
código linha por linha rapidamente. Portanto, temos dois importantes OpenCV, SL CV dois e a biblioteca
global Agora, se você se lembra, o que o Globe faz
é encontrar os nomes
dos caminhos de alguns arquivos de acordo com
um determinado padrão. Então, neste caso, por exemplo, eu tenho esses arquivos JPG aqui, então uma, duas, três,
quatro, cinco imagens. E eu disse: Ok, crie
uma lista de nomes de arquivos que contenham tudo
na primeira parte e depois JPG como extensão. Então, isso criará
uma lista como, digamos, C e depois o caminho aqui
e depois Galax C, o GPG E então o outro caminho da imagem e assim por diante, você entendeu. E então o que precisamos fazer
é percorrer essa lista para cada caminho de imagem
na lista desta lista Faremos essas operações
para cada um dos itens da lista. Então, primeiro, lemos
o caminho da imagem. Ok, esse arquivo de imagem na verdade tem uma imagem em preto
e branco. Portanto, zero é uma bandeira é um argumento, o que implica uma taxa de
imagem preto e branco na escala de
cinza, na verdade. Em seguida, criamos uma variável onde armazenaremos as imagens redimensionadas Portanto, a imagem é 100 por 100. Estou passando aqui a
imagem original e o tamanho, o novo tamanho que
a imagem terá. Então, queremos mostrar a
imagem apenas para demonstração. Isso não é realmente importante, mas permite que você
confira as imagens que
estão sendo redimensionadas E esse é o
nome da janela. E então eu passo aqui
um método de chave úmida, e 500 significa 500 milissegundos. Então, cada imagem será
exibida e ela
aguardará meio segundo,
500 milissegundos. E depois desse
meio segundo, Python irá para a
próxima linha e depois para a próxima e depois
para o próximo item
da lista e assim por diante Então, espere 500 milissegundos, e então destruiremos todas as janelas após
esse tempo passar E então escrevemos
a imagem redimensionada. Então RE era uma variável que
contém o objeto de imagem,
o objeto de imagem redimensionado E isso aqui, tudo isso é
um novo nome do arquivo. Então, o que obtemos
aqui é
que teremos precisão no início do nome
da imagem E logo depois disso, teremos o nome
da imagem original. Então, por exemplo,
teríamos para Galaxy, teríamos ReciseGalaxy dot JPG Então, a imagem aqui seria Galaxy Dot JPG aqui, que
é esta aqui. E aqui, como
o script está dentro
dessa pasta, essa
lista, na verdade,
a imagem seria
algo como Galaxy dot JPG,
depois Kangaroos, você sabe,
Austrália, ponto GBG e assim por dessa pasta, essa
lista, na verdade, a imagem seria
algo como Galaxy dot JPG,
depois Kangaroos, você sabe,
Austrália, ponto GBG Então, isso obtém os
caminhos relativos dos arquivos. Não estamos entendendo o caminho completo. Ok, espero que esteja claro. Então, redimensionado o Galaxy, poderíamos
adicionar um sublinhado para discriminar a palavra precisa
do nome
da outra imagem . Ótimo. Deixe-me executar esse script em
Python. Então, segundo alfa, segundo alfa ,
e, sim, está feito. E vamos conferir as imagens. Então, daqui para cima estão
as imagens originais e esses são os produtos de
imagem. Então você pode ver aqui que
tudo isso é 100 por 100. E eles estão em uma escala de cinza. Ok, é isso mesmo.
Nos vemos na próxima palestra.
119. Detectando rostos em imagens com OpenCv e Python: Ei, bem-vindo a
esta nova palestra. E aqui você
aprende a detectar rostos. E usaremos o OpenCV com
Python para detectar uma ou
mais faces em uma Então, basicamente, como a
detecção facial funciona, afinal? Bem, a ideia é que alguém
tenha criado algumas cascatas, que são basicamente alguns arquivos
XML como este Esse arquivo EML contém
informações sobre as características que a
imagem de um rosto contém Então, estamos falando sobre a proporção
das sombras dos olhos,
nariz e lábios e
todas essas características, esses
números de intensidade de pixels
armazenados são registrados
neste arquivo XML, que foi criado usando algumas imagens com rostos
como amostras de treinamento Então, basicamente, você
diz aos seus computadores:
Ok, todos esses são rostos, e então você usa um software como OpenCV para criar esses arquivos XML Então, essas são chamadas de cascatas
rígidas, e essa é uma cascata rígida
para um objeto frontal E se você quiser outros objetos, você pode encontrá-los
neste link aqui. Então você tem corpo inteiro, olho
esquerdo e parte inferior
do corpo e assim por diante. Como alternativa, você pode usar uma seção
de recursos desta palestra. Você pode fazer o download
em um arquivo Zip com todas as cascatas rígidas de XML presentes Mas nesta palestra, vamos nos
concentrar na frente do rosto. Então, usaremos essa
cascata para detectar a passagem. A forma como funciona agora é que carregaremos
a imagem em Python
e, em seguida, diremos ao
Python que esse é um modelo que você deseja procurar na imagem e
deseja encontrar esse modelo, ou
seja, o modelo XML na E o que o Python fará
com a ajuda do OpenCV, ele começará a pesquisar toda
a imagem E então ele
redimensionará a imagem, diminuirá o tamanho da imagem
e, usando a mesma janela, detectará passagens
menores e assim por diante Vamos analisar
isso passo a passo. Então, vamos escrever o script
que detecta rostos. Impulsividade é a primeira
coisa que você quer fazer. E o próximo passo
é que você quer ler
a cascata em Python Então, vamos chamar a cascata de fase
variável. CV dois, e temos um método
chamado classificador em cascata. Então, isso criará um objeto em
cascata de fase em Python , e tudo o que temos que passar aqui é o caminho da
cascata É isso mesmo. E isso criará um objeto classificador
em cascata. E agora você pode usar esse objeto classificador em
cascata do recurso de ritmo
para pesquisar uma fase em sua imagem Então, a próxima coisa que
você pode querer fazer é carregar a
imagem em Python, a imagem que você
deseja pesquisar pelo rosto Digamos que imagem seja igual. Então você sabe que
podemos carregar imagens em Python por meio do
método de leitura de imagem do currículo aberto, e você pode simplesmente passar o nome do PG da
foto dig aqui Estou passando o
caminho do arquivo desta imagem. Portanto, não estou passando nenhum
segundo parâmetro aqui. Isso significa que estou lendo a
imagem como uma imagem colorida. No entanto, uma boa ideia é usar imagens
em tons de cinza ao
pesquisar um rosto Então, carrego a imagem aqui, mas vou usar a versão em tons de cinza da imagem ao
pesquisar um rosto nessa Acredita-se que isso produza maior precisão ao
pesquisar rostos, porque você pode
perceber que, quando você tem imagens muito ocupadas
com muitos recursos, OpenCV não
será 100% Portanto, você pode obter rostos que o
OpenCV perderá ou poderá obter recursos que
serão classificados como No
entanto, usar a imagem em tons de cinza aumenta a precisão. Eu poderia passar uma bandeira zero aqui para
poder ler essa imagem
em uma escala de cinza, mas eu gostaria de
manter a imagem original como uma versão colorida porque
quero mostrar a
versão colorida no final, mas usar a imagem cinza. Passe-o para os métodos que procuraremos pelo rosto. Então, criarei aqui uma variável de imagem cinza onde classificarei a
versão em escala de cinza da imagem. Então, CV dois, e temos um
método chamado CVT color, que usa como argumento, a imagem original,
é claro, e uma bandeira Então, uma discussão. Chamado de Cv
bicolor BGR dois cinzentos Então, o que isso significa é que isso converterá a imagem BGR, então faixas azuis, verdes e vermelhas, a converterá em
uma imagem em escala de cinza Vamos ver. Então, se você quiser
mostrar rapidamente essa imagem cinza, se quiser, Civ two
mostra a imagem cinza lá Nós damos um nome para a janela, cinza e a imagem
que você deseja mostrar, então você precisa passar o parâmetro da chave de
peso aqui. Digamos zero, então
pressionaremos Aiki e ele
fechará a janela O CV dois destrói todas as janelas. Então, você aprende esses métodos
nas palestras anteriores. Deixe-me executar isso. Portanto, esta é uma
versão em escala de cinza da imagem. Venha. Agora vamos usar um método
chamado detectar escala múltipla E o que esse método
fará é procurar o classificador em
cascata Então, ele procurará esse
arquivo XML da face frontal em nossa imagem e retornará
as coordenadas do ritmo na imagem. Então, por exemplo,
esta é a imagem, e o que esse método
retornará é que ele encontrará o rosto
e dirá. Portanto, ele
fornecerá o número
da linha e a coluna
do ponto superior esquerdo da face. Então, começará aqui e
também fornecerá a altura e
a largura do rosto. Então, obtemos um retângulo. E então desenharemos esse
retângulo na imagem. Então, basicamente, mas
você entenderá melhor. Então, precisamos criar,
digamos, uma variável de
objeto de passagem. Onde armazenará esses valores de X, Y, largura e altura. Então, vamos pegar isso rapidamente. Então, precisamos nos referir ao objeto classificador em
cascata, que é esse aqui E o que queremos fazer
com esse objeto é detectar a escala Mul ti, e você quer detectar
a imagem cinza E então você quer passar o fator de
escala para lá. Você sabe que quando
você tem muitos parâmetros e há
muitos para caber em uma linha, após o coma,
basta pressionar Enter e o Python lerá sua linha como
se fosse uma única Então, eles se certificarão de
pressionar Enter após o coma. E então temos o fator de escala. E um bom valor a ser dado
para isso seria 0,5. Agora, o que
isso significa? De qualquer forma? Bem, vamos considerar essa imagem. O que o Python
fará é começar do tamanho
original da imagem e pesquisar. Criarei uma janela que
procurará faces na Então, pesquise nesta área
nesta área nesta área. Então, uma vez que ele faz isso, dando um fator de
escala de 1,05, você está dizendo ao
Python que
diminua a escala em 5%
para a próxima Então, o que o Python
fará é reduzir a escala da imagem E pesquisará rostos
maiores na imagem. Então pesquise novamente, pesquise novamente e depois diminua em 5% novamente a imagem e
pesquise rostos maiores, e assim sucessivamente
até chegar ao tamanho final. Isso significa que um
valor menor significa maior precisão. Se você fornecer, por exemplo, 0,5 Pythond,
diminua a escala em 50% Portanto, ele começará
do tamanho original
e, em seguida, aumentará 50%
e , portanto, você não terá
muita precisão com isso. O lucro com esse número é que o script será executado mais rápido. Assim, você terá menos passagens para
a imagem em busca de um rosto. 0,5 é bom. OK. E então você tem outro parâmetro chamado vizinhos
mínimos. Isso geralmente é definido como cinco. E o que isso
significa basicamente é que isso diz Python quantos vizinhos
pesquisar ao redor da janela Portanto, talvez você queira
experimentar um
pouco esses números e ver quais
obtêm os melhores resultados. Mas esses dois são números bem
aceitos. Então, vamos fazer alguma coisa agora. Vamos imprimir rostos e
ver do que se trata. Então, que tipo de objeto é esse. E eu também poderia imprimir o
tipo de rosto, sem mais nem menos. Então, vou executar o script agora
e o que o script
fará é ler esse arquivo XML
e carregar a imagem, criar a
versão em tons de cinza da E então ele detectará
as coordenadas do canto superior esquerdo
da face
na imagem e a largura
e a altura
do retângulo que define
a face na imagem E então ele
imprimirá o tipo das faces e
imprimirá as faces, o objeto real das faces. Então aperte o kit para sair disso. Portanto, o espaço é uma matriz NumPi, objeto de matriz
N dimensional E é uma matriz
com quatro valores. Então, detectamos
nosso rosto. Esses são valores que basicamente definem
a fase na imagem. Então, basicamente,
o que
temos aqui é 155, que deve ser
a 155ª coluna Então esse é o X.
Então o retângulo deve começar em algum lugar
aqui na E isso deveria ser 83. Então, a linha 83, coluna 155, e então temos a largura, que é 382 e a
altura, que é a mesma E então temos um
retângulo na face. Agora, vamos
desenhar esse retângulo na face
da imagem Então, criamos a matriz de faces. E então o que queremos fazer é acessar todos esses
valores dessa matriz. Para fazer isso, podemos
usar quatro voltas. Então, quatro X, Y, largura e altura nas faces. Bem, imagem. Então, estamos atualizando o objeto de imagem que
lemos aqui, que carregamos aqui,
então vamos atualizá-lo desenhando um retângulo
na imagem E, novamente, você precisa passar
o objeto de imagem aqui e depois passar mais
quatro argumentos. O primeiro argumento
seria o ponto
de partida do retângulo Então isso seria X e Y. Então, essas coordenadas
da matriz de fases. Ótimo. E então o próximo
parâmetro é outra tupla define as coordenadas
do outro canto da imagem Então, temos o canto superior
esquerdo aqui, e temos o canto inferior
direito aqui embaixo. Então, o que isso seria
é X mais a largura. E Y mais a altura. É isso mesmo.
Mais um parâmetro. Essa seria a cor que você deseja dar
a esse retângulo Então, isso vem como um formato BGR. Então você quer passar um valor
para a cor azul. Então, digamos zero para azul e vamos ter um retângulo
verde 255 para verde. Então, teremos um verde
completo lá
e, em seguida, zero para vermelho. Você também pode passar
outro parâmetro, que seria a
largura do retângulo Digamos que três. OK. E depois de fazer isso, depois de
atualizar sua imagem, talvez
você queira mostrar sua
janela de imagem na tela agora. Então, usamos o método image show, mas aqui temos uma imagem cinza, então queremos passar um objeto de imagem
atualizado. E devemos estar prontos para ir. Salve o script, vá
e tente executá-lo. E meu sistema não está conseguindo encontrar o rosto atx it dot py Sim, eu errei
algo com um nome aqui, então deixe-me mudar
esse ponto, Enter Então, nada a ver
com o roteiro. E deixe-me tentar novamente. Ótimo. Então, espero
que seja isso que você esperava. Então o retângulo começa aqui e tem uma
largura e uma altura, e termina aqui Às vezes, porém, como
você já deve saber, você pode ter imagens maiores do que a resolução
da tela. Nesse caso, sua imagem não
caberia na
tela. Então, o que você pode fazer é redimensionar a imagem
antes de mostrá-la Então, deixe-me criar uma variável
redimensionada aqui, e isso seria igual
ao redimensionamento cv dois, e você quer passar a imagem, que contém o
retângulo ali, e você quer redimensionar a
imagem para Portanto, você precisa definir a
resolução da imagem aqui. E como você sabe, você pode simplesmente colocar
alguns valores aqui, digamos, 500 por 500. Mas esses valores podem
ampliar sua imagem, então uma solução melhor seria acessar a forma
da imagem. Ou a resolução da imagem, e essa deve ser a
largura da sua imagem. Então você já sabe
disso. Eu explico isso. Então, estou
analisando isso rapidamente
e, para garantir que você
obtenha um bom tamanho, você pode dividi-lo por três. E, novamente, em forma,
você obtém a altura, que é o primeiro valor
da tupla, e a divide
por três novamente. E você também deseja converter esses dois números inteiros porque
pode obter números flutuantes, Python dirá que não pode redimensionar uma
imagem Então, isso deve ficar bem.
Em seguida, você deseja mostrar a imagem redimensionada.
Testando rapidamente. Estou sem um colchete aqui, então isso deve ser uma
queda de tudo isso, mas aqui eu não estou
começando como uma Então, coloque o colchete aqui e
feche aqui. Isso deve funcionar agora. Sim. Então, essa era minha foto, mas vamos tentar uma foto mais
desafiadora agora. Esse aqui. Então, temos duas faces
que não são muito claras. Esta não é uma fase
frontal real. Esse cara aqui está com os olhos fechados e o queixo não
está visível. E também temos essas duas faces aqui
nos jornais, o que me permite abrir a imagem
original daqui, que tem basicamente uma resolução
muito baixa, e acho que o Python
não será capaz de detectar
essas duas Então, deixe-me verificar isso. Aqui está nosso detector facial e queremos passar o
nome do novo arquivo de imagem. Salve o script e
vá em frente e execute-o. Então,
voltamos à realidade aqui. E, como você pode ver desta vez, Python e o OpenCV
conseguiram detectar essa fase, mesmo que ela não esteja em
uma E, obviamente, também foi
capaz de detectar a mão desse cara. Então, o Python o lê como uma fase. E o que você pode fazer nesse caso é ajustar esses valores aqui, então o fator de escala e
os vizinhos mínimos Algo que você também pode
estar interessado em saber é que a matriz de fases aqui tem
duas listas neste caso. Então esta é a primeira fase, as coordenadas
da primeira fase e depois a segunda fase. Que, neste
caso, é manual, mas de qualquer forma, você entendeu. Então, provavelmente
usando uma escala de 1,1, você poderá se
livrar dessa mão. Então, sim, é isso. Você também pode tentar
detectar o ritmo desse cara, mas acho que não
conseguirá. Então, só que você sabe
que essas técnicas têm limitações.
Então, é um computador. Não é um ser humano, então sempre terá algumas
desvantagens na precisão Espero que você tenha achado isso tão baixo, e nos vemos
na próxima palestra.
120. Capturando vídeo com OpenCv e Python: Ei, bem-vindo a
esta nova palestra. E nesta palestra,
usaremos OpenCV para capturar vídeo
da webcam do computador Portanto, você precisará do OpenCV e importará como CV dois,
como você já sabe OpenCV é o que usamos para processamento de
imagens e, é claro, processamento
de vídeo porque o vídeo é feito de Portanto, temos muitas imagens e elas são chamadas
de molduras. E esses quadros,
essas imagens são exibidas uma após a
outra em alta velocidade, e então podemos ver
essas imagens como vídeo. E você vai odiar
essa palestra ou adorá-la. O que faremos
é usar
um nível muito baixo de processamento de
imagem aqui no um nível muito baixo de processamento de processamento
de vídeo. Estaremos lendo os quadros um por um, então
as imagens uma por uma. E você verá como
usamos loops em Python para mostrar essas imagens
e realmente
criar uma janela em que as
imagens são exibidas rapidamente , e você pode vê-las como Então, se você tem um laptop, provavelmente tem
uma câmera de construção. Se você tiver um desktop
sem câmera,
precisará de uma câmera externa
para me acompanhar nesta palestra. E agora, a primeira coisa que você pode querer fazer é ler um vídeo. Então, depois de ler um vídeo, você pode ler um vídeo da webcam ou
de um arquivo de vídeo. E
depois de ler o vídeo, você pode aplicar
outras operações como acinzentar o vídeo ou adicionar texto ao vídeo
ou detectar objetos no vídeo, etc Então, a primeira coisa que
você quer
fazer é criar um objeto,
digamos, vídeo, que será igual
à captura de vídeo cv dot. Então esse é o método que aciona um objeto de captura de vídeo E isso gera um argumento aqui, que pode ser um
número como zero,
um, dois, três ou
o caminho do arquivo de vídeo. Então, quando você coloca um número, isso significa que você está
capturando vídeo de uma câmera Então, digamos que eu tenha uma câmera embutida
no meu computador, mas também tenha uma câmera
externa. Nesse caso, uma das minhas câmeras terá
um índice de zero, a outra câmera
terá um índice de um
e, se eu tiver uma terceira câmera, ela terá um índice
de dois e assim por diante. Então é isso. Se você
tivesse um arquivo de vídeo, poderia simplesmente dizer movie dot mp four ou
algo parecido. Depende do nome do seu arquivo de
vídeo, e você teria que ter esse arquivo
em algum lugar do seu computador. Mas nesta palestra,
estamos falando sobre a captura de vídeo
da webcam Então, eu tenho apenas uma
webcam no meu computador, então vou passar de zero aqui. É isso mesmo. Depois de fazer isso, você quer ter certeza de
que lançará. A câmera. Então, se você
deseja acessar seu objeto, liberação de pontos de
vídeo é o método. E então você não precisa
passar nenhum argumento lá. Então, vamos ver o que
temos se executarmos isso. Esse arquivo Python.
Python, capture dot pi é o nome do meu E, obviamente, nada acontece. Mas, do meu lado, notei
que minha câmera estava ligada por um segundo ou
por uma fração de segundo. Então, a luz da câmera foi ligada e depois
fechada. Foi desligado imediatamente. Então, o que acontece é que na verdade,
acionamos
a câmera aqui, a webcam, mas depois liberamos
imediatamente a câmera. Então, o que o Python
fará é abrir a câmera e, em um milissegundo, liberá-la Deixe-me tentar de novo. Às vezes, pode acontecer que você nem
veja uma luz. Então você não vê isso porque o processo acontece muito rápido. Então, provavelmente, seu computador precisa alguns segundos para realmente acender a
luz da câmera. E podemos esperar
alguns segundos, então. Para fazer isso, você deseja importar
a biblioteca de tempo incorporada. A biblioteca de tempo fornece algumas operações relacionadas ao tempo. E assim, por exemplo,
no nosso caso, vamos usá-lo para manter
o script por 3 segundos. Então, o que isso fará é que Python tente executar
o script linha por linha, importando
o
CV dois a tempo
e, em seguida, acionando a câmera E então, antes de
soltar a câmera, faremos com que o script
espere por 3 segundos. Então, isso será executado. Aguarde 3 segundos e execute
o outro método. É isso mesmo. Agora, deixe-me
executar isso de novo. Ok, a luz está acesa.
Um, dois, três, desligado. Sim. E o vídeo é lançado. Agora, talvez você esteja pensando,
por que não vemos seu rosto aparecendo na câmera de
vídeo na janela? Bem, a razão é
que, você vê alguma linha aqui que
eu esteja mostrando uma janela? Não. Então, por que você espera que
meu rosto apareça lá? E a maneira como fazemos isso é criando primeiro um objeto de quadro, que lerá as imagens
desse objeto de captura de vídeo. E deixe-me fazer isso primeiro, antes de entrar em
mais explicações. Então, deixe-me dizer que cheque o quadro. Isso seria igual a video
dot RED, sem mais nem menos. Então, o que estamos lendo aqui é temos um tipo de dados booleano
aqui e uma matriz de árbitros Então, deixe-me imprimir isso para
que você entenda melhor. Portanto, verifique primeiro e
depois imprima a moldura. Está bem? Execute o script. Aguarde 3 segundos e feche-o. Então, o que temos aqui
é que vou expandir isso. Então, passamos para
a variável de verificação. E temos a matriz numpi, que representa a imagem Essa imagem é, na verdade a primeira imagem que
o vídeo captura. Este ano, o ouro, podemos usá-lo para
várias operações,
como verificar se o
vídeo está rodando ou não Portanto, talvez você precise verificar isso
ao fazer seus programas. E o quadro é o
mais importante porque usaremos
o objeto quadro, então usaremos essa matriz de árbitro, que é uma matriz
tridimensional porque é uma imagem colorida, então tem três faixas E você sabe disso nas
palestras anteriores, nas quais fizemos processamento de imagens OK. E percorreremos esse quadro e o mostraremos usando
o método de exibição de imagens. Então, mostro o
método de exibição de imagens da biblioteca CV two. Então, mostraremos recursivamente cada quadro de vídeo que
está sendo capturado Então, espero que isso faça sentido. Então, antes de fazermos
isso recursivamente, eu gostaria de mostrar
uma janela aqui embaixo Então, mostro o currículo dois, e vamos colocar um nome para a captura da janela e passar
o objeto da moldura para lá Além disso, lembre-se de que, ao passar um método de exibição de imagem, ao mostrar uma janela, você deseja garantir que
a janela esteja fechada. E você faz isso usando o método da tecla de peso
Cv e pode passar zero para permitir que você pressione qualquer botão
e feche a janela. E o que você quer fazer é que o
cv two destrua todas as janelas. Então, quando esse botão é pressionado, você destrói todas as janelas. E, na verdade, você
quer colocar isso aqui, que o vídeo não seja lançado
antes de você pressionar essa tecla. Então, o que acontece é que o
Python executa essas linhas, espera que
você pressione a tecla, libera o vídeo
e destrói a janela real que
você está vendo Ok, vamos ver o que
vai acontecer agora. Surpresa, eu tenho
apenas dois dentes. Você não sabia disso. Ok,
estou brincando. Eu tenho mais. Mas o que o Python fez aqui foi
acionar a câmera Então ele acionou a câmera aqui e depois leu o
primeiro quadro do vídeo. Então,
logo no primeiro quadro, assim que a câmera é acionada, ela lê o primeiro quadro
e depois
imprimimos esse quadro e ele está aqui em algum lugar
na linha de comando, e então o script
dorme por 3 segundos, então não fez nada Ele esperou 3 segundos
e, em seguida, no CV 2 com
o método AmShow
, criou uma janela onde
mostrava o primeiro
quadro do vídeo Então, a foto que você acabou ver é o primeiro
quadro do vídeo. E então a moldura real, a janela ainda está aberta, então está esperando por uma
tecla para pressionarmos. Então, se eu pressionar uma tecla agora, essas duas últimas linhas
serão executadas. Isso significa que o vídeo será lançado e essa
janela será destruída. Então aperte a tecla, e
sim, isso aconteceu. Portanto, o Python está processando um quadro de vídeo da
mesma forma que imagens simples Isso significa que você também pode
aplicar métodos
como cv de dois pontos, cor CVT E você pode passar esse quadro aqui e
salvá-lo
na cor cinza BGR Salve-o em uma variável cinza. Então, o que estou fazendo é converter a moldura, ou
seja, a moldura colorida
em uma imagem cinza E, na verdade, eu tenho que
fazer isso aqui em cima. E então eu posso mostrar a
versão em escala de cinza da imagem aqui. Ok, deixe-me tentar de novo. Então essa é uma versão
em escala de cinza que está sendo exibida usando o
método imshow. Então essa é a ideia. Agora, que tal mostrar
um vídeo real, não uma única imagem lá? Bem, a resposta é que
precisamos usar um loop selvagem aqui. A razão pela qual precisamos fazer isso é
que, em um loop while, ele executa
algumas instruções infinitamente
até que algumas instruções infinitamente você quebre o
loop em um determinado ponto usando instruções
como break, por Então, a ideia é que
precisamos colocar todo o código aqui. Então, precisamos colocá-lo em um loop temporal, e
eu farei exatamente isso. Portanto, você pode usar um atalho do teclado, dependendo
do
teclado ou editar linhas e, em seguida, recuar
para recuar essas Então, aqui está um atalho. Mas de qualquer forma, então você
quer escrever enquanto é verdade. E então tudo entra
no circuito selvagem de forma tão fácil quanto isso. Mas ainda não terminamos. Temos mais algumas
coisas para fazer aqui. Mas antes de tudo, eu gostaria de
realmente ter certeza de que você
entendeu o loop wil. Então, deixe-me acionar o
console Python aqui rapidamente. Então, o que o loop Wil faz é, digamos, se for verdade, imprimir. Digamos que um. Se você executar isso agora, um será impresso infinitamente Então, meu console está
ficando muito ocupado aqui, e eu posso interromper isso usando uma operação de
interrupção do teclado, então controle C ou controle
isso se isso não funcionar Então Wilby está dizendo que, embora seja verdade, o que sempre será verdade,
execute essas linhas Mas se eu tentar executar isso agora, o que acontecerá é que o
Python acionará a captura do vídeo de captura e mostrará a janela, mas é apenas uma janela Então, apenas uma imagem é a
primeira imagem do vídeo. Porque o que está acontecendo
é que o
laço de arame começa, mas vai embora. Ele cria um quadro, o primeiro quadro do vídeo. Portanto, o quadro atual, que é o primeiro quadro
em que o vídeo começa
, converte o quadro
em uma imagem em escala de cinza E depois escorrega
por 3 segundos, ok? Em seguida, mostra a imagem. E então o que o
i loop faz aqui, ele espera que você pressione uma tecla Então, se você pressionar uma
tecla, o processo será interrompido. Então, o que você pode fazer nesse
caso é inserir outro. Deixe-me abrir um espaço lá. Então você precisa alterar esse
valor aqui, então os argumentos. Quando inserimos zero, significa que qualquer tecla que você
pressionar no teclado fechará a janela. Mas se você digitar,
digamos, 2000, isso significa que o script
aguardará 2.000 milissegundos, seja
, 2 segundos. E vamos ver o que
vai acontecer aqui. Então ele mostra meu rosto primeiro, depois espera por
3 segundos aqui. Em seguida, ele espera por
mais 2 segundos. Em seguida, mostra a outra moldura. Então, é muito lento, desse
jeito. OK. Agora, se você pressionar qualquer tecla, nada acontecerá porque você remove o zero daqui. Então, nesse caso, vou forçar a
interrupção do script aqui, Controle C. Não precisamos mais
desse lapso de tempo, e também precisamos de uma E antes de fazer isso, armazenaremos essa ação
em uma variável-chave. E então dizemos que a tecla I é
igual ao método, e então você passa uma
tecla do teclado. Então, se o for igual a Q, então quebre o loop while E vamos colocar 1.000
desta vez. OK. Agora, o que isso fará é capturar o vídeo, eu iniciarei o vídeo
e, em seguida, ele
percorrerá todas essas linhas Então, ele criará um quadro, converterá em cinza e
mostrará o quadro aqui, e então ele
aguardará 1 segundo. E se você pressionar a
tecla do teclado, ela quebrará o laço do fio. E então, se ele quebrar e o vídeo
lançado for executado, o vídeo será interrompido e
a janela será destruída. Mas se você não pressionar nenhuma tecla, isso aguardará 1 segundo mostrará
o próximo quadro. E depois de 1 segundo, ele mostrará o próximo
quadro e assim por diante. Então, salve o script, execute. Então, o vídeo está melhorando. Sim, parece bom agora. Ok, se você pressionar
Q, você vai parar. Ok, vamos melhorar ainda mais. Por que não um milissegundo? Ei, como estamos?
Então, está funcionando bem. E você também pode ver aqui
que a barra de cheques,
a NumPirea, está sendo
impressa a cada E podemos parar com isso agora se
pressionarmos Q, sem mais nem menos. Agora, se você quiser
saber quantos quadros estão sendo gerados lá, há um bom
truque que podemos fazer. Poderíamos criar uma
variável, digamos, igual a um
fora do loop y. E aqui, você diz,
A é igual a A mais um. Então, depois que o loop for quebrado
aqui, você quer imprimir A. Então,
quando você executa o script, obtém o valor um e
, quando o
loop de parede começa a ser executado, ele passa
pela primeira iteração e aumenta o valor A em
um Então, A é igual a um mais um. Então, serão dois. Portanto, A
será atualizado para dois. Em seguida, ele subirá
até o final e depois iniciará novamente. Então, desta vez será A novamente, igual a dois mais Então, A será três
na segunda iteração, e assim por diante, ou você pode colocar
isso em um, na verdade Então, se tivermos duas iterações, isso significa que A será duas, e se tivermos três,
serão três e assim por diante E então imprimimos A aqui
fora do loop, ok? E vamos ver o que
temos. Vou manter o vídeo rodando por 3 segundos e veremos quantas
iterações teremos Então capture um, dois,
três e pare. Então, o último valor que foi
impresso aqui é um valor. Isso significa que tivemos 51
iterações em cerca de 3 segundos, o que é, digamos, cerca de
20 quadros por segundo Então nossa câmera, minha câmera está capturando
20 quadros por segundo Deixe-me executar isso
mais uma vez, a última vez. Então, se eu colocar meu dedo
aqui na câmera, escureci a
imagem e você verá que a matriz numérica
agora é zero, zero, zero Como os quadros da imagem, tudo o que ela tem são valores zero. Portanto, há
intensidade zero na imagem. Ah. Ok, isso é o que eu queria te mostrar
nesta palestra. Então, como eu disse, depois de
ter esses quadros, você pode aplicar
operações a eles, para poder desenhar
retângulos lá, detectar imagens e assim por diante Faremos isso, então criaremos
nosso aplicativo no mundo real. Ao implementar alguma
detecção de movimento em nossos quadros, capturaremos as vezes que um objeto entra em nosso quadro, ou vídeo, e teremos
uma lista desses horários. Então, espero que você ame esta palestra, não a tenha odiado, e nos
vemos na próxima
121. Aplicativo 3: aplicativo detector de movimento da webcam: Bem-vindo a esta nova
palestra, é claro, e isso é muito especial Acontece que estou na câmera
porque nesta palestra, o que você vai
criar é um programa que detecta objetos em movimento na
frente da webcam de um computador E então, o que ele
faz, ele
registra a hora em que o objeto
entrou na webcam. Portanto, o quadro do vídeo e a
hora em que o objeto saiu
do quadro do vídeo Então, agora há um objeto em movimento. No quadro e se eu for embora, você verá que não há
retângulo verde agora no vídeo E agora eu apareço de novo, saio de novo, e assim por diante. Então, vamos construir esse aplicativo do
zero usando Python Sim, temos muitas coisas a aprender,
como processamento
de imagens
e processamento de vídeo, e assim por diante. E por último, o que fazemos então,
se você pressionar Q para sair, o que você obtém é um gráfico E, como eu disse, o
gráfico mostrará as vezes em que o
objeto entrou no quadro. Então, estamos lidando com um gráfico
interativo aqui. E sim, esses são os
momentos em que o objeto
entrou na webcam, como este aqui, e aqui ele dura mais tempo. Então, bem, esse pode ser um ótimo aplicativo se você
quiser detectar objetos. Você pode
colocar esse aplicativo
desse programa Python
no servidor Raspberry,
por exemplo, que
é um pequeno servidor, e você pode colocá-lo em algum lugar que talvez queira
detectar animais Você pode querer saber
quando esse animal está entrando na
moldura e quando está saindo ou
também com pessoas, se for o caso Então, sim, este é um programa e espero que você goste. Temos muito
código para escrever, então vamos começar e falarei com você
na próxima palestra
122. Detectando objetos em movimento do webcamp com Python: Ei, aqui estamos de novo. E nesta palestra,
continuaremos construindo nosso programa de
detecção de movimento no mundo real Agora, antes
de escrever o código, primeiro
gostaria de explicar a arquitetura do programa
que vamos construir. Então, como esse programa é capaz de detectar
movimento no vídeo. E eu suponho que você já saiba
como construir esse script. Então, construímos isso
nas palestras anteriores. E o que esse script
faz é que, caso você o tenha perdido, Ei. Então, o que isso faz é
acionar o vídeo, conforme você faz. Da webcam do computador. Então, estamos processando quadros aqui neste loop de Wile, e assim por diante Então você sabe disso. Eu não vou
passar por eles agora. Então, o que precisamos fazer a
seguir é
processar os quadros que estão sendo iterados
nesse loop de Wile E eu tenho algumas
fotos aqui para ilustrar minhas
ideias, meus conceitos Deixe-me ir para o diretório
onde eles estão localizados. Então, o que esse programa
de detecção de movimento fará é acionar a webcam exatamente como nosso script
atual faz. E uma condição para que
o programa funcione bem é que, depois de
acionar a webcam, o primeiro quadro
do vídeo seja
o fundo estático. Então, se você
planeja usar esse programa, digamos que você configure uma webcam em um laptop ou
servidor de torta de framboesa Digamos que você queira detectar o movimento de um determinado
animal em uma área. Então, primeiro, você
deseja acionar a câmera enquanto o
fundo está estático
e, em seguida,
usar esse plano de fundo como imagem base para
poder comparar as outras imagens. E então o Python pode
detectar se há uma mudança entre o primeiro
quadro e os próximos Então, isso é uma coisa
que você precisa fazer. Então, esse é um
exemplo de plano de fundo. E então alguma coisa, o animal aparecerá
na sua câmera. Então, o que você precisa escrever em seu script no
programa é que, em primeiro lugar, gostaríamos de
esmaecer essa imagem, ou
seja, a imagem de fundo e o quadro atual da câmera. Você armazenará o primeiro quadro
da captura de vídeo em uma variável e depois
converterá esse quadro em
uma imagem em tons de cinza Em seguida, o iloop percorrerá os quadros atuais e você fará o mesmo com
o quadro atual, então você os converterá tons de cinza e, em seguida,
o que você fará essas duas imagens em escala de cinza da
iteração atual do loop, aplicará a diferença Essa é a diferença, um exemplo de
quadro de diferença do quadro Delta, se você pode dizer assim. Nesta imagem em particular, você notará que atrás de mim, há uma lâmpada da sala. Normalmente, você não consegue ver a lâmpada,
mas o Python está, na verdade, fazendo
a diferença entre
a moldura em que eu estava aparecendo e a moldura de fundo em
que a lâmpada está visível Então, surge essa imagem cinza em que cada
pixel tem um determinado valor. Portanto, tem alguns
valores de intensidade. Tudo bem. Isso significa, por exemplo, os valores de alta intensidade
como este onde
estou significam que há
movimento potencial nesta área aqui. Embora as áreas pretas
impliquem que não há movimento. Mas você também vê alguns pixels
pretos claros aqui porque
quando eu apareço na câmera, há uma sombra
atrás de mim e assim por diante. Mas aplicaremos outra
coisa mais tarde, que é chamada de limite Então, basicamente, diremos que
se você ver uma diferença no quadro Delta no
quadro que acabei de mostrar, se você ver uma diferença de
mais de 100 intensidades, converta esses pixels
em pixels brancos, ok? E para pixels
abaixo do limite, converta-os em preto OK. Então você
cria o contorno do objeto que está se movendo
na câmera no quadro Então, estamos fazendo todos esses
processos dentro do ciclo inteiro. E depois de calcularmos o quadro limite
dentro do loop, o que faremos com o quadro
atual é encontrar os contornos dos
objetos brancos no OK. Então, para essa imagem
em particular, teríamos contornos
ao redor desse objeto aqui e os contornos ao redor dele e
ao redor desse também Em seguida, escreveremos quatro
loops que
percorrerão todos os contornos
do quadro atual Vai para esse contorno, para
isso, para isso e para este. E então, dentro desse loop, o que faremos é verificar
a área dos contornos. Então isso, por exemplo,
tem uma área de, digamos, 500 pixels. Portanto, se a área do contorno
for maior que 500 pixels, por exemplo, considere
isso como um objeto em movimento Se a área for,
digamos, menor que 500, como esta aqui
provavelmente tem 20 pixels, digamos que isso não será
considerado objeto em movimento. Espero que isso faça sentido. Então, o que faremos a seguir
é desenhar um retângulo ao redor dos contornos que eram maiores que
a área mínima Isso mostrará esses retângulos
na imagem original. Então, na versão colorida
do quadro atual. Isso significa que
veremos um retângulo no vídeo enquanto
o vídeo estiver sendo reproduzido, veremos um retângulo
ao redor do objeto Posteriormente, detectaremos
as vezes em que o objeto, o objeto em movimento, entrou no quadro
do vídeo no momento em que o objeto
saiu do fundo Mas, por enquanto, vamos simplesmente
nos concentrar em detectar o objeto, o objeto em movimento no vídeo Ok, e vamos
voltar ao roteiro. Feche isso e isso e isso. OK. E vamos remover algumas linhas
desnecessárias aqui. Então, tínhamos uma variável aqui, que
criamos porque queríamos ver quantos quadros
tínhamos no vídeo. Então, não precisamos mais disso e não precisamos que o script
pare por 3 segundos. Então eu removo a hora que
passei e essa que eu vi. OK. E agora aqui, a primeira parte é a
mais complicada Precisamos descobrir uma maneira armazenar o
quadro atual do vídeo. Então, assim que o vídeo começar, queremos armazenar
essa matriz numérica em uma variável e ter
essa variável estática, então não queremos alterar
o valor dessa variável enquanto o loop
é executado no script E a maneira de fazer isso é primeiro
precisarmos
criar um quadro variável
para o primeiro quadro. Portanto, precisamos atribuir a
ele um valor sem valor. Portanto, nenhum é um tipo de dados
Python especial que permite criar uma variável e
não atribuir nada a ela, mas você tem a variável lá Então, se você chamar essa
variável mais tarde, Python não dirá que a
variável não está definida Ok, se você não
entende,
por favor, espere e você
entenderá em pouco tempo. E o que você precisa
fazer agora é escrever uma condicional e aplicar uma declaração
contínua nela Deixe-me escrever a
condicional primeiro e depois explicarei o
que isso faz Então, queremos verificar
se o primeiro quadro
não é . E se for conhecido, atribuiremos o primeiro
quadro, o quadro cinza. Então, o que isso faz é que
o script seja executado, o vídeo seja acionado. Em seguida, o laço de arame
começará a funcionar, obterá o
primeiro quadro ou vídeo e o armazenará
nessa variável de quadro. Essa variável de quadro será
convertida em uma moldura cinza. E então dizemos que, se o
primeiro quadro for conhecido, que é verdade
na primeira iteração do loop, isso é verdade Portanto, o primeiro quadro não é, na verdade porque
não atribuímos nenhum aqui. Atribua o NumPi
ao primeiro quadro. Então, no primeiro quadro, você
obterá a imagem em tons de cinza, que representa o
primeiro quadro do vídeo Então isso acontece logo
na primeira iteração
do loop, ok? Mas então o que
acontecerá é que o Python
executará essas outras
linhas de código
e, em seguida, irá
para o segundo loop E o que o Python
fará é capturar o segundo quadro do vídeo Está bem? Digamos que o primeiro
quadro fosse uma imagem de fundo e, de repente, um objeto apareça
na câmera na frente da câmera. Então, o Python pegará uma matriz de árbitros que contém esse
objeto Então, o segundo quadro e esse quadro serão
convertidos em cinza. Então aqui dizemos que o
primeiro quadro é nenhum, a primeira variável de quadro, obteremos o primeiro
quadro do vídeo. E depois de pegar
o primeiro quadro, não
queremos que essas outras
linhas de código sejam executadas não
queremos que essas outras
linhas de código sejam Porque aqui,
aplicaremos a diferença entre as molduras e
desfocaremos as molduras e assim por diante Então, não queremos que
eles sejam executados. Em vez disso, queremos que o Python vá
até o início do loop e continue
com o segundo quadro Para fazer isso, precisamos
continuar aqui. Então, isso significa
continuar até
o início do loop e não
executar o resto do código. OK. Portanto, o primeiro
quadro é nenhum. O primeiro quadro obtém o valor da primeira imagem do vídeo depois vai para a próxima iteração. Em seguida, na próxima iteração, o que faremos é
pegar o segundo quadro
do vídeo e, em seguida, calcular a
versão cinza desse quadro E então vai novamente
para o condicional. E nesse caso,
o primeiro quadro não é nenhum? Não, não é porque o
primeiro quadro obteve o valor
da imagem cinza na primeira
iteração do loop while Então essas linhas aqui não serão executadas na segunda
iteração do loop, ok? Ótimo. Isso significa que agora podemos
aplicar o quadro Delta, para que possamos calcular
a diferença entre o primeiro quadro e o
quadro atual da imagem. Portanto, o primeiro quadro é a
primeira variável de quadro e o quadro atual
é uma variável cinza. Mas antes disso, gostaríamos fazer algo com o quadro
atual da imagem. Queremos aplicar um
desfoque gaussiano na imagem. E um ponto aqui. Então, a razão pela qual queremos aplicar desfoque
gaussiano é que
queremos desfocar a imagem, então queremos torná-la desfocada,
então suavizá-la, pois isso remove o
ruído e aumenta a precisão o desfoque
gaussiano é que
queremos desfocar a imagem,
então queremos torná-la desfocada,
então suavizá-la,
pois isso remove o
ruído e aumenta a precisão
no cálculo da diferença. Então, isso obtém como parâmetro a imagem que você deseja desfocar. E então estamos passando a imagem cinza aqui
e armazenando a versão desfocada da
imagem na imagem cinza novamente E então temos
outro parâmetro que vem como uma tupla, e aqui precisamos passar a largura e
a altura
do kernel gaussiano Então, quais são basicamente os
parâmetros do desfoque,
mas 21 seriam E você também precisa de
outro parâmetro perdido. Então esse seria o desvio
padrão e eu passaria de zero Zero aqui também é comumente usado. Se você quiser saber mais sobre eles, pode consultar
a documentação, mas esses valores seriam bons. Então, estamos deixando a imagem
cinza embaçada aqui. Então, aqui embaixo, precisamos comparar o
primeiro quadro da imagem, ou
seja, o plano de fundo com
o quadro atual. Vamos chamar isso de quadro, e isso seria igual à diferença de
cv dot apps. Portanto, diferença absoluta entre o primeiro quadro e o quadro
atual, que é cinza. Observe que o primeiro quadro também
será uma versão cinza,
uma versão cinza borrada, na
verdade Então, estamos comparando aqui imagens
borradas em escala de cinza. Está bem? E o que isso
nos dará é outra imagem, ok? E, na verdade, eu gostaria de mostrar essa imagem aqui na tela. Mostra de duas imagens do CB. Quadro delta. Vamos ver o que vamos
ganhar com isso. E antes de executar o script, primeiro
desaparecerei da visualização e depois apareceremos. Novamente, vamos ver. Ok, nada aconteceu porque eu esqueci de inserir o nome da janela Vamos chamar isso de Delta. Moldura. E digamos que moldura
cinza para isso. Agora
deixe-me executá-lo novamente. E aqui estou eu. Portanto, esta é uma versão borrada em tons de cinza que está aqui, e temos OK. Então você pode ver a lâmpada atrás de mim
na moldura Delta. Ótimo. Pressione o Qiki
e saia do vídeo Agora, se eu quiser imprimir, apenas para verificar o quadro delta, isso nos permitirá ver
a diferença entre as intensidades dos pixels
correspondentes Então, deixe-me ver. E se eu parar com isso
agora. Aqui vamos nós. Então, o que temos aqui cinco
significa que não há diferença. Então, nesta área,
provavelmente não
há movimento, mas então você tem
174, que é bem branco Isso significa que o Python
classificará isso como movimento. Ok, isso foi só para mostrar os valores
do quadro de dados. O que precisamos agora é
classificar esses valores. Então, digamos que queremos
atribuir um limite. Então, digamos que, se tivermos
valores maiores que 30, se a diferença entre o primeiro quadro e o quadro
atual for maior que 30, classificaremos isso como branco Então, vamos dizer que provavelmente há
movimento nesses pixels. Então, há um objeto
nesses pixels. E se a diferença
for menor que 30, atribuiremos a ele um pixel preto. Está bem? Então, podemos fazer isso. Então, estamos aqui.
Podemos fazer isso usando o método
de limite da biblioteca CV two Digamos que Delta fresco
seja igual a cv dois, o limite. E o que isso espera
é a imagem. Que você deseja limitar
e, em seguida, deseja
especificar um limite Então, 30 nós, aos 30. E qual cor você deseja
atribuir aos valores
que são maiores que 30? Bem, você deseja atribuir
uma cor branca que corresponda ao valor 255 OK. E você também precisa de mais
um argumento aqui, que é o método de limite Existem alguns
métodos disponíveis, mas estamos usando
esse método aqui. Então, limite binário. Você pode experimentar com
outras pessoas, se quiser. Ótimo. E agora vamos ver como será a aparência
dessa
moldura Fresh Delta. O currículo dois mostra o limite, ok. Delta fresco. Ótimo. Vamos ver. Aparentemente, eu escrevi esse quadro Delta errado,
não o quadro Delta. E mais um erro de digitação na linha 19, que está aqui CV dois Ok, esperemos que
desta vez funcione. E mais um erro. Desta vez, perdi
alguma coisa aqui. OK. Esse método aqui, então o método de limite,
na verdade, retorna uma tupla com dois E o primeiro valor é necessário quando você usa
outros métodos de limite Portanto, o primeiro item da
queda basicamente sugere um valor para o limite se
você estiver usando outros métodos Mas para o binário de limite, você só precisa acessar o
segundo item da tupla, que é o
quadro real retornado Do método de limite. Então você quer acessar o
segundo item da tupla. Ok, eu prometo que isso
é um erro de perda. Ótimo. Finalmente, e este
é o limite. Veja, você pode ver
meu contorno lá, mas você também vê
algumas áreas brancas aqui por causa das sombras Então, estou sendo detectado
como um objeto, mas minhas sombras também estão sendo detectadas como objetos. Está bem? Então você entendeu. Agora, podemos usar imediatamente esse quadro
de limite Delta, que eu chamei de limite Delta. Eu deveria chamá-lo
de limite,
você sabe, apenas para consistência de
nomes Então, podemos seguir em frente
agora e criar contornos dos
objetos brancos na moldura final. Mas antes disso, eu gostaria
de fazer outra coisa. Eu gostaria de atrasar essas áreas. Então, eu quero remover os buracos negros dessas
grandes áreas brancas na imagem. Então, basicamente, eu quero
suavizar meu limite. E para fazer isso, você precisa usar o método retardado
da biblioteca CV two. Então, digamos que queremos
alterar o quadro de limite,
CV dois, DLD. Novamente, você deseja passar um quadro de
limite Agora, se você tiver uma matriz de kernel e quiser que esse processo
seja muito sofisticado, passe essa matriz aqui Não temos nenhum e não
precisamos de um, então você precisa passar nenhum
para esse parâmetro. E há ainda outro
parâmetro aqui, iterações. Digamos que dois. Então, isso define
quantas vezes você quer passar pela imagem
para remover as solas. Portanto, quanto maior esse número, mais suave será a imagem OK. Deixe-me verificar isso rapidamente. Ah, sim, eu mudei
o nome mais cedo, mas eu não o mudei aqui
no método I'm Shaw Moldura nova. OK. Então, você provavelmente pode
notar que as áreas brancas
estão mais lisas agora Então, se eu for embora, você só notará algumas áreas que estão lá
por causa da minha sombra. Então, parece estar
funcionando até agora. Vamos criá-lo agora.
Ótimo. Então, temos esses três quadros. O que vem a seguir? Bem,
a seguir, precisamos encontrar os contornos desse limite
dilatado Em relação à
detecção de contorno com o OpenCV, você tem dois métodos Portanto, você tem um método de encontrar contornos
e um método de desenhar contornos. E com o método find
contorns, o que você faz é
encontrar os contornos em sua imagem e
armazená-los em uma Por outro lado, o método de
desenhar contornos desenha contornos em uma imagem Então, neste caso, o que
queremos fazer é
encontrar os contornos e depois verificar a área
dos contornos Então, digamos que você tenha um
contorno como um círculo
e, portanto, queira encontrar a área que esse contorno define Então você quer armazenar
esses contornos em uma tupla. Então você quer escrever CNTs
C e outro sublinhado. OK. Isso seria igual a. CV dois, encontre contornos. E então você
quer passar o quadro o qual deseja encontrar
os contornos. E é bom realmente
usar uma cópia do quadro, para que você não queira
modificar o
quadro de limite. Então use a cópia aqui. Porém, esse é
o primeiro parâmetro, o quadro a partir do qual você deseja encontrar
os contornos e, em seguida, você tem o método de
recuperação. Externo. Então, você quer desenhar os contras
externos dos objetos que você encontrará na imagem E você tem mais uma cadeia de
argumentos, símbolo proxy. Portanto, esse é um
método de aproximação que OpenCV aplicará para Ótimo. Então, o que
temos é que estamos iterando
no quadro atual Então, estamos desfocando e
convertendo em
escala de cinza, encontrando o quadro delta
e aplicando o Então, a imagem em preto e branco. Em seguida, encontramos todos os
contornos dos objetos distintos nesta imagem Então, se você tem duas áreas brancas contínuas em sua imagem, mas elas são distintas,
você terá dois contornos. Então, um contorno para
cada uma das áreas. Esses contornos serão armazenados
nessa variável CNTs. Então, estamos falando sobre
o x atual, o que
queremos fazer é
filtrar esses condores Então, queremos verificar se queremos manter apenas
os condores que estão, digamos que tenham uma área maior
que
1.000 pixels Para isso, você precisa
iterar, digamos, o contorno em
CNTs E se cv contornar a
área do contorno. Portanto, o contorno pelo qual
estamos iterando, se for menor que 1.000, continue até o início
dos quatro ciclos novamente Então,
o que isso significa é que digamos que o Python encontrou
três condores e
passará pelo primeiro e
dirá a área Então, usamos a área
de conor da biblioteca CB two. Se a área tiver
menos de 1.000 pixels, vá para o próximo contador. Então vá para o segundo conor e verifique de novo e
de novo. Caso contrário, se a área for
maior ou igual a 1.000, as próximas linhas aqui após o loop de
quatro serão executadas. Então, o que você quer fazer se um contorno for maior
que 1.000 pixels Bem, queremos
desenhar o retângulo ao redor desse contorno
até o quadro atual Portanto, verifique se você está
dentro dos quatro circuitos. Então, ainda estamos iterando Esses são os parâmetros que
definem
o retângulo,
que seria igual ao retângulo de ligação de
dois pontos CV ou ao contorno atual Portanto, se o contorno for igual ou
maior que 1.000 pixels, se tiver uma área
igual ou maior que 1.000 pixels,
isso será executado Então, estamos criando um retângulo
e, em seguida, queremos desenhar esse retângulo em nossa moldura até nossa moldura
atual Então, CV, dois retângulos. Portanto, já consumimos esse método em nossas palestras
de detecção de fase E aqui gostaríamos de passar
a moldura colorida. OK. Então esse é o quadro, e você deseja especificar X e Y. Essas são as coordenadas
do canto superior esquerdo
do retângulo, X Y, e você também deseja especificar as coordenadas do canto inferior
direito do retângulo Então X W exatamente assim. E também a cor
do seu retângulo, vamos ver. Verde e largura. Digamos que três. Então, o que
fizemos nessas duas linhas foi criar essa tupla
com essas quatro coordenadas E esses valores
serão atribuídos automaticamente. Então, X e Y
obterão o valor
do retângulo que une
esse controle atual dos quatro E então esses valores
serão usados para desenhar um retângulo no quadro
no quadro atual E então queremos mostrar
esse quadro atual. Então, deixe-me adicioná-lo
aqui. Mostra de imagens. Vamos chamar isso de
quadro e quadro. Na verdade, esse método
aqui é vinculativo, correto. Tudo bem, deixe-me tentar
o script agora. Um CV dois não tem o
atributo encontrar contornos. Então aqui eu tenho um U lá que não
deveria estar lá.
Vamos tentar novamente. Sim, isso é engraçado. Costumo digitar incorretamente essa
palavra área de contorno. Linha 24, remova o U. E deve ser contornada
aqui também OK. O contorno
não é definido novamente. Eu tenho outro aqui. Então tenha paciência comigo. Tente novamente. Sim, desta vez
parece estar funcionando. Então, sem objetos. Objetos. Sem objetos. Objetos. Ótimo. Ótimo. Então é isso que eu queria ensinar a vocês
nesta palestra, e continuaremos com as próximas palestras porque
o que fizemos até agora é que podemos detectar objeto e desenhar
um retângulo ao redor
desse um retângulo ao redor Mas isso não é muito prático. Quero dizer, no mundo real, não basta
desenhar um retângulo
ao redor do objeto, e pronto Então, o que faremos
na próxima aula é
armazenar vezes em que
o objeto entra no quadro quando
o
objeto sai do Então, temos mais algumas
linhas para adicionar a esse código. E eu sei que esse código aqui
era muito difícil de consumir, mas espero que esteja claro agora. Se você tiver alguma dúvida,
sinta-se à vontade para perguntar, e nos vemos
na próxima palestra
123. Armazenando carimbos de data/hora de detecção de objetos em um arquivo CSV ++: Tudo bem, então eu tenho meu
programa de detecção de movimento circulando E como você vê, isso está me capturando em
movimento no momento Se eu me afastar, você só poderá
ver algumas sombras lá. Então, bem, isso é ótimo, mas como eu disse, você pode querer armazenar as
horas em que um objeto entra no quadro para que você acabe com
algo assim. Então essa é a primeira entrada. Como hora de início, aqui é onde o objeto
saiu do quadro e depois da segunda entrada
do objeto e assim por diante Então, nesta palestra, mostrarei como criar
essa tabela usando esse script Então, adicionaremos
mais alguns códigos aqui. E a maneira de
começar a fazer isso é primeiro descobrir o ponto, a linha no script em que
o status está mudando de, digamos, movimento para não movimento. Portanto, não temos movimento aqui. Então, assim que a webcam for acionada, digamos que o status seja zero Então, apenas um símbolo que
estou escolhendo para indicar que não há movimento
no quadro atual Então você obtém
o primeiro quadro, que tem um status zero,
e então você nota, e então você verifica se
o primeiro quadro é nenhum, e então você continua
o loop novamente, e então você pega
o segundo quadro. Então, o status ainda é zero, então você aplica a diferença,
o limite, dilata E depois apague através dos contornos. Então, se você encontrar uma área menor do que eu
alterei anteriormente, eu coloquei 10.000. Então, eu queria detectar objetos
maiores porque
estava mais perto da câmera, então eu queria ajustá-la. Portanto, dependendo dos objetos que
você deseja capturar, ajuste
esses pixels aqui. Então 10.000 é algo como uma janela de
100 por 100 pixels. Então, estamos verificando se você não encontra uma janela
maior que 10.000, então você continua
até o início
do loop até encontrar um controle com esse
tamanho maior do que isso. Quando
o Python encontra esse controle com esse tamanho, queremos alterar
o status para OK. E agora vamos
imprimir essa variável de status. Então, o que você quer fazer é imprimi-lo no final
do loop so status. E deixe-me excluir
essas matrizes numéricas, que estão sendo Não precisamos deles e
abrimos espaço aqui. Então, isso está dentro do loop, e agora espero ver o
status de um ou zero
impresso , dependendo se há um objeto
no quadro ou não. Então, se isso estiver funcionando, significa
que agora temos o status
real do quadro e podemos usar esse 10 para
outras coisas. Então, vamos ver. Ok, não há nada
no momento. Deixe-me minimizar isso para
que possamos ver o console, isso também. Ótimo. Então, zero está sendo impresso, e se algo
aparecer, agora você vê um. Novamente, um, zero, um,
um, zero. Ótimo. Agora podemos simplesmente aplicar
um método de data e hora, você sabe, como a
data e hora faz agora. E isso registraria
o tempo de cada quadro. Então, não queremos exatamente isso. Queremos usar o método daytime
do now, mas não assim, porque
isso registraria os
horários de cada quadro Então, o que queremos, em vez disso é saber quando
o status muda de 0 a 1, o que indica que há um objeto entrando no quadro Então, queremos registrar esse tempo. E também queremos
registrar a outra vez em
que o status muda de 1 a 0, para que o objeto saia do quadro Digamos
que uma lista de status seria igual a
colchetes vazios, uma lista vazia E então eu quero
acrescentar o status do objeto a essa lista Então, depois que esse loop
terminar, que está aqui, eu quero estar aqui no
mesmo nível do loop, então eu quero aplicar
algo fora do loop Então, lista de status, eu
quero acrescentar o status atual da lista aqui
nesta lista de status Ótimo. E para ilustrar, para mostrar do que trata essa lista de
status, eu gostaria de
imprimi-la, na verdade E eu gostaria de imprimir uma lista fora
do loop de arame, então não quero imprimir toda vez que o loop itera Então, movimento aqui. E saia. Então, esses são os status
de cada um dos quadros. Então zero, zero,
zero, sem movimento, e então algo
entrou no quadro. E esse algo
entrou, digamos, 30 quadros, e então o
objeto sai do quadro E é isso. Então, o que queremos fazer agora é capturar o que vem a seguir. Então, a próxima coisa é que queremos capturar
a hora em que trocamos 0-1 e também 1-0 Então, basicamente, o que nos
interessa é
capturar os dois últimos
itens da lista de status. Então, digamos que
temos status zero. Então, começamos com uma lista vazia, e o primeiro item
que será anexado à lista de status é zero E então o segundo item, digamos que será zero ou
digamos que seja um. Por isso, queremos aplicar
condicionais para verificar se os dois últimos itens
da lista estão mudando Então, eu sei que isso pode ser confuso, mas quando eu escrever essas
quatro linhas de código aqui, você
entenderá e fará muito sentido Então, queremos verificar
se a lista de status. Portanto, o último item
da lista de status, que tem um índice de menos
um, lembre-se, indexação da lista, se for igual a um, e lista de status com
índice de menos dois Portanto, o item que
foi adicionado primeiro, o item que foi adicionado em
segundo lugar é igual a zero. Queremos registrar o dia
desse evento em uma lista. Então, vamos criar uma lista aqui, digamos que vezes é igual E então vamos aqui, aqui, e dizemos que as horas são acrescentadas, o
dia, o ponto. Agora, você já
conhece essa função Então, queremos acrescentar o timestamp atual quando Isso significa que precisamos importar ou
a partir da data,
hora, data e hora da importação. Então, aula diurna
da biblioteca datetime. Então, estamos basicamente registrando a hora em que o
status mudou para um. E também queremos registrar a hora em
que o
status muda de 1 a 0 Então, teríamos uma condicional
similar, mas isso seria zero, e
isso seria um. OK. Então, o que está acontecendo aqui é vamos voltar ao
início do ciclo. Então, Python capturou
o primeiro quadro, e ele o converte em cinza, o
desfoca
e aplica um
desfoque gaussiano E então armazenamos
o primeiro quadro na primeira variável de quadro
e, em seguida, calculamos a diferença entre
o primeiro quadro e o
quadro atual, encontramos contornos
e, se esse mínimo encontrar
contornos maiores que 10.000, a variável de status
muda de zero, então começa em zero, então muda em um E isso significa que essa lista de status
vazia receberá outro valor. Mas o primeiro valor
é sempre zero, então a lista
começará com zero. Você sabe, como aqui. Portanto, o
primeiro valor é zero. Então, digamos que
nos próximos dez quadros, será zero, zero,
zero, zero e assim por diante. E então, se um objeto
entrar no quadro, o status
mudará para um. Então, teremos zero, zero, zero, zero e depois um. E então o que estamos
fazendo aqui é comparar os dois últimos
itens da lista. OK. E aqui, eu gostaria de
imprimir a lista de horários para que
você veja o que está acontecendo. E espero receber um erro
na primeira execução aqui porque temos algo
mais a fazer, mas vamos ver. Então, sim, diz que o
índice da lista está fora do intervalo. Isso significa que o Python está
tendo problemas para acessar o segundo item
da lista porque a
lista não tem itens aqui, então não tem E então adicionamos um item, então adicionamos status. E então o Python tenta
encontrar o segundo item, mas não há um segundo Então, precisamos fazer um truque aqui. Precisamos adicionar dois itens. OK. Digamos que nenhum e nenhum. Agora, vamos executar
o script novamente. Portanto, não há nenhum objeto
lá no momento. Agora, um objeto aparece, ele se apaga novamente duas
vezes e mais uma vez. Então, três entradas.
E eu parei com isso. Então, deixe-me ver
essa lista agora. Esta é nossa lista de horários. E então essa é a hora. Então, aqui, o mês, o dia, e quantos minutos e segundos, e depois microssegundos aqui Portanto, essa é a
hora de início em que um objeto entrou no
quadro pela primeira vez. E então esse é
o momento em que o objeto sai do quadro. Então eu fiquei lá por 2 segundos, então 51 até 53. O próximo objeto entra no quadro. Então, deste segundo para este, então por mais dois segundos, e depois outra terceira
vez 0-1 por 1 segundo Então, temos três
entradas no quadro. Então, espero que isso faça sentido. Isso é bom, mas
às vezes pode
acontecer que, quando você está
executando o script, então você tem um plano de fundo,
o objeto apareça, e o objeto
desapareça, apareça novamente. E então, se você sair do programa neste
momento, deixe-me sair. Você verá que
tem um horário de início aqui para a primeira entrada, depois o horário de término
e, em seguida,
outro horário de início aqui para a segunda entrada. Mas então você não
tem o horário de saída. Portanto, talvez você queira adicionar a hora de término
da saída do seu último objeto, que acontece quando
a janela foi fechada. Então você quer ir
aqui no final, e o script está
esperando por uma chave. Então, se você pressionar sair aqui, o loop while será interrompido. Mas antes disso, talvez você
queira verificar o status. Então, se o status for um, e nesse caso, você
acabaria com esse cenário aqui. Portanto, se o status for um, ao pressionar a tecla
do teclado, você deseja adicionar outro
item à sua lista de horários. Então, horários acrescentados à hora do dia
, agora é ótimo. Então, isso deve funcionar
de forma diferente agora. Então, vamos executar o script. Sem objeto. Objeto. Nenhum objeto, objeto na moldura, saia. E agora devemos passar
quatro dias aqui. Quatro vezes, uma, duas, três e quatro. Então isso aqui foi registrado
nesta expressão aqui. Ótimo. E a próxima coisa que queremos
fazer agora é colocar essa lista em um quadro de dados do
pandas e depois em um arquivo CSV Então, teremos uma coluna inicial
e uma coluna final. E na coluna inicial, teríamos, por exemplo, esse valor, e
na coluna final, teríamos os outros valores. Então esse aqui e
o último. OK. Então, primeiro de tudo, precisamos um quadro de dados vazio, o quadro de dados do
pandas Então, vamos usar pandas para criar
quadros de dados, é claro Então, deixe-me importar pandas aqui. E digamos que o data frame
DF seja igual ao pandas DataFrame com colunas começando e Então, isso criará uma estrutura de
quadro de dados para nós, que não tem valores, mas tem duas colunas. E então a próxima
coisa que você quer fazer é sair do circuito. Então, depois de criar sua lista de horários,
você deseja iterar essa lista e, em
seguida,
anexar esses valores
ao quadro de dados do pandas Então, você precisa de um loop, digamos, para I ao alcance. Então, aqui você teria que
iterar com uma etapa de duas. E você gostaria de
iterar quantas vezes houver
valores na lista Então você começa do zero e termina com quantos valores
você tem na lista? Bem, você pode descobrir isso
usando o método de comprimento, então comprima tempos com
uma etapa de dois. Ótimo. Então, para
cada iteração, quadro de dados sólido
do DF
será igual a Anexar pontos. Então você está
atualizando o quadro de dados e aqui você precisa
passar um dicionário. Então, para a coluna inicial, você gostaria de inserir vezes
I e para a coluna final. Portanto, as chaves do dicionário
aqui são início e fim, e você gostaria de acrescentar as
vezes I mais E você quer ignorar o índice. Tão igual a t. Ótimo. Então, o que isso está
fazendo é, digamos, para eu no alcance, isso seria, digamos que temos uma
lista com seis itens. Portanto, temos três estrelas
vezes e três vezes. Então isso significaria um intervalo de zero
a seis com uma etapa de dois. Então, para zero, faríamos isso. Então, começaremos do
zero no loop e acessaremos o item
com um índice zero em vezes, que por acaso é esse
item, por exemplo. Então, o primeiro item. Em seguida, anexamos esse item à primeira linha
da coluna inicial E então acessamos o
item zero mais um, que por acaso é o
item com o Índice um, que deveria ser esse
item, então o segundo item. E anexamos esse item à coluna final
da mesma Então é isso. Em seguida, vamos para o próximo item. Então, desta vez,
começaríamos com o índice três, e então três aqui, adicionaríamos à coluna inicial
e depois quatro adicionaríamos à coluna inicial até a
coluna final, desculpe e assim por diante. E, por fim,
teríamos um quadro de dados. E o que você talvez queira
fazer então é inserir dois CSV. Digamos que vezes CSV. Então, estamos exportando o quadro
de dados para um arquivo CSV. Ótimo. Então, vamos ver
como isso vai acontecer. Está ficando muito escuro aqui. OK. E mais uma vez. Frame, saia. E, como você vê, vezes o CSV foi criado no meu sistema de arquivos E então esses são os tempos. Também posso abri-lo usando o Excel. Então, esses são os horários de
início e fim. Se quiser, você pode
formatá-los, formatar células aqui e ver as datas agora. Ótimo. Ótimo. Então, isso encerra esta palestra,
e espero que tenham gostado. Temos um script muito bom agora
e, para torná-lo mais bonito, gostaríamos de exibir
esses horários em um gráfico. Então é assim que você transforma seus
dados em informações reais. E faremos isso
nas próximas palestras. Mas antes, gostaria de apresentar a biblioteca Bouquet, que é uma biblioteca
para
visualizações interativas no navegador Então, por favor, siga as palestras
na ordem correta, e tenho certeza de que você
aprenderá muito Falo com você mais tarde.
124. Introdução à biblioteca Bokeh +: Olá, bem-vindo a esta
seção nova e muito interessante, é claro. E nesta seção, ao longo
das palestras desta seção, você
aprenderá a gerar visualizações no
navegador com Python Então, estamos falando sobre visualizações
interativas e usaremos a biblioteca Bouquet
Python Portanto, o Boke é uma biblioteca
Python e é bastante nova. E com o Bouque, você pode obter dados de
várias fontes de dados, formatos de arquivo de
dados, como CSV, lista
Python ,
arquivos JSON E você pode criar belas visualizações no navegador Eu costumava ser usuário do
Math Plus Lib e do Seaborn. Então, duas outras
bibliotecas Python que são usadas para realizar visualizações com Mas eu diria que
Boke é mais moderno. E quando eu o apresentar a você, tenho certeza de que você o usará em
seus
projetos de visualização de dados Portanto, nesta seção,
mostrarei como criar gráficos de linhas e gráficos de
dispersão e também como combinar
vários gráficos em
um gráfico e gráficos de
séries temporais um gráfico e gráficos de
séries temporais E escreveremos o código no
caderno Jupiter,
anteriormente conhecido como notebook IPython E o notebook Jupiter é como uma combinação
do console Python , então você escreve código interativo , mas também pode salvar
o script que você O caderno de Júpiter é mais
ou menos assim. Ok. E eu vou te mostrar como instalar o notebook Jupiter
na próxima palestra Portanto, Júpiter é ótimo para
fazer análises e
visualizações de dados , web scrapping
e e Então, tenho certeza que você vai
adorar. E aqui, vamos para
a próxima palestra.
125. Criando seu primeiro enredo em estilo bokeh: Ótimo. Agora você sabe o que é boke porque eu expliquei isso
na palestra anterior Nesta palestra,
mostrarei como criar um gráfico de livro muito básico Sim, então vamos começar do
zero e, passo a passo, vamos melhorar esse gráfico. Sim, digamos que este
seja o seu primeiro
gráfico de livro ou talvez você já tenha
criado gráficos de livros antes. Então, antes de fazer este curso, você já sabe, algumas coisas. Ainda assim, sugiro que você comece por aqui porque vou mostrar a lógica correta para
criar gráficos passo a passo Ah, vamos continuar
e fazer isso. Mamãe. Às vezes,
usarei o notebook Jupiter
para escrever código em Python e
, em outras vezes , usarei o Portanto, o caderno Jupiter é um bom lugar para
começar, na verdade, porque nos permitirá
escrever algum código interativo Podemos simplesmente escrever uma única linha de código e ver o que ela faz. Então, isso é ótimo para
começar com uma biblioteca para que você possa explorar a biblioteca
provando pequenos trechos de código E com a tecla shift e
clique com o botão direito do mouse na pasta Windows over, você pode ir até aqui e
abrir a janela de comando aqui, e isso abrirá um prompt de comando
na pasta atual. Então, em um Macro Linux, talvez
você possa fazer algo
como abrir um terminal aqui ou abrir
um terminal normalmente
e, em seguida, inserir um CD no
caminho para o seu caminho de trabalho. Então, vou escrever o
código nesse diretório. E para instalar o Júpiter,
você diria que o PIP instala o
Jupiter E esse é um
requisito já
satisfeito porque eu já instalei o Jupiter Notebook Caso contrário, você pode
simplesmente seguir em frente e fazer isso
e, você sabe, ele
será instalado para você. E para iniciar o Jupiter Notebook, você diria Jupiter
Notebook, sem mais nem menos E isso abrirá um Jupiter
Notebook no host local. Então, é como um notebook
baseado em serviços. E sim, se você criar agora, você cria um notebook Python
gratuito E dê um nome.
Gráfico básico como esse. E na pasta de demonstração você terá esse
gráfico básico IPYNB,
que significa notebook IPython, mas agora o notebook
IPython foi renomeado para Jupiter mas agora o notebook
IPython foi renomeado para Jupiter Mas a extensão
ainda permanece a mesma. E você também tem
esses pontos de verificação, que são arquivos
reduzidos automaticamente quando Júpiter
salva suas sessões Agora você deve manter sua frente de
comando aberta
e, em seguida, é aqui
que você escreve o código. Você sabe, se você não
preferir usar os livros de Júpiter, você pode usar seu editor
favorito Então, isso seria Atom ou Vim ou o IDE padrão do
Python, e Isso não importa muito. E usarei comentários
para comentar meu código, e isso ajudará você a ler e entender meu
código com mais facilidade porque, você sabe, escreverei alguns códigos aqui e outros códigos
e mais tarde assim. E vou explicar o código
à medida que o digito. Mas às vezes você
esquece o que eu digitei aqui e está se esforçando
para entender, mas se eu tiver alguns
comandos aqui, digamos, traçando
os valores X e Y. E se eu escrever
este comentário aqui, Python não o lerá como
código, então ele o ignorará, mas você pode lê-lo
e presumir que estou escrevendo esse
comentário para o próximo bloco Então eu escrevo o comando, não deixo espaço e
digito o código lá. E então eu deixo um espaço lá e eu digito
algum outro código lá. Portanto, é outro bloco que não tem a ver
com esse comando. Então, esse comentário será sobre
esse bloco de código lá. Às vezes, talvez eu queira aplicar comentários específicos
sobre linhas específicas. Por exemplo, esse aqui. Nesse caso, escreverei
o comando ali mesmo. Então, digamos que para os valores de X aqui ou
algo parecido. Ótimo. E o primeiro comentário
geralmente será sobre o roteiro. Então, o que faremos é
criar um gráfico básico de boe. Este será um gráfico
de linhas. Ótimo. E eu vou deixar um espaço lá,
e aqui eu começo o código. Então, primeiro de tudo, vou importar o Boke e
explicarei isso mais tarde, mas o bouquet tem algumas
interfaces E a primeira interface
é a plotagem de buquês. Por isso, é chamada de interface de
plotagem Bouquet. E eu vou examinar
as interfaces mais tarde. Então, por enquanto, vamos nos
concentrar na aparência de um gráfico e na aparência do código
para criar um gráfico booger Então, a partir da
importação da plotagem de buquê , você importa
o objeto de figura, que é o objeto mais
importante no buquê, porque ele
conterá um contêiner
onde
você adiciona pontos, adiciona linhas,
rótulos para os pontos
e notas para o
gráfico, e notas para o
gráfico, Então, você adicionará tudo
a esse objeto de figura. É isso mesmo. E então
você precisa ter algumas ferramentas úteis do Bokeh que vêm da interface
booke dot IO Então, a partir disso, você deseja
importar o arquivo de saída e mostrar. Sim, isso é basicamente
o que precisamos. Você verá o que tudo
isso é daqui a pouco
e, em seguida, precisamos
criar alguns dados. Então, vamos criar alguns dados falsos
lá. Prepare alguns dados. Vou usar listas. Digamos, um, dois,
três, quatro e cinco. Então, isso é para o eixo X. Portanto, no gráfico,
esses valores
serão mapeados ao longo do eixo X. E então temos
o eixo Y lá. Digamos, seis, sete,
oito, nove, dez. Note que essas listas
precisam ter o mesmo tamanho, fim de plotá-las no Bukit Caso contrário, o Bouquet
gerará um erro. Eu direi que você sabe, Bouquet começará a
receber pares dessa lista Então, serão necessários um e seis, e os mapeará ao longo
dos eixos X e Y. Então, ele criará um ponto
com as coordenadas um e seis, depois dois e
sete, e assim por diante. Eu passo por cinco e dez. Então, se você adicionar um
número de linha aqui, digamos, sete ou qualquer outra coisa, o
Python dirá
: Ah, eu não encontrei um par
para sete no eixo Y. Então você recebe um erro. Ótimo. Então, temos os dados. Prepare o arquivo de saída. Então, aqui é onde você usa
a função de arquivo de saída. E aí você passa o nome do arquivo HML que
será criado Assim, você pode escolher
todos os nomes que quiser. E então a próxima coisa
a fazer é
criar uma instância de
objeto de figura. Você tem a classe de figuras lá. Você o inseriu
e pode usá-lo agora, sem mais nem menos Estou armazenando isso
na variável F. Deixe-me comentar isso.
Crie um objeto de figura. E, finalmente,
crie um gráfico de linhas. E a maneira de criar
o gráfico de linhas é referindo-se ao
objeto de figura que você criou
e, em seguida, aplicar
o método de linha se quiser criar uma linha. E a linha espera que
você passe
a matriz X com dados
e a matriz Y também. Então, eu sei que tudo o que
estou passando aqui são os requisitos mínimos
para construir um terreno. Mas há muitos
recursos que você
adicionará posteriormente
aqui no código para que possamos enriquecer nossos gráficos
com recursos
como legendas e rótulos e cores
e
transparência, etc Mas essa é a
espinha dorsal, por assim dizer. E depois de
criar uma linha, tudo o que você precisa fazer é usar o método show para mostrar
seu objeto de figura. E para executar isso em Júpiter, basta pressionar
Control e Enter Espere um segundo. E eu
recebi um erro lá. Oh, digamos que deveria ser um arquivo
de saída. Desculpe. Execute novamente, e aqui
está o gráfico de linhas. De qualquer forma, se você observar isso, verá que o primeiro ponto da linha está nas coordenadas um Então esse é o eixo X, um para o X seis para o Y. Se você olhar aqui está um e seis, e então você tem
dois e sete e então um até o último ponto, que é de cinco a dez Cinco e dez. Sim. Então isso é um gráfico. E isso não é um gráfico de imagem. Como você pode ver, eu posso
mover isso e você também tem
algumas ferramentas aqui. Então, eles são chamados de ferramentas. E o que você pode
fazer com isso é, digamos, isso é uma caneta, e você vê essa linha azul
vertical aqui, que significa que a
ferramenta Caneta já está ativada. E se eu mover meu
cursor desse jeito, vou escrever ao redor do gráfico. Se você clicar,
digamos, no Zoom da Roda, verá que o Pan e o Zoom da roda estão
ativados agora, e eu posso usar a roda do
mouse para aumentar e diminuir o zoom. Agora lembre-se do que eu te disse, o buquê produz
gráficos interativos. Então aqui está. No entanto, essa é apenas
uma funcionalidade básica de interatividade porque mais tarde, como eu disse anteriormente, adicionarei
widgets aqui que interagem de forma muito
poderosa com De qualquer forma, basicamente, você
também tem essa caixa Zoom, na qual você pode ampliar uma
determinada área do seu gráfico. Você também tem isso
redefinido para lá, o que realmente redefine o
gráfico para sua visualização padrão E o que resta,
temos esse botão de ajuda, que leva você à documentação do
Bouquet, e eu examinarei a documentação do
Bouquet posteriormente, que é muito útil para
você obter ajuda E também é um
botão seguro aqui que você pode usar para salvar seus gráficos
em gráficos e imagens PNG Então, se você quiser converter seu gráfico em imagens,
você pode usar esse botão. E a, isso é sobre a
construção de um gráfico básico, e eu gostaria de lhe dar algumas
atividades práticas, você sabe. Você sabe, aqui eu
usei um gráfico de linhas, mas você pode usar outros
tipos de glifos É assim que essas
geometrias são chamadas em Boha e você pode ter uma ideia
de quais glifos você pode usar Você pode aplicar à sua
figura fazendo D e F, que é a instância do objeto
de Você verá aqui,
vamos encontrar a linha. Aqui está a linha. Então esse é
o que você usou. Mas eu gostaria de pedir que você
faça seus próprios gráficos usando o
primeiro triângulo do círculo de Alana Então, isso seria muito fácil. Em vez de linha, basta passar essas coisas aqui e
ver o que você ganha. Mas tente fazer o gráfico do zero
em vez de copiar o meu. E deixe-me comentar isso.
Esqueci de comentar Você também pode brincar com alguns outros dados para
ver como isso acontece. E sim, isso
garantirá que você entenda como criar um gráfico de buquê
muito básico E na próxima palestra, mostrarei como usar
mais dados reais Então, usamos is aqui, mas
na próxima aula, usaremos arquivos CSV Então, plotando a partir de um arquivo CSV, criaremos o mesmo gráfico.
Nos vemos lá.
126. Usando o estilo bokeh com pandas +: Bom. Conseguimos criar um gráfico de linhas
usando esse código, e espero que você tenha
brincado um pouco com esse código
e se familiarizado com ele. Agora, você vê aqui que
temos duas listas como saída. Nesta palestra, vou te
ensinar como
usar arquivos CSV para alimentar
seus gráficos de boket E vou usar esse
código como referência. Então, eu vou, você sabe, você precisa pressionar Escape. Ao pressionar
Escape, você pode aplicar atalhos de
teclado às células E você pode ver uma lista de atalhos aqui: atalhos de
teclado E, por exemplo,
o que eu quero fazer agora é
copiar uma célula com C, e então eu quero
colar essa célula abaixo com
V. Mas antes de tudo, você precisa estar no modo de comando. Então, para entrar no modo de comando, você precisa pressionar Escape, como diz o script de ajuda. E sim, certifique-se de escapar
e depois C e depois, e você tem outra
célula aqui. Além disso, eu gostaria remover esse cabeçalho
aqui e ir para view, Togle header e depois
TogleToLbr também Então eu tenho mais
espaço para você aqui. Então, esse é o código com o qual
vou trabalhar. Entre e, sim, vou
trabalhar nesse código por enquanto. E deixe-me ir aqui. Esse é o diretório de trabalho. Vou seguir em frente e
criar um arquivo CSV. Digamos CSV com pontos. Sim, e vou
editá-lo com o Nopats. Você pode usar o Excel se quiser. Então, eu vou ter apenas
duas colunas aqui. Esse é o cabeçalho, e
depois um para X, seis, para Y, dois e sete e
três e oito, e quatro e nove, e mais um, dez. Guarde isso. Feche isso. Portanto, observe que ponto de
dados CSV está no
mesmo diretório com o ponto gráfico
básico IPYNB
e acesse Agora, estamos importando o Boca aqui, mas eu também vou importar
painéis Então, vamos mencionar isso
aqui e os pandas. Deixe-me usar
B minúsculo e importar pandas. Sim, prepare alguns dados. Hmm. Então, eu suponho
que você conheça pandas Então, basicamente, o
quadro de dados é o objeto principal, e você deseja criar
um quadro de dados a partir do CSV fall, que é o CSV de
pontos de dados, desse jeito E então, vamos criar
duas variáveis aqui. Portanto, a variável X
será igual a DF. Colchetes, a coluna X. Portanto, não confunda a
coluna X com a variável X. Acontece que eles têm
o mesmo nome. OK. E também a matriz Y, a F. Y? OK. Sim. Isso deve bastar. Deixe-me renomear isso.
Do CSV. Executar. E você obtém exatamente
a
mesma linha que obtivemos anteriormente com
a lista simples aqui. E, ah, é
basicamente assim que você alimenta seus gráficos de apostas com as matrizes DataFrame do
Panda Então, novamente, só para esclarecer as coisas,
esse é o quadro de dados Tem duas colunas, e você
tem a coluna X então. Então isso foi armazenado. Na verdade, essa é a
coluna do índice, essa aqui. Esses são os
dados reais dessa coluna. E você também tem
a coluna Y lá. Então, é isso. Como você pode ver, Bouquet é capaz de
ler playlists, então Python é como esta aqui,
e é real e também um quadro de
dados Então, isso é chamado de sério. Você pode verificar isso.
Sim, um sério. E, sim, é isso.
DD para excluir uma célula. E sim, vamos
continuar com mais algumas
palestras lá, até mais
127. Criando um enredo de séries temporais +: Tudo bem. Nesta palestra, você aprenderá a criar gráficos de séries
temporais Estamos falando de dados
em um dos eixos. Normalmente, o eixo X
consiste em datas ou horas. Digamos que temos
observações de temperatura para várias datas e teremos que traçar esses valores
ao longo dos eixos X e Y. Eu tenho alguns
dados interessantes aqui que vamos
extrair deste link. Portanto, é um arquivo CSE. Na verdade, você não precisa baixar
o arquivo CSV, porque o passaremos como um link diretamente para
o método CSV Então, o que temos aqui é uma coluna de data e alguns
outros atributos. Portanto, talvez você queira traçar
os dados ao longo do eixo X. E então, no eixo Y, você deseja mostrar um
desses recursos. Digamos que esse atributo próximo. Então, eu vou
fechar isso. Não preciso desse
arquivo porque usarei um link direto e
permitirei criar uma nova célula. Então, vou usar, novamente, a interface de
plotagem do bouquet that E também importe pandas. A chave aqui é que
usaremos um quadro de dados do
pandas
e, em seguida, analisaremos essa coluna de
data e hora
como datas para que o
Python as leia como datas e, na verdade, seja capaz de
plotá-las no E então usaremos um glifo de
linha para traçar esses dados. Então, um glifo de linha
seria, você sabe, você pode usar círculos, triângulos,
etc., mas você também
pode Então você passaria a linha aqui, mas o tamanho não faz
sentido porque você pode
querer passar a linha com para a linha. Portanto, não é o tamanho, mas a largura da linha. E, você sabe, se você executar isso, você não verá mais
círculos, então não é um gráfico de dispersão agora, mas é um gráfico de linhas Então, usaremos o mesmo conceito para construir esse gráfico de tempo diurno,
gráfico de séries temporais. Então, a primeira coisa que você quer fazer é carregar os dados CSV dentro do Python Então, o painel lê CSV, e você pode passar
o link desse link diretamente
para o método CSV Então, quão conveniente é isso? E então você deseja passar o ano do parâmetro de datas de
análise e especificar
o nome da coluna em
que essas datas estão E o nome dessa
coluna era data. Então, se você se lembra
do arquivo CSV que abri anteriormente,
essa era a data Assim, depois de carregar
o objeto do quadro de dados, você deseja criar
um objeto de figura. Digamos que a largura seja igual
a 500 e lute. Digamos que 500 por enquanto, depois verificamos como funciona e podemos alterá-lo mais tarde. Portanto, temos o parâmetro do
tipo de eixo X aqui. Então, o que isso deve
fazer é tornar seu eixo,
seu eixo X, espacial para que ele
possa ler os tipos de dados de data e hora. Então, para declarar
que você tem daytis, você precisa passar um
argumento diurno como uma Então é isso. E
então o que você quer fazer é aplicar o
objeto de linha lá dentro. Então, semelhante a isso agora, você precisa passar o
eixo X e o eixo Y. Portanto, o eixo X aqui
deve ser a data DF. E o outro eixo é, digamos, próximo, então
a coluna fechada. E vamos deixar a linha
laranja. E o que mais? Talvez uma transparência de 0,5. E especifique onde você
deseja salvar isso. Então, sob qual nome HTML
Time Series dot HTML. E por fim, mostre o
enredo. E vamos ver. E algo não está funcionando, então o Python não está conseguindo
extrair os dados lá Oh, eu preciso passar os dados
aqui como uma lista, na verdade. Então, sim, parece melhor, mas também parece
um pouco apertado Então, o que você pode fazer aqui é
mudar isso para, digamos, 250 e você
obterá um gráfico melhor lá. Agora, se você quiser estendê-lo para a página inteira, há
algo que você pode fazer lá. Na verdade, você pode passar
o responsivo e defini-lo como verdadeiro. Bem, vamos ver. Então você tem um gráfico maior lá. E, claro, você pode ampliar
para ver alguns detalhes lá. Então, para 8 de maio, você tem o valor de uma indidade. Você entendeu a ideia. Então, isso
conclui esta palestra, e
nos vemos na próxima
128. Mais exemplos de visualização com Bokeh: Tudo bem, vamos resumir agora. Então, fomos capazes de
gerar gráficos, e você viu que, até a lei,
gerávamos gráficos únicos Então, por exemplo, aqui, você verá um gráfico de linhas. Agora, se você quiser combinar
vários glifos em um gráfico, isso seria muito simples Então, digamos que você
tenha duas parcelas. Você adicionará um gráfico de
dispersão lá. Então, você precisará
adicionar um glifo circular. Então, logo abaixo dessa linha, glifo ou acima, isso não importa Então, circule com essas coordenadas
ou podemos alterá-las. Então, vamos
dobrar o eixo X. Oito vezes dois para mim nesta
lista, que termina aqui. E então esse
deve ser o tamanho, digamos oito e azeitona. Então é assim que você obtém
vários glifos em um gráfico. Isso foi muito fácil.
Por isso, acredito que lhe dou uma boa introdução
à biblioteca Bouquet E acredito que você
vê seu potencial, então é ótimo usar o Bouquet para gerar
visualizações Agora, se você quiser se
aprofundar no
buquê, talvez queira
traçar diferentes tipos de gráficos,
indique primeiro esse
recurso Então isso é documentação,
a documentação do buquê. E isso é sobre
plotagem com glifos. Então, o que você tem aqui
são vários exemplos. Na verdade, usamos essa e
outras também, linhas. E você também pode traçar patches. Então, basicamente, você passa as
coordenadas de cada um dos pontos
do polígono aqui e o buquê desenhará o
polígono Então, essas são as coisas básicas. E aqui eu gostaria de
parar um pouco. Então, isso é chamado
de gráfico quadrático, na verdade, este aqui Então, em vez de passar por um círculo de linha,
você passará por um quadriciclo E isso
consiste no topo. Então, a borda superior
do seu quadrante. Então, por exemplo, o
primeiro quadront aqui tem uma borda superior de dois
e uma inferior de um Portanto, é fronteira com um e dois. E então a esquerda
seria uma e a direita, 1,2, então uma esquerda e 1,2 direita. E então você tem
o próximo quadrante, que também é este aqui com
suas coordenadas,
e aqui estão as cores para que você
possa usar
códigos de cores CSS se quiser, além de usar cadeias de cores como vermelho, laranja e amarelo,
e assim por diante Então, a razão pela qual eu parei esse gráfico é
que vamos usar esse gráfico para realmente visualizar os
horários do nosso programa de vídeo Portanto, as vezes em que
um objeto entra
no quadro do vídeo e quando o objeto sai
do quadro do vídeo Seria ótimo se você
começasse a pensar sobre isso agora, como você vai
usar o arquivo CS que
geramos no programa de vídeo anteriormente e plotar esse arquivo em um gráfico semelhante
como este. Existem alguns
truques e
não espero que você resolva isso
totalmente, mas é bom
pensar sobre isso. Você também tem essa galeria
aqui, a galeria Bouquet. Aqui temos alguns
belos lotes. Você tem o histograma. Se você clicar em um desses, então, por exemplo, eu vou
fazer esse mapa. Então você pode simplesmente copiar esse código e colá-lo em
seu script e executá-lo, e você obterá o mesmo mapa. Isso é o que eu queria
ensinar a vocês sobre o Bouquet, e nós o
usaremos mais tarde, como eu disse, para visualizar esses
momentos em que um objeto está se movendo em nosso quadro de vídeo na frente de
nossa webcam . Então eu vou
falar com você mais tarde.
129. Como plotar intervalos de tempo a partir dos dados gerados pelo aplicativo de webcam: Olá, bem-vindo a
esta nova palestra. Então, o que vou fazer
aqui é dar o toque final ao nosso programa de detecção de
movimento. Especificamente,
construirei um gráfico usando a biblioteca Bouquet,
onde visualizarei as vezes em que o
objeto entra e sai do quadro,
o quadro do E a saída final será
mais ou menos assim. Então, o que temos aqui é
um gráfico com um eixo X. O que é traçar o dia,
enquanto o eixo Y não faz
nenhum sentido Então, apenas uma extensão vertical
das barras que está aqui. Então, o que temos
aqui é, digamos,
eu ligo a câmera nessa
data, então 17 de março. E então essa primeira
captura aqui é, você pode ver que ela começou
nesta data e terminou
após 4 segundos. Então, esse objeto entrou no
quadro na data de início e permaneceu por 4
segundos lá e depois saiu do quadro do vídeo Então, da mesma forma, temos
esse outro objeto. Então, ainda no dia 17 de março. E então temos
esse outro aqui. E aí começa
o outro dia. Então, 18 de março, e essas são as horas
entre esses dias. Então, 4:00 oito, 12, 16 e barraca. E você também pode ver
que eu adicionei recursos de
passar o mouse aqui para que, ao passar o
mouse sobre essas barras, eu receba essas informações E você também pode ampliar aqui. Então, se você quiser mais
informações sobre isso, você pode ver as
informações claramente aqui. Então esse é o produto. Agora, o que o script está
fazendo no momento é produzir a hora de início e a
hora de término do objeto que entra
no quadro em um arquivo CSV Então, especificamente, o programa está acionando o
vídeo da webcam E então você tem alguns
objetos lá dentro. Pressione cue para sair. Então, o que você obtém
são os vezes o CSV. Onde cada linha representa a hora de
início e depois a hora. Ok, você já sabe disso. Então, no momento, o que temos aqui também é uma lista com o status
do quadro atual. Então isso tem,
digamos, 100 itens, que significa que tivemos 100 quadros
neste vídeo de sete segundos. Agora, a primeira coisa
que você pode querer fazer é uma pequena melhoria
aqui muito rapidamente. Esta lista, se você tiver uma webcam, capture um vídeo longo. Portanto, se você o
estiver executando por muitas horas, essa lista pode ficar muito grande;
portanto, para evitar problemas de memória, você pode querer ir aqui. Então, aqui você está verificando
o último item
da lista e o item
antes do último item. Então, os dois últimos itens significam que não
precisamos desses outros itens. Portanto, só precisamos manter apenas
dois itens perdidos. Isso significa que logo após
anexarmos o novo status aqui, dizemos
que a lista de status
é igual à lista de status, mas com apenas os Então, se eu executar isso agora, obterei apenas
os dois últimos status do quadro do vídeo
impressos como uma lista Então, a lista está sendo impressa aqui. Então, isso é uma
melhoria em prol da memória. Agora, como podemos contornar a
construção de um terreno com buquê? Então, primeiro, temos que pensar na estrutura dos nossos scripts. Então, esse
objeto de plotagem que
criaremos usando um quadrante, então isso espera que um
quadro de dados seja enviado como entrada Então, na verdade, temos
um quadro de dados aqui. E estamos enviando
o quadro de dados para os horários do arquivo CSV O que vou fazer aqui é
criar outro arquivo, script
Python, digamos,
plotando E aqui é onde vou
escrever o script, o código para traçar os dados Nesse caso, isso
significa que precisamos buscar o quadro de dados desse programa
detector de movimento para esse script Então, o que você pode fazer é
dizer, a partir do movimento, do detector, da importação de DF Isso disponibilizará o quadro de dados DF que está sendo gerado neste programa detector de
movimento, que significa que, quando você quiser
executar o programa posteriormente, executará o ponto pi de
plotagem com Então, quando você
executa Plotin dot pi, plotar o ponto pi exigirá a
execução desse script dot py do
detector de movimento Assim, o vídeo de uma webcam
começará e, quando
esses loops terminarem, esse quadro de dados
será gerado Isso significa que depois disso, o script, o código
do ponto pi da plotagem
será executado Então, aqui você
obterá o quadro de dados e o plotará e assim por diante Espero que esteja claro. Então, vamos prosseguir agora e importar a interface de plotagem do Portanto, do BokePloting, na verdade, não
importaremos toda a interface de plotagem Precisamos apenas de
apresentação de figuras e arquivo de saída. Vamos manter a calma aí. E então vamos seguir em frente e
criar o objeto de figura. E o tipo X será
do tipo data e hora. Vamos definir uma altura de
100 e uma largura de 500. E vamos torná-lo responsivo. Título do gráfico de
movimento. OK. Então, uma vez que temos uma figura lá, queremos traçar um
glifo nessa Esse glifo, nesse caso,
seria um quadrante, então quádruplo Portanto, um quadrante seria mais apropriado para traçar esses intervalos de
tempo ali. Então, o truque para ter esse glifo quádruplo para
visualizar sua data e
seus horários ao longo do eixo X
é passar da esquerda para a direita, inferiores Então, para a esquerda, você gostaria de passar
a hora de início, à esquerda da caixa de
caixas que você vê aqui. Portanto, a borda esquerda seria a hora de início, enquanto
a borda direita. Então, o DF seria o fim dos tempos. Então, aqui está nosso CSV, que não é o que estamos usando, mas essa é uma
estrutura dos dados Então, hora de início à esquerda
e, em seguida, hora de término à direita do retângulo
do E então aqui está um truque que
podemos fazer para o fundo. Gostaríamos de manter um valor fixo. Então, zero para cada quadrante
e, em seguida, um para cada
quadrante também É isso mesmo. A cor não
é um problema. Digamos verde. E eu
gostaria de tentar isso por enquanto. Então eu vou colocar o arquivo. Isso seria gráfico com pontos HTML. Mostre a figura Pi. E vamos ver o que
vai acontecer até agora. Então, Python, não queremos
executar o detector de movimento agora, mas queremos executar a
plotagem Então esse é o nosso roteiro principal por
onde começamos. E eu tenho um erro
estúpido de sintaxe aqui do Book a
plotting figure, aposto que você sabia que
eu perdi
a palavra-chave de importação Então, a partir do BokePlot,
importe a figura mostre o arquivo, salve e tente novamente E aqui está o objeto webca. Objete novamente. Outra vez. Desistir. E vamos ver
o que vai acontecer agora. E mais um
erro, responsivo. Bom. Desculpe por isso. Tente novamente. Primeiro objeto, segundo objeto
ali, e mais um? Desistir. E devemos
ver o gráfico. Sim. Sim, está parecendo bom. Então, eu posso ver aqui e
você também pode notar que temos uma granularidade bastante
desnecessária Portanto, não precisamos de todos
os adesivos aqui. E também, você pode ver aqui
que isso é 19 segundos, o que significa que já passaram 19
segundos do último minuto. Então, se fosse, digamos, 15 minutos e 19 segundos. Então, 20 segundos dos
15 minutos e assim por diante. Para que você realmente não
veja o panorama geral em apenas 10 segundos de vídeo, mas também para torná-lo
mais informativo, eu adicionaria uma ferramenta de passar o mouse a
essa barra para que, ao passar o mouse aqui, como você sabe,
você veja a hora de início e
término para poder ver
o tempo completo,
caso os rótulos aqui não sejam suficientes Mas primeiro, vamos remover
os adesivos aqui. Então, voltamos ao roteiro
e deixe-me colocar isso de lado. A maneira de fazer isso seria modificar o objeto de
figura, ou
seja, a variável P. E então estamos trabalhando
no eixo Y, então Yaxs. Então, acessamos o
objeto do eixo Y do objeto de figura, depois a cor do marcador menor, e queremos defini-la como nenhuma. Então, isso funciona aqui. Além disso, você pode ver que também
temos uma grade. Portanto, não queremos essas linhas
intermediárias aqui, e podemos fazer isso
acessando o objeto de grade, que é a lista, então você precisa acessar o
primeiro item da lista. Então, há um grande truque, mas você tem que fazer as
pazes com isso. Então, diga desejado. Número de carrapatos. Então esse é o método
e defina-o como um. Então, vamos ver como o gráfico
mudará dessa vez. E é uma boa ideia colocar outro nome
no gráfico para que
possamos comparar os dois gráficos. Então, faça o gráfico um para isso. E vamos ver. Aqui. E desista. E eu tenho um atributo
menor de cor de carrapato. Eu costumo colocar isso de forma errada. O bom é que o Bouquet tem um bom tratamento de erros, por isso tem atributos semelhantes
ou uma cor de linha secundária Portanto, ele é realmente capaz de ler
o que você insere lá e sugere o que inserir
, com uma cor menor da linha Ti. Então, temos uma linha aqui. Então, tente novamente. Vamos ver, desta vez,
o que vamos conseguir. Então agora parece mais limpo,
como você pode ver. Aqui está nosso gráfico anterior. Esse é o novo,
então não temos as linhas horizontais da grade
e os carrapatos aqui E pensei em interromper
essa palestra neste momento. E na outra palestra, mostrarei como
adicionar esses
recursos de passar o mouse ao seu gráfico Então eu vou falar com você
na próxima palestra.
130. Implementando um recurso de hover: Ótimo. Temos um
gráfico visualizando os intervalos de tempo em que o objeto entrou no quadro
do vídeo Agora, vamos modificar nosso código para adicionar uma janela,
uma janela aparecerá
aqui quando o usuário passar o mouse sobre
esses quadrantes Vamos fazer isso. E a ferramenta Boke para implementar
a funcionalidade Hover
é chamada de ferramenta Hover E isso é acessado
a partir da interface de nível inferior chamada modelos, ou
seja, modelos boket dot Então você quer importar
a ferramenta Hover. Vamos agora ver como vamos usar isso dentro do nosso script. E, basicamente, esse é
um método que espera de você algumas
matrizes com dados para que o método da ferramenta Hover as
exiba quando o usuário passar o mouse
sobre Portanto, se o cursor estiver
nesse quadrante específico, digamos que os dados
desse quadrante serão exibidos
na janela pop-up Então, o que você quer fazer é, depois de
criar sua figura, criar
um objeto flutuante, que será igual
à ferramenta Hover Que tem um
parâmetro de duas dicas, e isso vai ficar como uma lista de
argumentos de tuplas, e em cada tupla, você deseja especificar as
linhas da janela pop-up Então, digamos que na primeira
linha da sua janela pop-up, você queira ter
uma string inicial
e, além disso, uma string inicial, você queira ter a
matriz com seus dados. Isso tem esse
decorador espacial aqui. Então, no nosso caso, essa seria a coluna inicial
do quadro de dados. Então, queremos a hora de início e depois a hora também. Então, para a string e e
para o nome de uma coluna. Então, isso deve bastar quase. Mas precisamos adicionar essa ferramenta
usando o método at tools. Então, o objeto flutuante, precisamos adicioná-lo
aos menus de ferramentas Então isso deve ser um
ponto. E é isso. E teremos que adicionar mais aqui, mas vamos ver o que
obtemos até agora. Então, Python traçando dot py. Aqui está um objeto, outro e um terceiro e saia. Então, sim, aqui está um gráfico, e estamos quase
lá, mas ainda não. Então, como você vê, por algum motivo, Python está tendo problemas para buscar os valores da coluna
inicial e final E você também percebe que temos duas colunas para cada uma
dessas linhas aqui. Então, a primeira coisa que você
quer fazer é remover essa coluna. Você não precisa disso
porque o Bouquet o está adicionando por padrão Então é isso. E agora, para resolver
o outro problema, o principal problema
dos pontos de interrogação é adicionar o método da fonte de
dados da coluna. Que vem da interface de baixo nível
dos modelos reservados. Portanto, a fonte de dados em coluna é uma forma padronizada de
fornecer dados a um gráfico de livro Portanto, se você tem quadros de dados, listas ou outros objetos, para algumas funções
no livro, é necessário convertê-las em um objeto de fonte de dados de
coluna. O que na verdade é muito fácil. E deixe-me fazer isso aqui. Então, pegamos o quadro de dados aqui
e, em seguida, digamos que a fonte de dados da
coluna, CDS, seria igual
à fonte de dados da coluna Então, os métodos e os dados que
você deseja passar para ele. Portanto, temos um
quadro de dados neste caso. E depois de fazer isso, você precisa ajustar aqui, não o objeto de figura, porque não
estamos passando nenhum dado aqui. Estamos apenas construindo o
ambiente para o terreno, mas você precisa modificar
o quadriciclo. Método. Então, especificamente, você deseja
passar o parâmetro de origem aqui, que deve ser igual ao objeto da fonte de dados da
coluna. Então, CDS no nosso caso,
este aqui. Então você está dizendo ao
Bocket usar esses dados, e então você não precisa
apontar para o quadro de dados Então, basta digitar os nomes
das suas colunas lá. Então, vamos ver o que
temos desta vez. Objeto, outro saiu. Aqui está um gráfico. E
sim, quase lá. Mas o problema é desta vez não estamos recebendo os dias no formato correto. A razão para isso é
que o método Hotol. Então, aqui, estamos aqui. O método Hovertol não
é capaz de
buscar tipos de dados de horários diurnos Mas isso não é motivo de
preocupação , pois o que
podemos fazer é converter os tempos dos dados em
cadeias de caracteres no quadro de dados Portanto, antes de passarmos o quadro de dados para o método do objeto de fonte de
dados da coluna, convertemos as colunas inicial e final em tipos de dados de
string Então você já sabe como
trabalhar com daytis. Então, nesse caso, faremos
alguma formatação diurna. Então, o que poderíamos fazer é criar
outra para que uma nova coluna, digamos, inicie uma string. Portanto, a versão em string
da coluna inicial, que deve ser igual
à coluna inicial existente. Dot DT, que permite fazer formatação
diurna
e STR E aqui está agora como você define
sua data a ser exibida. Então, você gostaria de
exibir primeiro o ano, depois o mês, um traço e o dia seguinte, e talvez um espaço lá, uma hora, minutos e segundos. E o mesmo vale
para a coluna final. Então, string, e aqui,
e o mesmo aqui. E, como você pode supor agora, precisamos refletir
essas mudanças aqui. Portanto, essa deve ser a string inicial e essa deve ser
a string final. Então, estamos exibindo
essas strings agora na janela pop-up E vamos ver como
isso vai funcionar dessa vez. O primeiro objeto passa por lá, segundo e o último
e mais um. Desistir. E nós temos um problema
aqui, eu suponho. Eu não mudei os
valores aqui. Então eu fiz
a coisa completamente errada. Eu não deveria ter alterado os
dias neste objeto quadrante porque são datas e horários
porque definimos
o eixo diurno aqui porque definimos
o eixo diurno Então, esse dia expresso é. Então, aqui deve começar a coluna inicial original
e aqui a coluna final. Então, por engano, eu coloquei
esses valores lá. Então comece a string aqui
e a string aqui. Então, isso deve ser suficiente desta
vez. Vamos verificar novamente. Tudo parece
bom. E vamos ver. Aqui vai. Sim,
conseguimos pegar os dados. Vamos ver. Sim,
isso parece bom. Então, agora eu acredito que este
gráfico é bastante legível, e eu acredito que você é capaz extrair algumas informações
desse gráfico Assim, você pode ver quanto
tempo um objeto permaneceu no quadro do vídeo e quando você começou e
quando ele saiu do quadro E espero que você ache
isso útil às vezes. Como eu já disse, você pode
usar um servidor de torta de framboesa. Então, nós apenas temos um pequeno computador e hospedamos esse aplicativo
nesse servidor. E, claro, você pode
construir e, claro, montar uma câmera
nesse servidor e fazer com que ela capture alguns vídeos
de acordo com suas necessidades. Mais importante ainda, espero que você tenha aprendido com essa atividade
prática, e sei que foi
muito difícil de consumir. Se você tiver alguma
dúvida, ficarei feliz em respondê-la. Portanto, sinta-se à vontade para perguntar a
eles no fórum de discussão. E falarei com você mais tarde nas próximas
palestras. Te vejo.
131. Aplicativo 4 Parte 1 - Análise e visualizações de dados com Pandas e Matplotlib +++: Olá e bem-vindo a um
dos projetos mais importantes do curso,
o projeto de análise e
visualização de dados Como você deve saber, o
Python é, sem dúvida a melhor
linguagem de programação para análise e visualização de
dados Python conseguiu ultrapassar as linguagens usadas na análise de
dados, como R, e o segredo do Python é
uma grande variedade de uma grande variedade de bibliotecas que você pode usar E isso significa que você pode combinar seus relatórios e
gráficos de análise de dados que você cria com o
Python com outras bibliotecas do
Python criar aplicativos completos,
como aplicativos web ou até mesmo aplicativos de desktop
, automatizar coisas , etc Portanto, o Python é definitivamente a ferramenta certa para usar
com análise de dados.
É muito poderoso. Agora, nesta seção, não
mostrarei simplesmente o código que faz essa e aquela
operação, mas também mostrarei a
lógica por trás da análise de dados, o que você deve fazer quando
tem um projeto de análise de dados. Como sou formado em análise de dados
geoespaciais
, mostrarei alguns dos
meus conhecimentos na área Vou te dar um conjunto
de dados de 45.000 registros, e vamos transformar
esses dados em informações Isso é o que significa análise
e visualização dados
para transformar dados em informações Por exemplo,
responderemos perguntas como qual é o dia da semana em
que as pessoas estão mais felizes E vamos usar
nossos dados para isso. Os dados são simplesmente dados, mas saber o dia mais feliz da semana
é Agora, uma parte importante
dessa seção é a parte de
visualização de dados Então, deixe-me mostrar alguns
dos enredos que vamos
criar nesta série de vídeos apenas para dar
um incentivo,
uma motivação para você
realmente assistir a essa
série de Todos esses gráficos
são interativos. Então, só para dar uma ideia como esses gráficos serão, aqui estão alguns gráficos
que criaremos Este em particular mostra a classificação
média todos os dias, então a data está ao longo do eixo X e a classificação média
está ao longo do eixo y. Em seguida, vamos fazer
gráficos circulares como este. E também outros
tipos interessantes de gráficos. Na verdade, vou mostrar como
você pode criar qualquer tipo de gráfico que se adapte aos
seus dados e às suas necessidades. E isso vai ser
bem fácil, na verdade, porque eu vou te contar o truque, a
lógica por trás disso. E a boa notícia
com esses gráficos é que você não
precisa fazer muitas configurações porque eles são lindos prontos para uso, e isso é possível graças à biblioteca que
vamos usar Então, prepare-se para isso, e eu falarei com você
no próximo vídeo.
132. Explorando o conjunto de dados com Python e pandas +: Bem vindo de volta. Ao
fazer análise de dados, a primeira coisa que você quer
fazer é se
familiarizar com seus
dados usando a ferramenta,
a ferramenta de análise
de dados que você
escolheu usar
em seu projeto específico Nesse caso, a
ferramenta é Python. Então, o que vamos fazer
neste vídeo é carregar
os dados em Python
usando um notebook Jupiter dados em Python
usando um notebook Jupiter Em seguida, analise esses
dados e extraia algumas informações muito básicas
sobre os dados, como ver quais nomes de
colunas temos, quantas linhas temos e outros
atributos simples de nossos dados. Vamos fazer isso. Gostaria de
informar que criei uma
pasta vazia chamada review. Underscore Analysis e eu
coloco as avaliações desse
arquivo CSV nessa pasta Você pode encontrar essas resenhas arquivo CSV anexado
a esta palestra, como um recurso de aula Então, por favor, baixe-o e coloque-o em uma pasta,
assim como eu fiz. E então você
deve conseguir localizar essa pasta na página inicial de
Júpiter, localizada em
8888
, localizada em
8888
, Então eu criei essa pasta
diretamente na pasta do meu usuário, então essa é a pasta. Posso clicar nele e aqui estão
as avaliações desse arquivo CSV. No seu caso, você pode
criá-lo onde quiser e depois localizá-lo usando
esta árvore de diretórios aqui. Enquanto estou nesta
pasta de Júpiter, posso acessar a nova
lista suspensa e acessar o Python 3 para criar um
novo Então, o caderno Jupiter
foi criado. Posso renomear isso
para outra coisa, o nome do caderno de
Júpiter Vamos simplificar as coisas
e dizer avaliações. Renomeie e isso
obterá a extensão IPYNB. Deixe-me abrir mais espaço aqui para que você veja mais código. Vou desligar o
cabeçalho. E agora vamos começar a programar. A primeira coisa que
queremos fazer, é claro, é importar o Pandas, a biblioteca usada para realizar análises de dados
com Python E então queremos criar uma
variável que
conterá os dados
iguais à leitura do Pandas Como estamos trabalhando
com um arquivo CSV, o método que queremos usar fora da
biblioteca Pandas é Ler Entre parênteses,
queremos passar aspas
simples ou
duplas, onde você quiser O caminho para o arquivo CSV. Agora, se você não digitar
o nome corretamente, receberá um erro. Então, deixe-me tentar
executar essa célula usando Control Enter se você estiver no Windows ou Command
Enter se estiver no Mac. Como eu te
avisei, recebi um erro. Não diz esse
arquivo ou diretório porque eu digitei o arquivo incorretamente Então, resenhas. Desta vez, se eu executar,
não recebo um erro, que significa que os dados foram
carregados com sucesso e posso pressionar Escape, B, Enter e chamar
a variável de dados e Control Enter novamente
para ver o quadro de dados. Então, podemos ver que temos uma, duas, três, quatro colunas. E também temos essa coluna de
índice aqui adicionada automaticamente pelo Pandas Basicamente, é um intervalo de
números começando do zero. Então essa é a primeira linha dos
nossos dados, essa aqui. Isso tem esse índice de zero. E termina na última linha. Você pode ver que esta
é a primeira linha, segunda, terceira, quarta, cinco linhas, e então Júpiter não
está exibindo a linha após a linha cinco porque
há muitas linhas e seria impraticável
vê-las No entanto, você pode ver as últimas cinco linhas
do quadro de dados. E isso fornece uma
visão geral do quadro de dados. No entanto, o que eu gosto de
fazer em vez disso é apenas imprimir a cabeça
do quadro de dados, que são apenas as primeiras linhas. Portanto, as primeiras cinco linhas oferecem uma visão
mais compacta. Isso lhe dá uma ideia de quais
colunas você tem e que tipo de linhas você também tem. Portanto, é bom ter a cabeça
do quadro de dados
exibida aqui. Então, podemos pressionar Escape. B e crie uma nova célula aqui. Digite para escrever algum outro código. Você pode obter a forma
do quadro de dados acessando
a propriedade shape. Então esse é um método
com parênteses. Isso é uma propriedade. Não precisa de parênteses. E então você chega à
forma do quadro de dados, que é basicamente o número de linhas e o número de colunas. Você vê uma, duas,
três, quatro colunas. Talvez você também queira entrar e
exibir as colunas que
seu quadro de dados tem. Embora as tenhamos lá, essa é outra
maneira de ver os nomes das colunas acessando
a propriedade columns. Em seguida, geralmente quando você
está trabalhando com dados, você tem algumas colunas específicas nas está interessado, quais está interessado, que podem ser uma
coluna ou mais. Nesse caso, talvez
estejamos interessados em ver uma visão geral da coluna para ver qual é a
classificação mínima e qual é a classificação máxima
e a distribuição
dessas classificações e
exibi-las como um gráfico aqui para
que possamos entender melhor nossos dados. Então eu vou fazer escape, B, enter e data dot Hit. Então, isso será um histograma. Com parênteses, estamos interessados em ver a
distribuição das avaliações Portanto, eu entro na coluna de
classificação aqui, digo string, execute e obtemos esse gráfico. Deixe-me explicar
o que esse gráfico significa. O que isso significa é que, por exemplo, vamos começar
da direita. Essa barra aqui, essa primeira barra,
significa que temos cerca 24.005 avaliações e classificações de estrelas Veja, por exemplo, temos
uma classificação de 5,0 estrelas. Portanto, temos cerca 24.005 avaliações por estrelas em todo
o quadro E no total, temos
45.000 linhas no total. Então, na próxima barra aqui, essas são 4,5 estrelas, como aquela ali. E temos cerca de, digamos, 7.000 desses Então, temos quatro classificações por estrelas, cerca de 9.000, talvez
3,5 estrelas aqui Esta é uma classificação de três estrelas. É cerca de 2000. Então, temos 2,5 avaliações de estrelas. Este aqui tem
duas classificações por estrelas. Classificação de 1,5 estrelas. Esse é o número mais baixo
entre todas as avaliações. Assim, as pessoas não deixam
muitas avaliações de 1,5 estrelas. E também temos essa classificação
de uma estrela aqui. Não é o gráfico de graves. Pessoalmente, não gosto disso, mas é uma maneira rápida de você saber como seus dados
são distribuídos. Você sabe que, ok, temos dados de 1 a 5 e cinco é o
valor que mais ocorre em seus dados E isso é sobre essa palestra. Isso para que você possa ter uma
visão geral do seu quadro de dados. Na próxima aula,
vamos ampliar nosso quadro de dados para realmente poder selecionar linhas específicas ou
partes específicas de nosso quadro de dados para ver valores individuais Então, em outras palavras,
vamos usar o
Python para navegar
pelos nossos dados, selecionar seções específicas
dos dados e exibi-las Então, nos vemos
no próximo vídeo.
133. Selecionando dados com Python: Oi, bem vindo de volta. Neste vídeo, vamos
ampliar os dados em nosso quadro de dados selecionando colunas
específicas do quadro de dados, linhas
específicas, várias colunas,
várias linhas, prateleiras específicas no quadro de dados Vamos
aprender como aplicar
condições para que você possa extrair dados com base em diferentes
filtragens e assim por diante Então, vamos começar. Eu
vou abrir Júpiter E eu vou para a análise
da revisão. Pasta e clique no arquivo do
Jupiter Notebook. Agora, algo que você deve saber
é que se eu estiver em uma nova célula aqui e tentar acessar
a variável de dados, obteremos
esse erro de nome. Os dados não são definidos porque quando você acaba de abrir
um caderno Jupiter, as células não são executadas
automaticamente Portanto, essa
ainda não é uma variável no namespace dessa sessão
interativa do Python Portanto, você deve
executar as células indo até a primeira célula
e pressionando Shift Enter e, em
seguida, Shift Enter para executar
a outra célula Shift Enter, Shift Enter, ou você
pode acessar esse botão. Para executar todas as células. Então pressione isso,
reinicie e execute todas as células. E então você terá acesso à
variável Delta dessa forma. Certo, então eu só queria
ter certeza de que você sabe que está ciente
desse comportamento específico de Júpiter Agora, eu quero colocar alguns
títulos aqui, algum texto. Por exemplo, quero
colocar o título dessa primeira seção que
fizemos no vídeo anterior. Eu quero dar um nome a isso. Então, eu quero adicionar uma
célula acima dessa célula. Portanto, o que eu faço é, primeiro, ter certeza de que
não estou em determinado modo, então pressiono escape para isso. Em seguida, pressiono A no teclado e a nova célula
será adicionada. Então eu pressiono sem
entrar na célula. Portanto, sem entrar,
certifique-se de pressionar escape. Sem entrar na
célula, pressionamos M, e isso converterá a
célula em uma célula de marcação, que significa que a célula agora
não espera código Python Ele espera texto Markdown, que é basicamente
algum tipo de linguagem Por exemplo, se escrevermos
dois desses símbolos de hash e tivermos uma
visão geral do quadro de dados E então pressionamos Command Enter, que
será convertido em um título, em um cabeçalho. Basicamente, H para o título. Se você adicionar mais uma, obterá fontes
menores e assim por diante. Então, dois estão bem. E então eu vou adicionar aqui, então converta isso em
markdown com escape
e, em seguida, aqui mesmo, selecionando dados
do quadro de dados E então B para inserir
a nova célula de código, então essa é uma célula de código
que é uma célula de marcação Então, deixe-me mostrar como você pode selecionar uma coluna
do quadro de dados. Fuja. Selecione uma coluna. Controle Enter. B, Enter
para selecionar uma coluna, você pode usar essa
sintaxe e depois executar E isso é uma coluna.
Agora, você pode perguntar: por que precisamos
selecionar uma coluna? Qual é o interesse por trás disso? Bem, a resposta é que
esse é o primeiro passo para fazer
uma análise mais aprofundada. Por exemplo, se você quiser
extrair a média, a média da coluna de
avaliação, primeiro
precisaríamos extrair
a coluna e depois
aplicar essa média A média do método é executada e isso lhe dará a classificação média de todos os cursos em todo
o quadro de dados Então, a classificação de todas
as 45.000 linhas. Então esse é um exemplo de por que
precisaríamos selecionar uma coluna. Mas deixe-me deletar a média agora. Então é assim que se
seleciona uma coluna. Agora, escape B, entre. Selecione várias colunas. Execute, B, Enter. Para selecionar várias colunas, você usaria mais ou
menos a mesma sintaxe Mas, em vez de inserir
uma única coluna aqui, como fizemos com a classificação de strings, nesse caso, inseriríamos
uma lista de várias colunas Digamos que queremos o nome do curso. Então, uma string, uma
vírgula fora da string, outra string, classificação
e, em seguida, execute E isso fornecerá basicamente um quadro de dados contendo
apenas essas duas colunas. Agora, há uma diferença
fundamental entre essa saída e aquela. Você também pode ver que isso é formatado de forma diferente
com linhas, então parece uma tabela porque
na verdade é um quadro de dados Então, se você aplicar o
tipo, dessa expressão. Então isso é expressão. Nós usamos. Se você executar isso,
verá que esse é um quadro de dados do quadro de dados. Mas se virmos o tipo
dessa outra expressão, você verá
que isso é uma série. Então, uma série é outro tipo de dados de
pandas, assim como nós temos No quadro de dados, temos séries, e as séries são usadas para representar colunas únicas
como esta aqui. Portanto, apenas a coluna de classificação. Mas quando temos
mais de uma coluna, Pandas usa um
quadro de dados como esse Então, essa foi apenas uma
informação a ter em mente. Isso não muda muito na forma como você faz as
estatísticas posteriormente, mas é bom
saber como o Pandas funciona Vamos ver como selecionar ARO. Com linhas, é um pouco diferente. Obviamente, primeiro você
precisa se referir
à variável de dados
e depois ao I lock. E então você precisa de
colchetes. Dentro desses colchetes, você deve colocar o índice
da linha que deseja acessar Por exemplo, digamos que queremos essa linha aqui ou vamos nos
referir melhor a ela. Então, o Python mega Curse
com uma classificação de cinco, que tem um índice Vamos ver se
vamos conseguir essa linha. Executa. Então, sim, parece que é o mega curso de Python e teve uma classificação de cinco A data e hora está aqui,
então 333. Vamos ver todo o quadro de dados. Então 333, aquele aqui. Essa linha é essa. O tipo desse objeto
é novamente uma série. Portanto, o Pandas usa séries também
para linhas, para linhas únicas. Deixe-me deletar esse tipo e executar novamente. Essa
é a saída. Próximo. Selecionando várias rosas. B Insira os dados. Novamente, iloc é o que usamos. E desta vez, como estamos
trabalhando com várias linhas, queremos inserir uma fatia Digamos que queremos do
Índice um para o índice três, essas linhas, e desta
vez obtemos esse quadro de dados, não tão sério. Então, obtivemos a linha com Índice um e a
linha com o Índice dois porque o índice superior não
está incluído na fatia, como quase
sempre acontece com o Python Então, vezes 512, timestamp, 511. 512, cinco, 11. Índice um, índice dois. Sim. Então é assim que
você obtém várias linhas. Próximo. Selecionar uma seção. O que quero dizer com isso é
basicamente uma seção transversal. Portanto, colunas e linhas
específicas nos fornecerão basicamente uma fatia do quadro
de dados Por exemplo, queremos
selecionar colunas específicas. Novamente, usamos a mesma
sintaxe que usamos anteriormente. Então você vê aqui em cima quando
selecionamos várias colunas, então a classificação do nome do curso
dentro de uma lista. Classificação do Renomeado do Curso. Então, isso nos
dará basicamente isso. E então, a partir desse quadro de dados, o que fazemos é aplicar Alok porque esse é um objeto de quadro de
dados, certo? Isso também era um objeto
de quadro de dados. E como podemos aplicar
Alok a esse quadro de dados, também
podemos aplicar Ioc
a esse quadro de dados É o mesmo tipo de objeto. Então, a
partir disso,
vamos, por exemplo, da linha com índice um
até a linha com índice três, sem três, e obtemos essa
seção do quadro de dados, que é, novamente, um
quadro de dados, tipo de objeto. Portanto, apenas o nome do curso e as colunas de
avaliação e
somente essas duas linhas. E, por fim, selecionar uma célula. Seguimos a mesma
sintaxe, a mesma lógica. Então, digamos que queremos
selecionar essa célula aqui. Então, a célula que é
a seção transversal da linha com o Índice dois e
a coluna de carimbo de data/hora,
aquela lá dentro, carimbo de
data/hora, Índice dois, O que fazemos é primeiro extrair a coluna usando a mesma sintaxe que
usamos para selecionar uma coluna, que é essa aqui, Delta Carimbo de data/hora dos dados de avaliação desta vez. Então, basicamente, isso nos
dá uma coluna, mas a partir disso, podemos aplicar
bloqueio para uma série também. Portanto, esta é uma série,
não um quadro de dados, mas a série também pode usar essa propriedade de log e, em seguida, obter
o índice dois dela, e isso nos dá o valor, que é uma string de tipo. Então, se você quisesse uma classificação em vez disso, obteria uma flutuação porque as
classificações são flutuantes, 4,0, aquela que E é assim que você consegue um celular. Agora, esse método é
muito consistente
porque usa a mesma
sintaxe dos outros métodos Portanto, é consistente com os outros métodos de seleção de dados, mas há uma maneira mais rápida de fazer a mesma coisa usando
dados, a propriedade at. E primeiro você passa o
índice da linha e depois só o nome da
coluna, classificação, por exemplo. E isso deve
lhe dar o mesmo valor. Portanto, é
recomendável usá-lo ao
selecionar uma célula. Então, isso é sobre essa palestra. Na próxima aula,
vamos nos aprofundar na seleção de dados, mas
usando condições Por exemplo, me dê todas as avaliações maiores que quatro. Então, filtrando com base
nas condições do próximo vídeo. Veja.
134. Filtrando o conjunto de dados: Oi, bem vindo de volta. Neste vídeo, você aprenderá a
filtrar dados do
seu quadro de dados. Com isso, quero dizer extrair grupos
específicos de dados com base em diferentes
tipos de condições Por exemplo, digamos que,
em nosso quadro de dados, temos cursos diferentes, embora aqui você veja apenas os megacurs do Python porque
estamos vendo apenas as cinco primeiras linhas Temos outros cursos
com classificações. Portanto, se você quisesse, por exemplo, saber a classificação
média somente de um determinado curso
, precisaria filtrar os dados aplicando
algumas condições. Portanto, a filtragem permite que
você faça análises em um grupo específico de seus dados Vamos fazer isso. Primeiro, vou atribuir um número a cada um
dos títulos principais Então essa foi uma visão geral. A segunda palestra foi
seletiva, então esse é o número dois. Desta vez, vamos para o número três, filtrando dados com base
nas condições Certo. Vamos aplicar
uma condição primeiro. Então, vou criar
uma célula de marcação e dizer uma condição. Vamos aplicar uma condição
que nos daria o quadro de dados em que as
classificações são maiores que quatro. Para fazer isso, você teria que
seguir essa sintaxe. Agora, primeiro,
certifique-se de ter sua
variável de dados no espaço de nomes
executando essa primeira célula Controle Enter para
executar essa célula. Agora temos certeza de que os dados
estão no namespace. Esses são os colchetes
dos dados de
sintaxe e aqui está a condição, então dissemos que
queremos o quadro de dados em que a classificação seja maior que quatro Portanto, dizemos que a
classificação da coluna é maior. Vamos deixar algum espaço,
maior que quatro. Se executarmos isso,
obteremos um quadro de dados e todas essas linhas terão uma
classificação de 4,5 ou mais, não quatro porque é maior, não é maior ou igual. Se for maior ou igual, também
obteremos as
quatro classificações, 4,0. Mas esse não é o caso aqui, então é isso que obtemos. Você vê, por exemplo, que
as linhas com o Índice 012 não foram incluídas no quadro de dados
no quadro de dados de saída, e você pode ver o
tamanho disso usando
uma função de comprimento do Python Temos 29.758 linhas uma classificação
maior
que quatro Outra forma, se
você não quiser
usar a função nativa do Python, outra maneira é usar count Então esse é o objeto do quadro de
dados, e os objetos do quadro de dados
têm um método de contagem. E você obtém essa saída, que basicamente
diz que temos essa quantidade de valores
no nome do curso, essa quantidade de
valores no timestamp, essa quantidade em
avaliações e comentários Como os comentários têm
esses valores não existentes,
que são basicamente um
valor inexistente, eles não existem Portanto, temos 4.927 avaliações com comentários em que as pessoas realmente escreveram algo Então, o resto, esse
menos que nos dá uma série de comentários sem valor Obviamente, você pode
aplicar diferentes tipos de estatísticas a isso agora. Por exemplo, isso é
um quadro de dados certo. Como extraímos
somente a coluna? Como selecionamos somente
a classificação da coluna? Bem, você pode dar uma
olhada aqui, selecionando uma coluna. Então, é assim que você seleciona
uma classificação de dados da coluna. Agora, esse é o quadro de dados. Portanto, você aplica a classificação e obtém as classificações com
um valor de 4,5 ou mais. Então, para entender isso, o que fazemos é, digamos que D dois é o quadro de dados que
obtemos com base nessa condição. Portanto, é um quadro de dados.
Esse quadro de dados tem uma coluna de classificação. Então é isso que obtemos. É a mesma coisa
que fizemos aqui, classificação de
dados, D para classificação. Espero que esteja claro. Isso também permite que você aplique
funções como média. Você obtém a média das
avaliações maiores que quatro. Vou deixar como estava e
, em
seguida, haverá várias condições. Digamos que queremos filtrar o quadro de dados em que a classificação
é maior que quatro e o nome do curso é igual
ao curso completo de Python criado por dez aplicativos OP profissionais Certo. Então, esse curso aqui. Deixe-me copiar a string para
não cometer erros de digitação. É assim que você faz
essa filtragem, filtragem dupla.
Você começa com isso. E então, em vez de colocar uma condição como fizemos aqui, colocaríamos duas
condições que
seriam separadas entre parênteses Então, a primeira condição lá e a segunda condição lá dentro. Então, como primeira condição, colocaríamos a mesma coisa. Portanto, essa classificação delta
é maior que quatro. Então você vê que a
condição está dentro dos parênteses. Essa é
a primeira condição. A segunda condição
é quando a Delta, dissemos que o nome do curso é
igual a dois,
a string, o curso completo de Python, coluna criou dez aplicativos OP
profissionais
, executa e
obtemos o quadro de dados com
base nessa Então, como esse é um
quadro de dados, esse quadro de dados, podemos extrair a classificação disso e, em seguida, obter a média
da coluna de classificação, e isso
nos dará esse número. Portanto, a classificação média
das classificações acima de
quatro para esse curso. E esse é o quadro de
dados do filtro novamente. E isso é sobre essa palestra. Na próxima palestra, examinaremos
a filtragem de dados com base nos horários Então, como você pode
extrair partes do seu quadro de dados para
um determinado período. Então você vê que temos essa coluna de
carimbo de data/hora aqui, que varia
de Vamos ver como você faz
isso no próximo vídeo.
135. Filtragem baseada em tempo: Oi, bem vindo de volta.
No vídeo anterior, fizemos algumas filtragens
com base nas condições Então aplicamos uma condição aqui e várias
condições aqui, duas, para ser exato. Mas podemos aplicar mais de
dois usando a mesma sintaxe. Tudo bem, então aqui
aplicamos a condição
comparando números. Então, trabalhamos com tipos de números, classificando a coluna
de classificação com tipos de dados
numéricos e a coluna de nome do curso,
onde dissemos que queremos apenas os registros em o nome do curso seja
igual a essa string. Então, essas colunas de nomes, os tipos de dados de string. Então, tipos de dados de string, tipos
de dados numéricos. Mas como podemos comparar? Como filtramos os dados
com base nos tempos dos dados? Não é tão simples, mas também não é difícil Então, vamos fazer isso. Vamos
adicionar uma nova seção principal. Então, digamos que essa filtragem baseada no
tempo. Certo. Então, vamos extrair
as avaliações deixadas durante o
segundo semestre de 2020. Vamos tentar aplicar a
mesma sintaxe que está lá. Então, começamos com o
quadro de dados e colchetes. Agora, desta vez, precisamos de
duas condições. Por quê? Bem, porque na
primeira condição, diríamos Delta. O carimbo de data/hora é
maior do que primeiro de julho de 2020, e o outro é o carimbo de data/hora
Delta É menos de 31 de dezembro. Portanto, maior que primeiro de
julho significa segundo de julho, terceiro de julho, quarto
de julho e assim por diante. Então, queremos esses dados
para esse período. Mas também queremos a
outra condição de que os dados não sejam maiores
que 31 de dezembro É por isso que usamos
menos de 31 de dezembro, que seria 30 de dezembro,
29 de dezembro e assim por diante Mas como escrevemos 1 de julho aqui? Bem, para isso, precisamos de
um objeto de data e hora. Não podemos simplesmente escrever uma string, escrever como se os primeiros sete, 20, 20 Python não fosse tão É uma linguagem de programação. Bem, é possível que
os desenvolvedores do Python escrevam algo para ler
esse tipo de string, mas seria propenso a erros Você sabe, alguém
escreve de forma diferente, alguém escreve assim. E assim por diante, você
quer ser explícito para evitar erros indesejados E, por meios explícitos, precisamos
usar um tipo de
objeto de data e hora adequado Então, vou importar do
dia, importar data e hora. Então, importamos esse objeto
diurno da biblioteca diurna Não se esqueça de executar essa
célula e ir até aqui e usar aquele objeto de data e hora que acabamos
de importar da biblioteca diurna, que seria 2027, significa
julho e primeiro de julho Então, isso nos daria 1º de julho
no tipo de dados adequado. Podemos fazer o mesmo
para esta data, 2020, que seria 12 para
31 de dezembro Certo. Agora, acho que é mais significativo dizer
maior ou igual do que aquele primeiro de julho
e também menor ou igual. Então você teve a ideia de incluir essas datas também
no período. Agora vamos executar isso.
E recebemos um erro. Vamos até aqui para lê-lo. É um erro de tipo, o que significa que o
tipo errado foi usado de alguma forma. Mas vamos ler mais para
entender o que é. Portanto, essa operação, esse operador de
comparação, não é suportada entre instâncias de string e datet nessa data e hora Portanto, parece
que esse operador foi aplicado entre uma string
e um dia naquele dia Certo? Então, qual é a
corda aqui? O primeiro. Portanto, o timestamp de dados é uma
coluna que contém cadeias de caracteres. Portanto, o timestamp contém sequências de caracteres. Tudo isso são cordas. Mesmo que pareçam
encontros, não são encontros. Então, a ideia aqui é que o Python não pode
comparar datas e horas, então essa data e hora
com essas strings Portanto, precisamos instruir o
Python a tratá-los como datas e horários como objetos diurnos que o Python possa
comparar dois objetos diurnos
, o que é mais
significativo do que comparar , o que é mais
significativo do que mais
significativo do Para criar Python,
leia-os como horários
diurnos, precisamos ir até o
topo do nosso script E quando lemos o
quadro de dados usando o método CSV, precisamos adicionar outro argumento, que é a data de análise Por meio desse argumento, dizemos ao Python por meio de
colchetes quais colunas devem ser
tratadas como Então, carimbo de data/hora, analise datas iguais ao carimbo de data/hora entre colchetes Não se esqueça de executar aquela
célula e depois ir até aqui, executar isso de novo, a célula. Recebemos outro erro desta vez, novamente, um erro de tipo. Diz uma comparação inválida
entre isso e aquilo. Então, desta vez, você vê
que isso é para aquilo. Portanto, esta é uma data e hora UTC. E esse dia é aquele. Então, o Python está
tentando comparar esses dois, que apesar de serem objetos diurnos,
ambos
são objetos diurnos, o
Python ainda não
consegue compará-los
porque um deles, que é esse aqui, é um objeto diurno ingênuo,
o
que significa
que o objeto diurno não conhece seu sistema de tempo que apesar de serem objetos diurnos,
ambos
são objetos diurnos, o
Python ainda não
consegue compará-los
porque um deles, que é esse aqui, é um objeto diurno ingênuo,
o
que significa
que o objeto diurno não conhece seu sistema de tempo. Portanto, o Python, por segurança, diz
que: Ok, não
sei o que fazer com esses horários de dois dias
porque não posso
compará-los, pois não sei em
que sistema de horário eles são Então, mesmo pareçam que isso é
menor do que
isso, isso pode ser
na verdade maior do que o outro, porque esse
poderia ser outro sistema de tempo, devemos torná-lo maior. Para entender a importância da clareza na programação, imagine uma torre de
controle de tráfego aéreo Eles têm esse aplicativo
que recebe sinais de dois aviões chegando
ao mesmo tempo passando
por essa torre Um avião está vindo dos EUA, um avião está vindo
da Indonésia. O aplicativo precisa processar o tempo enviado por
esses dois aviões. E nesse sinal,
além da hora, o aplicativo também precisa conhecer o sistema de tempo de cada uma
dessas duas datas e horários. Caso contrário, se esses
dois vales
dissessem apenas 6:00 da manhã na América
e 7:00 na Indonésia, o programa pensaria que
há uma
diferença de 1 hora. programa pensaria que
há uma
diferença Então, isso pode atrapalhar uma
cadeia de outros processos, e isso pode ser perigoso Então, explícito é melhor. Resumindo, para ser explícito, precisamos declarar um
sistema de tempo para essa data e hora, assim como este tem
um sistema de tempo, e
você pode ver Vamos adicionar outra célula aqui, e você diz dados,
hora, carimbo, execução,
você obtém a série Mas também aqui embaixo,
você vê a data e hora 64, é UTC, UTC Então, vamos declarar a
data e hora também como UTC. Faça isso usando TZ
info, esse argumento, que obtém um valor de
um tipo de objeto, um tipo de objeto UTC, que precisa ser importado É um objeto específico do sistema de
tempo. Então vá até as importações e
digamos que a partir de PY TZ Import, UTC, não se esqueça de
executar aquela célula, vá até aqui e faça o mesmo
com o outro horário de dados Então, outro argumento Ts, essa
informação é igual a UTC, execute. E desta vez, finalmente, obtivemos o quadro de dados filtrado Você vê as datas aqui. 20 de 2012, 30 de dezembro. E também aqui embaixo
vemos 1º de julho. Com uma classificação bastante baixa, infelizmente. De qualquer forma, é assim que você pode filtrar dados com base em registros de data e hora Obrigado por seguir.
Falarei com você mais tarde.
136. Transformando dados em informações: Olá,
bem-vindo a este novo vídeo, que será um pouco
diferente dos outros. Nos vídeos anteriores,
mostrei algumas técnicas para filtrar dados
de um quadro de dados. E isso era basicamente acessar colunas, linhas
e células e também aplicar condições
ao acessar essas colunas, linhas ou
células de um quadro de dados. No entanto, o que
fizemos até agora foi apenas extrair
dados dos dados Isso ainda não é
análise de dados porque o objetivo da análise de dados é transformar
dados em informações. É disso que trata a
análise de dados, mas isso ainda
não é informação. Por exemplo, digamos que
queremos classificações acima de quatro e temos esse quadro de dados, mas ainda é um quadro de dados. Não é amigável para humanos. Não é informação. informação seria se,
em vez disso, obtivéssemos a média das avaliações acima de quatro. Então, acabaríamos com
um único número. Isso é informação porque
é legível por humanos. Isso nos diz alguma coisa, ou talvez pudéssemos criar
um gráfico em que pudéssemos ver
as avaliações ao longo do tempo. Vemos o gráfico,
podemos ver uma tendência e podemos aprender algumas
informações desse gráfico. Transformar dados em informações é o que faremos a seguir
e, neste vídeo em particular, responderemos a
uma série de perguntas. Em outras palavras, vamos
extrair algumas informações, como
obter a classificação média,
a classificação média de um
determinado curso e assim por diante. Agora, você deve ser
capaz de realmente escrever o código antes de mim
porque você já sabe, por exemplo, como
extrair a coluna de classificação. E também dei algumas
dicas de que você poderia usar um método médio para obter a classificação
média dessa coluna Então, vamos começar com
as primeiras informações. A classificação média de todos os
cursos em todos os horários. Essa seria a média de classificação de dados. E essa é a classificação média. Então, assim como fizemos aqui ao selecionar uma coluna, classificação
Delta. Isso é o que fazemos aqui também. Então isso nos dá uma coluna
e isso nos dá uma classificação. Certo, a seguir, classificação média
de um determinado curso. Desta vez, temos que aplicar
uma condição em que o nome do curso
delta seja igual. Portanto, o operador de atribuição dupla é igual a um dos cursos Digamos que o megacurso de Python tenha criado dez aplicativos
do mundo real. Agora, se você perder uma única
letra na string, não obterá
o resultado esperado. Digamos que você escreveu A
pequeno em vez de A maiúsculo
e obteve um quadro de dados vazio Se eu mudar o A minúsculo
para maiúsculo, obteremos o quadro de dados
filtrado
e, a partir disso, queremos
a coluna de Então, essas são as classificações dos
mega Cs do Python, e a média é a média dos megacurs do Python,
a classificação média,
que é um pouco maior do que a classificação que é um pouco maior do que média de todos
os cursos Certo, classificação média
de um determinado período. Data, eu só vou
copiar isso e passar aqui. Então, temos essa primeira condição,
essa segunda condição. Então, estamos falando
sobre esse período. Você pode alterar isso por
outro período, digamos, todo
o ano de 2020, de primeiro de janeiro a
31 de dezembro Agora você pode dividir essa
expressão e ainda obter a mesma entrada de saída pressionando Enter
após o operador t. E você ainda obtém o quadro de
dados do filtro , obtemos
as classificações e, a partir
disso, obtemos a média. Essa é a média para 2020. Em seguida, classificação média de um determinado período para
um determinado curso. Vou copiar isso
pressionando CC e clicando
aqui e pressionando V. E
depois dessa condição,
então um parêntese, dois parênteses aqui eu vou
adicionar E pressione Enter,
pressione Enter novamente. E aqui eu vou
adicionar a outra condição, que é essa aqui. O curso é igual a
essa string específica, o mega Core do Python Executar. Temos uma
incompatibilidade de parênteses Você vê que esse
colchete está destacado em vermelho. Isso significa que devemos removê-lo. Execute novamente, e
isso é classificação. Para o
megacurso de Python de 2020. É assim que você obtém
informações dos seus dados. Vamos continuar com a média
de avaliações não comentadas. Então, avaliações sem comentários. Você sabe disso,
deixe-me colocar a cabeça
do quadro de dados aqui apenas por conveniência. Então você sabe que temos
uma coluna de comentários aqui, que pode ser NaN, que significa anotar um número, então é um valor nulo ou
pode ser uma string, algo que um aluno escreveu como avaliação de um
determinado curso Queremos obter a média
das classificações que não
têm comandos. Então, para fazer isso, você diz que
os dados, a condição, comentário
dos dados, são nulos Na verdade, esse é um método e nos fornece um quadro de dados
filtrado com apenas as linhas que têm o valor
do comentário como NaN O oposto
disso não é nulo. Em seguida, você obtém as
linhas com comentários. O que queremos é nulo desta
vez e, a partir disso,
queremos a
coluna de classificação e a média Essa é a média. O
oposto disso seria, obviamente, não nulo E vemos que a classificação
média das avaliações com comentários é maior do que a média das avaliações
sem um comentário, o que eu acho normal. Pessoas que gostam do
curso talvez também tendam a escrever algo para expressar sua gratidão ou eu não sei, mas isso está
nos dizendo algo Certo, número de avaliações
não comentadas. Bem, é fácil, basta copiar isso, colar uma lágrima e, em vez
de maldizer, você diz contar. E essa é a contagem.
O oposto disso não
seria nulo Então, avaliações com contagem de comentários. E isso mais isso, tenho certeza, dá 45.000, que é um
número total de linhas de avaliações Portanto, avaliações sem comentários
avaliações com comentários. Em seguida, o número de comentários
contendo determinadas palavras. No quadro de dados
do comentário, digamos alguns alunos falem sobre o
sotaque do instrutor Qual é a média dessas
avaliações que contêm sotaque? As pessoas estão
reclamando do sotaque e quantas pessoas estão
reclamando do
sotaque do Vamos obter essa informação. Novamente, a condição
é que o comentário Delta, a sequência desse comentário,
contenha a palavra acento. O que obtemos é um erro. O problema é
que o Python não pode
mascarar com uma matriz não booleana
contendo Portanto, o Python não pode pesquisar
esses valores nulos no comentário, não pode pesquisar uma string
nesses tipos de dados Então, queremos dizer ao Python por meio do
argumento NA definido como fold Nesse caso, o Python
ignorará esses novos valores e só
procurará acento nos comentários com uma
string com um E esse é um quadro de dados
filtrado. Então, todos esses comentários estão na verdade, mencionando
a palavra sotaque Quantos deles? Essas
são apenas as classificações. A contagem das avaliações é 77. Então, 77 do
total de 45.000, é claro, a média
seria simplesmente isso, mas alterando essa contagem para média E é uma classificação baixa
, como eu esperava. Portanto, como os cursos são
ministrados por estudantes de
diferentes países, alguns deles podem achar desagradável o sotaque do
instrutor Então, talvez eles estejam deixando um comentário negativo e uma avaliação negativa
ao longo do comentário. E isso conclui nossa palestra aqui. Obrigado por seguir. Nos próximos vídeos, faremos alguns enredos, o
que é muito
divertido, na minha opinião, e é uma
maneira bonita de representar
informações ao público para o usuário Obrigado, e eu vou
falar com você mais tarde.
137. Agregando e plotando as avaliações médias por dia: Oi. Neste vídeo, mostrarei
como criar um gráfico de avaliações médias diárias. Portanto, nosso gráfico mostrará a classificação
média de cada dia. Para fazer isso, não
vou trabalhar no arquivo anterior
de Júpiter porque gosto de
manter as coisas separadas Então, para a parte de visualização, vou criar
um novo caderno Eu sugiro que você faça o mesmo. Então, primeiro de tudo, precisamos
carregar o quadro de dados. Então, vou
copiar aquela célula do caderno anterior e copiá-la lá e imprimir rapidamente o cabeçalho
dos dados apenas para verificar se
tudo está certo. Sim, então esses são o
Delta, o Delta bruto. Em seguida, pressione Escape e pressione B no teclado para
criar uma nova célula. Pressione
Enter para entrar na nova célula e vamos criar esse gráfico. Mas antes de criarmos o gráfico, precisamos fazer algum tipo
de agregação de dados Certo, estamos transformando
dados em informações, mas nossos dados são bastante brutos. Você vê que, por um dia, temos várias avaliações
deixadas por estudantes diferentes. Por exemplo, no segundo
de abril, temos essa classificação,
temos isso e aquilo, e isso, e assim por diante Queremos agregar esses números em
uma classificação média Como fazemos isso? Nós fazemos isso. Podemos fazer isso usando
o método Pandas group B, que produz um novo quadro de dados Então, será
um novo quadro de dados, mas com dados agregados Então, alguns novos dados que são médias do quadro de dados bruto Deixe-me mostrar
como o grupo B funciona. Então eu disse que o grupo B
produz um novo quadro de dados. Portanto, vou
criar uma nova variável na
qual o novo quadro
de dados será armazenado. Então, a média diária é
minha nova variável, e isso seria igual aos dados. Então, esse grupo de quadros de dados B.
Eu realmente gosto desse método. É muito intuitivo. Então você está agrupando
esses dados. Por. Por que queremos agrupar? Bem, por data e hora. Vamos ver o que isso nos dá. Então, vou
imprimir a média aqui, o cabeçalho da execução média e vamos ver o que temos. Temos basicamente o
mesmo quadro de dados. Isso ocorre porque o
grupo não conseguiu agrupar os dados por data e hora, porque a forma como o grupo funciona
é que o grupo B tenta encontrar valores idênticos
nessa coluna Nesse caso, o
timestamp não tem valores
idênticos porque
cada valor é único, você pode ver, é o mesmo dia, mas essa avaliação foi
deixada no momento A outra avaliação foi deixada neste
momento e assim por diante. Portanto, cada valor é diferente. Portanto, antes de
aplicarmos o grupo B, precisamos fazer algum
processamento aqui. Precisamos adicionar uma nova coluna
no quadro de dados. Vou nomear essa
coluna D com
D maiúsculo . Estou apenas tentando ser consistente com
os nomes das colunas. Como estão com letras
maiúsculas, começam com maiúsculas depois. Eu vou criar essa nova
coluna com uma letra maiúscula mais tarde. Portanto, o dia dos dados é igual
ao timestamp dos dados. Esse DT DT é uma
propriedade que nos dá acesso a vários atributos de data e
hora, como data, desculpe, data, você pode fazer mês. E assim por diante. Por enquanto,
precisamos da data. Deixe-me comentar isso, então vou
selecioná-los e pressionar a controle ou a barra de comando
para comentá-los. E eu vou
te mostrar o novo quadro de dados. Então esse é o quadro de dados. Então, o que acabei fazer foi extrair desse timestamp, extraí Portanto, o que eu
obtive é que, para cada registro de data e hora, recebi a Então, para esse timestamp, é segundo de abril, segundo de abril e assim por diante Dessa forma, obtivemos
alguns dados idênticos. Você sabe, se você quiser o mês, você receberá o número
do mês. Então, quatro, quatro, quatro e assim um. Mas precisamos de um encontro, então
vou manter o encontro lá. Agora podemos tornar
isso incomum e vamos excluir o calor de pontos de
dados porque
não precisamos mais dele. E agora podemos tentar esse grupo por método
novamente, mas tenha cuidado. Desta vez, precisamos de um dia aqui. Como dissemos, queremos nos
agrupar por dia. Vamos executar e
ver o que obtemos. Talvez não seja o resultado
que esperávamos. Então você vê que esse dia ainda não está agregado porque precisamos
dar outro comando aqui Precisamos dizer aos Pandas o
método de agregação. Então, você quer agregar com base na
média ou na contagem Nesse caso, é a média. Então, diríamos dot mean, o método, execute, e desta
vez, isso é o que temos. Então isso é só a cabeça. Mas se você imprimir
o quadro de dados inteiro, verá que continua assim
até essa data. Portanto, para cada linha, temos um dia, primeiro de janeiro,
segundo de janeiro, terceiro de janeiro e assim por diante. Então essa é a classificação média de todos os cursos daquele dia. Agora, você precisa
entender esse produto. Isso é, como eu disse, é um tipo de quadro de dados. Então, o dataframe do Panda,
mas isso tem uma coluna. Então isso não é uma coluna. O dia não é uma coluna. O dia é na verdade o índice. Você vê que, se você disser a média
diária dessas colunas, classificação é a única coluna. E se você quiser acessar a
classificação, você gosta disso. Avalie e você terá esta série. Agora, o que é isso?
Esse é o índice. Portanto, se você quiser
acessar a coluna do dia, não faça assim
porque essa é uma sintaxe
para acessar as colunas Quando você quiser acessar
essa coluna especial, ou
seja, aquela coluna de índice, você quer dizer índice de pontos. E então obtemos essa série
que é índice de tipo. Mas você pode facilmente
convertê-lo em uma lista. Por exemplo, se você
gosta de traçá-los. Assim como os índices de colunas, como este,
também são tipos semelhantes a listas Então, matrizes de dados. Vamos agora fazer a trama. Para fazer a plotagem,
precisaremos da biblioteca MT plot leap Então, vou
inseri-lo aqui. Portanto, importe MT plot lib PyPlot. Precisamos desse módulo
da biblioteca, e uma boa prática
é usar o SPLT. Então você verá na web
que todo mundo usa PLT. Então, se você quiser ser consistente
com outros programadores, você deve importar isso como PLT Isso também facilita seu
trabalho porque você não precisa digitar isso, mas pode simplesmente dizer PLT, como faremos aqui Então, o gráfico de pontos PLT é o método, e esse método basicamente
obtém dois argumentos, o X e o Y. Então, estamos construindo um gráfico
com um eixo X e um Y. Ao longo do eixo X, teremos os dias. Isso significa que queremos o índice
médio de pontos. Então, essa matriz está aí. E ao longo de Y, queremos a coluna de avaliação
média. Executar. Recebi um erro, PLT não está definido porque
esqueci de executar
essa célula para que
a importação fosse válida Agora eu posso executar isso de novo, e isso é um produto. Ao longo do eixo Y,
temos as datas, que eu sei que
são um pouco invisíveis, mas vamos corrigir isso Ao longo do eixo Y,
temos a coluna de avaliações. Você vê que começa de 3,8 em algum lugar aqui até cinco Agora, o matplot leap seleciona esse intervalo automaticamente
observando Nossa coluna de classificação, se
você der uma olhada nela, você diz a classificação média. Se você extrair o máximo, o valor máximo,
verá que é 5,0. E se você ver o mínimo, verá que está em torno de 3,8 Um dia, os alunos deixaram uma
classificação média de 5,0, então todos eles. Outro dia, eles deixaram 3,8. Então, matplot lip está colocando
esses dois como limites
do eixo Y em vez de iniciar o eixo
de zero a cinco, que tornaria o
gráfico menos legível Então, isso é uma
coisa boa do MT plot lip. O ruim é que,
como você pode ver, esse gráfico não é interativo, então é apenas um arquivo de imagem. Você não pode ter
recursos de pop-up para poder ver alguns valores se
passar o mouse em algum lugar. Então matplot lip não pode fazer isso. No entanto, podemos melhorar isso
um pouco declarando um objeto de figura e ele um
argumento de tamanho fixo de, digamos, 253 Essa é a largura e essa é a
altura do gráfico. Agora você pode ver que temos um eixo X mais longo e
um eixo Y mais curto. Agora, se você não
concorda com esse gráfico, se acha que ele ainda não
é legível, ele não diz
muito sobre a tendência Portanto, se a classificação tem
aumentado com o tempo ou não
, o que poderíamos fazer é reduzir a amostra dos dados Então, em vez de extrair médias
diárias, poderíamos extrair
médias semanais e, portanto, teríamos menos pontos ao longo do eixo X e uma Então, na minha opinião, esses dados
são demais. É ilegível, não
é útil. Vamos reduzi-las com um gráfico melhor
no próximo vídeo Então, isso é o que você
aprendeu neste vídeo. Você aprende a agrupar dados e a
representá-los graficamente. Agora, deixe-me fazer uma
pequena revisão
do grupo por método, caso
você ainda esteja confuso. Então, deixe-me remover isso em outra célula aqui
e
imprimir a cabeça do quadro de dados
agregado Então você vê que temos classificação
e índice diário aqui. O que aconteceu com o nome do curso? Com essa coluna? O que aconteceu
com a coluna de comentários? O que aconteceu com
a coluna de carimbo de data/hora? Bem, eles desapareceram
porque esse método médio só funciona com colunas que têm valores numéricos
, como classificação. Não consigo calcular uma
média dessa coluna, comentário ou
nome do curso ou carimbo de data/hora Portanto, colunas como hora
comuns
e nomes de cursos serão automaticamente
eliminadas por esse método, e somente essas
colunas serão mantidas Da mesma forma, você pode fazer
uma contagem em vez disso. Nesse caso, você obteria
um quadro de dados diferente. Então você vê que temos
a contagem dos nomes dos cursos, o que significa que 46 linhas
foram criadas para essa data. Em outras palavras, 46 avaliações. Portanto, temos 46 avaliações, como você
quiser chamá-las. Temos sete aqui porque o que o Pandas faz é
não levar em conta valores não relacionados este e
aquele, e assim por diante Portanto, poderíamos
ter esse gráfico de contagem. Então, mostramos quantas
avaliações tivemos por dia. E é isso que eu
queria ensinar a vocês neste vídeo. Muito obrigado.
Falarei com você mais tarde.
138. Downsampling e classificação média por semana: Eu vou voltar.
No vídeo anterior, desenvolvemos um gráfico mostrando as médias
diárias das avaliações, mas também o
número diário de avaliações Neste vídeo, queremos
reconstruir esse gráfico, mas
semanalmente Vamos fazer isso. Então, vamos
organizar um pouco esse quadro de dados. Vou clicar aqui,
pressionar A, Enter, pressionar M, Enter e dar a esta seção uma média de classificação do título por contagem de
dias, já que fizemos as médias
e as contagens Execute aquela célula. Agora
precisamos de uma nova célula aqui, média de classificação
B por semana. Novamente, verifique se você tem
acesso à variável de dados. Então esse é meu quadro de dados. Caso contrário, você
precisará executar essa célula primeiro e depois executar
as próximas operações. Então, a primeira coisa que queremos
fazer é copiar essa linha. E o que queremos mudar a
partir disso é
que, primeiro, precisamos criar uma nova coluna no quadro de
dados. Então, vamos chamá-lo de fraco. E extraímos do
timestamp do ponto T. Deveria ser fraco?
Vamos experimentar isso. Ou simplesmente imprima o
quadro de dados inteiro. Tudo bem. Recebemos um aviso. Vamos ignorar isso por um tempo. E recebemos a coluna da semana. Então, vemos que esta é a 13ª semana. Essa é a primeira semana. Vamos ver. Na verdade, qual é
o máximo dessa coluna. Então é 53. Qual é o mínimo? É um, eu acho. Hmm. Isso significa que
temos apenas 53 semanas. Então, o que
o Pandas está fazendo é agregar as
semanas de diferentes anos, que significa que está agregando as
classificações de, digamos, a primeira semana de 2019
com as classificações
da primeira semana de 2019 e as classificações da
primeira semana de Então, todas essas três semanas serão
agregadas em uma, e essa será
a primeira semana Em seguida, temos a segunda semana para
a segunda semana de 2019, 2019 e 2020, e assim por diante. No total, tivemos 53 semanas porque é
quantas semanas por ano tem. Bem, normalmente tem 52
semanas, até onde eu sei, mas talvez um desses anos
seja provavelmente um ano bissexto, tem 53 semanas, eu suponho De qualquer forma, você entendeu. Não é disso que precisamos. Vamos tentar o que o aviso está
sugerindo: DT so calendar. Naquela semana. Hm. Parece que
o máximo novamente é 53. Ainda assim, estamos obtendo semanas
agregadas. Portanto, a solução
aqui é usar SDR f time, o que significa string from time E isso tem como argumento alguns códigos de data e hora,
como porcentagem Y, talvez um traço ou isso ou um
espaço que depende de você Isso é opcional. Mas esse é o código que você
precisa usar se quiser
extrair o ano. E então extraímos
o número da semana. Vamos ver o que temos dessa vez. Agora estamos conversando. Então, desta vez, temos o
ano e a semana. Portanto, podemos distinguir
entre linhas diferentes. Portanto, a semana 13 de 2021 está
agora com esse nome. Não são apenas 13. Portanto, teremos, novamente, 20 2013, 2019, 13 e assim por diante. Portanto, temos
nomes exclusivos há semanas. E foi isso que nos ajudou a
construir esse formato de data e hora Você pode usar outros códigos. Então, se você quisesse um mês, usaria um menor. E então obteríamos
o número do mês, abril aqui e a semana,
o número da semana. Como eu disse, isso é opcional. Então, em vez do traço, você pode usar um espaço e obter o espaço entre
o mês e a semana Onde você pode encontrar esses códigos? Bem, você pode simplesmente pesquisar no Google os códigos de formato de data e hora do
Python e você verá uma lista, uma grande lista do que você pode Então, vamos usar aqui o traço e o número da
semana. Então, o que vem a seguir? Bem, o próximo passo é agrupar os dados. Então, digamos que uma
média fraca de um novo quadro de dados igual ao grupo de pontos de dados por semana. Então, essa coluna. E queremos extrair
a média disso. Vamos ver o que obtemos. Então
parece estar funcionando. Você vê? Bem, ok, Python está considerando
a primeira semana, zero, zero, mas isso
não importa Eu acho que está tudo bem. E então temos a média
de cada semana. Novamente, não se esqueça disso. A coluna da semana é,
na verdade, o índice. Então essa é a primeira semana, a
segunda semana e assim por diante. E a classificação é a coluna. Então, vamos fazer a trama agora. Gráfico de pontos PLT. Então, temos que dar um X e um Y. O X desta vez
será um índice médio de pontos fraco,
então a coluna da semana e a classificação de
dados serão executadas Eu recebi esse erro. X e Y devem
ter a mesma primeira dimensão, mas ter formas dessa e daquela. Portanto, parece que estou usando colunas de
diferentes quadros de dados. Portanto, este é um quadro de dados
médio semanal, que tem 173 linhas, e este é o outro
quadro de dados que tem 45.000 Então eu queria dizer dia,
desculpe, média semanal. Espere, e esse é o gráfico. Novamente, se você quiser
aplicar algum tamanho, copie e cole aqui Isso basicamente modifica o objeto
da figura. E esse é o gráfico. Então, classificação média por semana. Agora, você vê que os rótulos aqui estão misturados uns com os outros E existem maneiras de corrigir isso. Mas eu diria que não vale
a pena fazer isso aqui com Matt Plot Lee, porque se você realmente quiser mostrar
seus dados para as pessoas, use uma biblioteca de plotagem mais
moderna, como gráficos altos, que
usaremos nos próximos vídeos Os gráficos altos mostrarão agora um gráfico
mais inteligente, que é fácil de usar
e proporciona ótima experiência ao usuário
e tenta mostrar as informações de
uma forma mais eficiente. Então, direi que essa
representação é suficiente para o propósito
de usar o Matplot leap
no notebook Jupiter Então, estamos apenas explorando dados. Podemos ver agora que vemos uma tendência de que as classificações estão
aumentando com o tempo. Então, talvez isso não fosse muito
visível no gráfico diário. Então você vê esse gráfico aqui. Isso tem as contagens atualmente, mas podemos mudar isso para
significar executar a célula novamente, depois executar as células de
plotagem novamente, e podemos ver as médias
diárias aqui,
as médias semanais aqui as médias semanais Então, acredito que você concorda
comigo que é mais fácil ver a tendência neste
gráfico do que neste gráfico. E esse é o poder de
reduzir a resolução dos dados. No próximo vídeo,
reduziremos ainda mais a amostragem
dos dados e mostraremos as avaliações
médias por mês Nos vemos no próximo vídeo.
139. Downsampling e classificação média de classificações por mês: Oi. Neste vídeo, mostrarei como
criar um gráfico mostrando a classificação
média por mês. Esta será
uma palestra muito curta porque já
sabemos como fazer isso Tudo o que precisamos fazer é
copiar essa célula dessa forma ou você também pode copiar
pressionando Escape e depois CC. Pressione a tecla C duas vezes. Então aqui, basta
ir lá e dizer V, e isso colará
a célula para que você não precise copiar todos
os códigos desse jeito. Mas em vez de
copiar os códigos, você pode copiar a célula inteira. E então precisamos
fazer algumas mudanças aqui, mês aqui, data e hora, em vez de U, temos M. Em vez de
semana, temos Em vez de uma semana
aqui, temos um mês. Isso é bom. Então, aqui atualizamos a média variável
do mês. Execução média mensal, e
essa é a média mensal. Então eu acho que está melhorando. Você vê que vemos a
diferença mais claramente agora. E isso também ocorre porque
você vê que o intervalo
mudou no gráfico pois temos mais dados
agregados, então agora temos médias mensais Isso significa que
não há uma grande amplitude, uma grande diferença entre o valor mais alto,
então você vê que
o valor mais alto
agora está
em algum lugar em 4,6 e o valor mais baixo, que está
em algum lugar em 4,3 ou 4,35 Isso tornará as alturas e picos mais aparentes para o usuário Certo, e isso é
sobre esse vídeo. No próximo vídeo,
vamos fazer algo
mais diferente. Vamos tentar criar várias linhas em
um único gráfico, e cada linha
representará a média mensal das
avaliações de cada curso. Até agora, tínhamos apenas cursos
agregados. Então, vamos falar com você
no próximo vídeo.
140. Média das avaliações por curso por mês: Oi, bem vindo de volta. Neste vídeo, vamos gerar um gráfico contendo linhas
diferentes, e cada linha
representará a classificação média por mês
para um determinado curso. Portanto, temos vários cursos. Teremos uma linha para cada curso. Vamos fazer isso. Vamos colocar um título de três anos. Essa seria a
classificação média por mês por curso. Certo. É assim que fazemos isso. Em primeiro lugar,
precisamos de uma coluna de mês no quadro de dados. Agora, eu sei que
fizemos isso aqui. Já temos
a coluna do mês, mas eu quero manter
o código separado, que não faça mal se você fizer
isso novamente aqui apenas
para manter a consistência. Então, para dizer que essa célula está
fazendo aquela coisa em particular, ela está construindo um gráfico
de várias linhas, e para esse gráfico,
precisamos dessa expressão. Então, é a mesma expressão. Eu posso simplesmente copiar isso
e colar aqui. Certo, não precisamos
alterar nada lá, então só precisamos extrair
o mês e vamos verificar. Portanto, temos o
mês para cada linha. Como estamos agrupando por mês, faz sentido ter isso Em seguida, precisamos usar o
método group by para criar
um novo quadro de dados, que seria uma agregação. Agora, só para
compararmos para comparar. Vamos ver como é o quadro de dados
médio do mês
anterior . Então, novamente, isso é o que tínhamos. Esse quadro de dados não contém as informações
sobre os cursos. Portanto, faltam as informações do nome do
curso. Você vê aqui que
temos esta coluna. Precisamos ter essa dimensão alguma forma em nosso novo quadro de dados
agregados Então, o que precisamos fazer aqui
é algo diferente. Novamente, precisamos
criar uma nova variável. Vamos chamar isso de CRS
médio mensal, talvez, é claro,
para distinguir entre
esse quadro de dados e CRS médio mensal médio
desse
mês Novamente, isso será um produto por produto desse quadro de dados, usando um método de agrupamento por. Mas neste caso,
deixe-me deletar isso para que você possa ver o outro código aqui
para ver a diferença. Nesse caso, teremos não apenas o mês aqui na lista
de colunas a serem usadas para
o processo de agregação, mas também teremos, você
consegue adivinhar qual nome do curso? Então, mês a mês, é
disso que precisamos. Vamos aplicar agora a média e
ver o que obtivemos até agora. Então, isso é um quadro de dados. E, basicamente, este tem na verdade dois níveis de índices. Tem o mês e
o nome do curso. Você pode ver isso se
fizer esse índice. Então você vê que é um índice múltiplo. Você vê a coluna do mês e também
o nome do curso que não aparece aqui, mas está lá e,
como
você viu, você pode vê-lo aqui. Você vê que eles estão em negrito. Esses valores, isso
significa que eles são índices. E isso aqui é uma coluna. Portanto, as colunas são
apenas de classificação, apenas uma coluna. Agora, isso ainda não é muito
útil porque a forma como isso
é construído é que temos uma linha aqui. Então, isso é um grupo de
linhas. Começa aqui. Então, o primeiro curso, o segundo curso, o
terceiro, quarto, quinto. E também há alguns
outros cursos aqui, que na verdade podemos vê-los
aplicando aqui uma fatia Então, vamos ver os
primeiros 20 registros. Agora vemos os primeiros
20 registros na íntegra, primeiro dia
completo de desculpas, primeiro mês de 2018, segundo mês de 2018 e assim por diante. Esse curso tem essa
classificação para aquele mês. Esse curso tem a classificação
média daquele mês e de todos
os outros cursos. Então, o mesmo padrão, como este aqui, é repetido
várias vezes por todos os meses. Agora, para ter esses dados
em uma estrutura melhor, o que
faríamos é aplicar aqui método
unstack para
basicamente desempilhar esse quadro de dados e acabar
com Agora temos uma espécie
de tabela dinâmica,
por assim dizer, temos
o mês aqui,
primeiro mês, segundo mês, terceiro
mês, e cada coluna agora
representa um curso, então se você quiser saber, por exemplo,
a classificação
do curso completo de
Python criou dez aplicativos OOP profissionais
para um determinado mês, digamos que este não é nenhum porque e cada coluna agora
representa
um curso, então se você quiser saber, por exemplo,
a classificação
do curso completo de
Python criou
dez aplicativos OOP profissionais
para um determinado mês,
digamos que este não é nenhum porque
o curso não foi publicado
ainda nessa data. Mas se você olhar para o final, digamos -20, verá que, a partir do
primeiro mês de 2020, temos uma classificação
para esse curso, uma classificação média, certo? E assim por diante, o que podemos fazer esse quadro de dados agora?
Bem, podemos planejar isso. Mas desta vez,
vamos usar uma abordagem diferente
porque não podemos usar esse gráfico de pontos pois temos várias,
várias colunas Então, isso espera um X e um Y, mas qual é o X? O X, claro, é mês.
Somos claros sobre isso. Mas qual é o Y? É isso ou aquilo ou aquilo? Portanto, temos várias colunas. Uma maneira seria
escrever essa função de gráfico
várias vezes, ou talvez criar um loop que itere pelo
quadro de dados, mas outra
maneira mais fácil é apenas apontar
para o gráfico de pontos médio de CRs
e Villa, que temos Claro, parece uma bagunça, mas vamos melhorar um pouco Como usamos a função plot diretamente do quadro de dados, não do PLT
, podemos usar argumentos de
tamanho de figo aqui Então, digamos 253. E agora parece um pouco melhor. Ainda não é o ideal, talvez
pudéssemos aumentar isso para oito. Ok. Agora está funcionando. Então, temos uma legenda que mostra a cor de
cada um dos cursos. Novamente, não sou fã
desse tipo de gráfico, mas quando usarmos a biblioteca
High Charts com a interface da web, isso
ficará muito melhor. Agora, e se usarmos a contagem aqui? Obteríamos o
gráfico corretamente, mas a legenda
seria um pouco confusa. Isso porque,
no quadro de dados
CRS médio do mês, temos não apenas as
contagens das classificações, mas também outras contagens
de registros de data e hora e
coisas de que não precisamos Você vê que, por
exemplo, neste curso, 100 exercícios de Python, um
tem o timestamp Você vê que é outro
nível de colunas. Então, tudo isso pertence
ao timestamp, certo? As contagens do timestamp. E então temos as
contagens de classificação, começando daqui
e até algum lugar. Não vemos todas as colunas porque Júpiter as está
truncando, mas você entendeu, dia Então, como extraímos
apenas a classificação? Bem, isso é fácil, na verdade. Eu te disse que o grupo B, que começa aqui
e termina aqui, grupo B retorna um quadro de dados. Agora, desse quadro de dados, extraímos apenas a classificação. E problema resolvido. Agora temos um gráfico claro
mostrando o número de avaliações restantes para
cada mês do ano. Então, do
início de 2019 até 2020, você vê essa linha rosa aqui, que é o novo curso,
o curso completo de Python Começa em algum lugar em 2021. Então, no primeiro mês de 2021. E, claro, você pode, novamente, obter a média,
exatamente como fez anteriormente. Mas com a média,
obtemos novamente os mesmos resultados, pois
o método médio ignora data/hora e
aquelas colunas
não De qualquer forma, isso os derruba. Mas a contagem não os derruba. Ele os conta e nos
fornece muitos dados. Certo, espero que tenha ficado claro, e falarei com você mais tarde. Te vejo.
141. Qual dia da semana as pessoas são mais felizes: Em que dia da semana
as pessoas são mais felizes? Podemos responder a essa
pergunta usando Python e os dados
que temos em mãos agora? Bem, acho que sim,
podemos fazer isso, e essa é a beleza da análise
de dados. Se você for um pouco criativo, poderá responder
perguntas muito interessantes sobre seus dados. Então, neste vídeo,
vamos descobrir juntos que dia da semana as
pessoas são mais felizes?
Como fazemos isso? Bem, gerando um gráfico. Então, como podemos fazer isso? Bem, na minha opinião,
podemos usar a lógica de que se a classificação
média de todos os cursos,
digamos, às quartas-feiras, for a mais alta da semana, podemos ver que
as pessoas que talvez
naquele dia às quartas-feiras
sejam mais positivas Tenho certeza de que podemos dizer
isso porque
temos muitos dados aqui. Então, milhares de avaliações, e estatisticamente, acho que nos
dão muita
confiança no resultado O que precisamos fazer é criar um gráfico, que terá sete
dias no eixo horizontal, de segunda a domingo, e
no eixo vertical, teremos a
média de cada dia. Isso significa que precisamos
fazer muita agregação de dados. Vamos fazer isso. Em que dia
as pessoas são mais felizes? Agora, vamos usar, como
sempre, o quadro de dados. Então, onde temos essas classificações deixadas em
determinados timestamps Então, o que precisamos extrair? Bem, o dia da semana.
Vamos chamá-lo assim. O que é igual a
Data, timestamp. Então, a partir do timestamp, acessamos a propriedade DT
e, a partir disso,
precisamos do SDR FT. E
o dia da semana. Portanto, se você quiser domingo, segunda
ou terça, esse nome do dia
da semana pode ser extraído usando o código de formato A. Você pode pesquisar isso no Google. Eu também faço isso. É impossível
lembrar de tudo. Agora podemos imprimir os dados novamente e vemos que
temos um dia útil Coluna. Então, sexta, sexta e sexta-feira estão se repetindo
repetidamente, e precisamos
agregar agora para obter a média de cada dia
da Então, digamos que a
média dos dias da semana para o quadro de dados que conterá
os dados agregados Novamente, o grupo B é nosso salvador. Mamãe. O que usamos dessa
vez? Bem, dia da semana. E então quero dizer. E vamos ver a média dos dias da semana o que recebemos E é isso. Então tudo que
temos que fazer é,
deixe-me deletar isso. Tudo o que precisamos fazer
é traçar um gráfico de pontos. O eixo X seria
a semana, o índice médio de pontos, e o eixo Y seria a semana, a média,
dia da semana, desculpe, classificação. Enredo, essa é a resposta. Eu sei que o pedido não é o que
você esperava,
mas podemos consertar isso. De qualquer forma, podemos
dizer que sexta-feira é bem
diferente dos outros dias. Então, às sextas-feiras, as pessoas deixam uma avaliação média de
4.455 em
uma escala de um a E isso faz sentido. Acho que também
estou nessa faixa, então costumo ser
mais feliz às sextas-feiras Então, o final da semana
e estão chegando, então faz sentido. Agora, como podemos solicitar esses dados? Portanto, precisamos ordenar a coluna
do dia da semana. Bem, nós podemos fazer isso. Deixe-me comentar isso por um tempo. Média do dia da
semana igual à média do dia da semana, classifique os valores por dia da semana e depois imprima para ver
qual é a média do dia da semana. E você verá que esse não é o pedido que
esperaríamos. Isso está acontecendo, é claro, porque a coluna de índice, essa aqui, tem valores de string. Então, sexta, segunda-feira, um
dia são só cordas. Portanto, o Python os está ordenando em ordem
alfabética Então, sexta-feira, primeira,
segunda-feira e assim por diante, elas são strings
porque esse método produz uma string, coluna de
dia da semana Você vê uma corda de vez em quando. Então, timestamp era hora, mas nós o convertemos em string Agora, pode haver
soluções alternativas diferentes para corrigir isso. O que me vem à
mente é que poderíamos adicionar um número de dias da semana. Ou simplesmente o número. Para o quadro de dados de dados, e a partir disso, novamente, você usa string de
vez em quando, mas desta vez, vamos usar a porcentagem minúscula W. E
o que isso nos daria é, deixe-me mostrar que os dados agora esse quadro de dados e
tem esse número de dia Portanto, agora temos um
número anexado a cada linha, além do
nome do dia da semana Isso nos permite agora classificar os valores pela coluna do número desse
dia. Segunda-feira é a
primeira, sexta-feira é a quinta e assim por diante. Vamos fazer isso. Vou deletar
esse quadro de dados delta de lá, a impressão,
incomum, e mudar
isso para o número do dia E aqui, média dos dias da semana, exclua, incomum isso, execute Temos esse número
do dia do erro chave. Oh, porque eu esqueci de
adicionar o número do dia aqui. Novamente, temos um erro. Vamos ver onde o
erro ocorreu. Então, esses são os erros
profundos nas bibliotecas, que você vê no gráfico MT Lip e isso mostra o
erro em nosso código. Portanto, está neste gráfico de pontos plt de
linhas. E diz que o valor deve ser um incesto de strings ou
bytes, não uma tupla Então, vamos tentar solucionar
o erro aqui. Vou descomentar
isso e ver qual é a média dos dias da semana Então, o problema aqui
é que, na
média dos dias da semana , esse índice
retorna um índice duplo, que se parece com isso,
então é um índice múltiplo Ele contém o número do dia
e do dia da semana. Portanto, o
método de plotagem ficará confuso, então ele não sabe qual
dessas matrizes deve ser
plotada ao longo do eixo X. Então, precisamos de uma maneira de
extrair apenas as colunas. Então, os nomes dos dias da semana. Você pode fazer isso usando
os valores de nível get. Esse é um método que
espera uma discussão. Nesse caso, podemos
inserir zero ou um. Zero significa que estamos extraindo, estamos acessando a primeira
coluna do índice múltiplo e uma seria
a segunda Então, precisamos da primeira coluna. E isso nos dá esses dias, então os nomes dos dias. Portanto, agora
podemos fazer uso disso aqui para que possamos
copiar essa expressão. Essa é a matriz que queremos
traçar ao longo do eixo X. Então, colocamos isso aqui. Execute,
e esta é a saída. Se quisermos ampliar
a imagem, precisamos fazer com que o
tamanho da figura seja igual a uma lista de 253, funciona bem, ou talvez um pouco Menor. Sim, isso é melhor. Portanto, você precisa encontrar uma boa proporção entre a
largura e a altura. E, novamente, vemos que sexta-feira é o dia com a classificação média
mais alta. E isso foi
sobre esse vídeo. Muito obrigado por
seguir. Falarei com você nos próximos vídeos. Te vejo.
142. Outros tipos de demarcações +: Oi. Neste vídeo, vou dar algumas informações
importantes sobre diferentes tipos de gráficos. Criamos vários
enredos nos vídeos anteriores, e todos eles tinham
algo em comum Eles eram todos gráficos de linha. Então, como vamos usar
diferentes tipos de gráficos? Bem, esses gráficos de linha são
gerados pelo método de plotagem. Mas se você usar o
método de veado para explorar o PLT, então o PLT, você pode ver que você também
pode inserir informações Você vê que também pode
usar outros tipos de gráficos. Nem todos são gráficos. Algumas delas são propriedades que você atribui ao gráfico
que está produzindo, mas você verá, por exemplo, gráfico está em algum lugar aqui. Então esse foi o enredo,
e você pode ver, por exemplo, que
temos uma barra, aquela. Se você mudar isso para barra, obteremos essas barras
dentro da linha. Mas essa não é
uma representação muito boa para esse tipo de gráfico porque as diferenças são muito
estreitas entre as classificações. Então, eu escolheria o enredo. Alguns desses tipos de gráficos,
por exemplo, Pi não são apropriados
para esse tipo de dados Então, se você tentar esse Pi, receberá um erro. Porque se você usa ajuda, digamos
que ajude PLT Pi. Então, em um gráfico circular,
você verá que Pi espera
um X, mas não um Y. Então, como poderíamos usar
um gráfico circular com nossos dados Bem, talvez, então deixe-me
criar uma nova entrada aqui. Talvez pudéssemos fazer um gráfico
circular, digamos, do
número de avaliações por curso,
o que faria sentido. Então isso é o que poderíamos fazer. Digamos que compartilhar
o novo quadro de dados seja igual aos dados do grupo B. Queremos agrupar por nome do curso, por curso e, em seguida, aplicar a contagem. E isso nos daria
esse novo quadro de dados. Então, estamos interessados
na coluna de classificação. Vemos quantas avaliações cada curso
recebeu no total. Agora, se não quisermos
todos esses outros dados, estamos interessados
apenas na coluna de classificação. Então, entre a contagem dos grupos
B e D, fazemos a classificação, então
extraímos a coluna de classificação. Então isso
nos mostraria que isso é sério. Então, podemos usar isso.
Deixe-me criar uma nova célula com PLT dot pi Então dissemos que Pi
recebe um X como argumento. Então essa seria
a série de compartilhamentos. Portanto, o X é pelo menos uma série, uma coluna de quadro de dados. Portanto, qualquer tipo de matriz é executado. E sim, esta é a carta Pi. Mas não tem rótulos, então vamos dar alguns rótulos. Foi assim? A discussão. Rótulos? Sim. Atualmente,
ele está definido como nenhum, então o valor padrão é nenhum. Então, se você quiser dar rótulos, você diria, compartilhe o índice de pontos. Índice é a coluna com
os nomes de cada linha. Executar. E sim, desta vez, recebemos esses rótulos para
cada fatia da torta Então você vê que o
megacurso de Python, por exemplo, tem o maior número de avaliações Depois vem o Python para
iniciantes com exemplos, a fatia marrom nela e assim por diante, outros
cursos Agora, também obtemos aqui vários
metadados que esse
método produz. Mas, como venho dizendo, matplot leap não é a biblioteca de plotagem
mais amigável, então é boa para exploração de
dados, mas não é muito boa para
apresentações para outros espectadores, leitores e
outros usuários
que desejam o
matplot leap não é a biblioteca de plotagem
mais amigável,
então é boa para exploração de
dados,
mas não é muito boa para
apresentações para outros espectadores, leitores e
outros usuários
que desejam ver suas visualizações. Agora, isso encerra este vídeo. E como eu disse antes, vamos fazer
todos esses gráficos, cada um
deles que você viu,
incluindo este, deixe-me
alterá-lo de volta para o gráfico Vamos
reproduzir esses gráficos, mas desta vez usando uma biblioteca mais
moderna baseada na web que plota os dados em um navegador e você
pode criar um aplicativo da web muita facilidade para
fornecer aos
usuários a URL do seu aplicativo da web para o
seu site e eles possam explorar esses gráficos A boa notícia é que não
faremos mais
nenhuma agregação usando
agrupar por nossos dados prontos Vamos apenas
copiá-los e depois usar
a função
de plotagem da nova biblioteca de gráficos
altos que usaremos nos
próximos Então, muito obrigado por
acompanhar esta série. Falarei com você
na próxima. Te vejo.
143. Aplicativo 4 (Parte 2): análise e visualização de dados com gráficos interativos no navegador: Bem-vindo a uma nova
série de vídeos. Nesses vídeos,
aprenderemos como criar
gráficos interativos com Python Deixe-me mostrar os
gráficos exóticos que
vamos criar ao
longo desses vídeos. Esse será o primeiro gráfico. Você vê que eles são interativos. Por exemplo, quando passamos
o mouse sobre o gráfico, obtemos esses pop-ups observando o valor exato no ponto em que o
cursor está apontado Essa será a
classificação média por dia. Então, temos a
classificação média por semana mês por curso,
para vários cursos. Então temos esse gráfico interessante. É um gráfico de fluxo. Novamente, essa é a média de
avaliações por mês por curso, mas mostrada em um gráfico diferente. Depois, temos quando
as pessoas são mais felizes. Por fim, temos
esse gráfico circular,
que, novamente, é interativo E é muito
mais bonito do que os outros gráficos que
construímos com o Matt Plot lip. Então, esses gráficos são
construídos com gráficos altos. Agora, High Charts é uma biblioteca de plotagem de
JavaScript, mas podemos usar gráficos altos
em Python por meio E Just Pi é uma
estrutura web para Python. É muito novo, então é provável que você não
tenha ouvido falar sobre isso. Portanto, o Juspi é um
framework web como o FAS, mas o Juspi tem uma vantagem muito
importante A vantagem do Juspi
é que você não precisa escrever nenhum HTML,
JavaScript ou CSS Você pode criar aplicativos completos, sites
completos com aparência moderna apenas com o Jus Pi Então você vai atirar em
2 pedras com um pássaro. Quero dizer, um pássaro com 2 pedras
ou dois pássaros com 1 pedra. Você entendeu a ideia. Então,
você aprenderá Jpi e também
gráficos altos. Isso é o que eu quis dizer. E aqui está o plano.
No próximo vídeo, mostrarei como criar um site Pi de uma página, que contém apenas um título
e um parágrafo com texto. Então, uma página da web simples. Em seguida, no vídeo seguinte, expandiremos
esse site
adicionando um
gráfico alto à página da web Em outras palavras,
nos próximos dois vídeos, você aprenderá como criar um aplicativo web Just
By e também
como adicionar
gráficos altos ao Justpy WebApp como adicionar
gráficos altos ao Justpy Então, nos vídeos
após esses dois vídeos, aprenderemos como
criar outros gráficos. Então, aqueles que eu mostrei
aqui e quais são
os gráficos que construímos e que
criamos em Júpiter
com Mat Plot Lip Então, vamos criar
cada um deles. Então prepare-se, e eu falarei com
você no próximo vídeo.
144. Criando um aplicativo web simples: Olá. Neste vídeo, você
aprenderá como criar um aplicativo web simples com a estrutura web
Just Spy. Vou usar o
código do Visual Studio para escrever o aplicativo web. Então Júpiter não funcionaria aqui. Então, sugiro que você
use um IDE como Visual Studio Code ou qualquer IDE ou editor de texto
que você esteja usando. Então, eu comecei o Visual
Studio Code aqui. Eu vou para File Open. No código do Visual Studio e
, em seguida, vá para a pasta em que
minhas análises esse arquivo CSV está
localizado e pressione em abrir, e isso criará um
novo código do Visual Studio, diretório
do projeto, apontando para
a pasta onde está o arquivo CSV de
revisão Não precisamos revisar esse CSV por enquanto,
porque neste vídeo, vamos apenas
criar o aplicativo web Então, vamos criar um arquivo Python. Vou chamá-lo de
zero simple app dot PY. Então, vou criar
vários aplicativos da web e estou usando o 01234 Nos nomes desses arquivos. Para usar o Juspy, precisamos
ter o Justpy instalado. Então, eu estou usando o 3.9 Python 3.9 agora , e vou para o terminal New Terminal e aqui vou
usar o PIP 3.9
, já que estou
usando o Python 3.9 usando o Python Tudo bem Isso foi um sucesso. Então, eu não tenho erros. Recebi esta mensagem de que ele já
estava instalado. De qualquer forma, espero que você também tenha
tido sucesso com
a instalação. Então, o que precisamos
fazer é apenas importar. Pi. Uma boa prática
é importá-lo como JP porque você examinará a
documentação do Just Pi e todos os exemplos
estão usando esse nome JP. Portanto, é uma boa ideia ser consistente com
a documentação. Agora, todo aplicativo By terá um objeto principal
conhecido como página Quasar Então essa é a
página da web, basicamente. E essa página da web pode
conter elementos diferentes. Portanto, pode conter, por
exemplo, na primeira página, um título ou um parágrafo
ou talvez uma tabela. Portanto, todos esses elementos
serão adicionados à Quasar na página da web Por que é chamado de Quasar? Bem, porque o Jus Pi usa
a estrutura Quasar, que é basicamente uma estrutura que não está relacionada ao É uma estrutura construída
com JavaScript, mas o Jus Pi está usando essa estrutura e podemos usar essa estrutura por meio do Python Então, deixe-me criar uma página do Quasar. O que fazemos primeiro é
criar uma função de aplicativo. Você pode nomeá-lo
onde quiser, mas basicamente a ideia é que esse aplicativo retorne
a página do Quasar Então, dentro da função, criamos uma variável que
é igual à página do quasar Jp Então Q, P. Essa é uma classe que
estamos instanciando aqui Então, estamos criando uma instância de
objeto de instância de página de
quasar ,
essa função deve
retornar essa instância essa função deve de página de
quasar E no meio é onde
escrevemos os elementos que esta
página conterá. Então, vamos criar uma variável
para cada elemento. Vamos criar um cabeçalho. Portanto, um título é basicamente texto, mas com um tamanho de fonte muito grande. E fazemos JP, então apontamos para esse
ponto QD, então QDV É basicamente uma divisão se
você estiver familiarizado com HTML. É uma divisão, mas
é uma divisão Quasar. Portanto, ele tem um
estilo da Quasar que o torna moderno e também permite que
você o estilize
com muita facilidade, como você verá daqui
a pouco Como primeiro argumento, devemos passar onde ele pertence. Claro, essa variável pertence
ao WP,
que eu chamei de WP
para significar página da web, página da web Isso pertence a isso.
Então, outros argumentos que o QD obtém é o texto Que texto queremos
exibir lá? Como uma sequência, digamos, análise das avaliações do curso. Vamos também adicionar um parágrafo. Vamos chamar isso de P um é
igual a p dot QDV novamente. Sempre usamos QDV e A, ele pertence novamente ao WP.
O texto desta vez. Então, vamos escrever como uma
descrição da página da web, esses gráficos representam a revisão do
curso Análise da revisão do curso. Isso seria um aplicativo web muito
minimalista. Mas se estivermos nisso agora, nada vai acontecer
porque criamos a função, mas nenhuma instância está
chamando essa função, então não a estamos
chamando em lugar nenhum. Então, vamos fazer algo que
chamamos de função. Podemos usar o Pi do JP. Então Jus Pi é uma função
e espera, como entrada, uma função que
retorna uma página de quasar, que é essa Assim, você pode simplesmente
escrever um aplicativo sem chamar a função do aplicativo. Então Pi, essa função se
encarregará de chamar essa função. Certo. Se o executarmos agora, você deverá ver esta mensagem aqui informando que o Just By está pronto para acessar este endereço com
esse número de 8.000 portas Se você pressionar Control e clicar em
Command e, em seguida, clicar, isso deverá abrir seu navegador
padrão. E esse é o
aplicativo web, então está funcionando. Agora, você esperaria que isso estivesse em uma fonte maior. Isso não aconteceu
porque não
adicionamos nenhum estilo a
nenhuma dessas divs. Então, essas divisões
são apenas texto simples. Para adicionar estilo aos elementos, você pode adicionar um argumento classes
a qualquer elemento Q div, e isso é igual a uma string Então, como podemos tornar esse div grande? Bem, eu posso te mostrar, é claro, mas eu quero te mostrar como você
pode encontrar qualquer tipo de estilo que
você possa usar com o Pi Então, o que você precisa fazer é
pesquisar o estilo Quasar. E depois vá para o primeiro resultado. Subestilo e identidade,
você verá os atributos que podem ser
alterados para os elementos da página, como o elemento div
que temos em mãos Então, estamos
preocupados com a topografia. Se você clicar aqui, verá exemplos aqui. Então, se você quiser tornar
o texto tão grande, use o Texto H um. Então, vamos tentar isso.
Copie e edite aqui. Texto H one. Agora, algo que você
precisa saber se estiver usando o código do Visual
Studio é que, se você executar o código
com esse botão novamente, enquanto o código estiver em execução, nada acontecerá. Portanto, o programa simplesmente congelará e, se você voltar
ao host local, verá que o
aplicativo antigo ainda está em execução. Então, o que você
precisa fazer é ir aqui e pressionar Control C para interromper o processo atual e, em seguida, ir até esse botão
e executá-lo novamente. Então você verá que o aplicativo é atualizado e agora
temos esses telefones grandes. Então, vamos dar uma olhada novamente, Quasar sob
estilo e identidade Então, estávamos falando
sobre tipografia. Você também tem outros exemplos
aqui do que você pode mudar. Então, se você quiser adicionar
outra propriedade, digamos que você queira colocar esse
texto no centro, use o texto para escrever. Então você copia isso.
Acesse seu aplicativo, crie um espaço e coloque colar
a outra propriedade de estilo. Pare o código e execute novamente. Recarregue a página. E você vê que o
texto foi para a direita. Sim, então eu pretendia
colocá-lo no centro. Então, digamos que o centro do texto. Pare de correr novamente. Às vezes, recebemos esse pop-up informando
que
o aplicativo mudou, então podemos pressionar OK, e isso recarregará a página Então isso é o que eu esperava. Se você quiser um pouco de preenchimento, se quiser que esse
texto não fique tão próximo do
limite superior da página da web, talvez
queira examinar o Então, no espaçamento, você
verá
aqui embaixo que tem
todas essas opções Então, por exemplo, se você quiser que o preenchimento na parte superior
seja muito pequeno, use esse texto Se você quiser ter
um preenchimento de tudo, ou
seja, em todo o texto, você quer ter
algum espaço aqui, espaço entre o texto e
o limite superior e espaço entre esse texto e
o próximo elemento, que seria este aqui Em seguida, você deve ir para
talvez preencher toda a mídia, então você quer
copiá-la e adicioná-la lá Então, crie um espaço. Execute novamente, recarregue E você vê que agora tínhamos um pouco mais de espaço entre
isso e aquilo. A última alteração que
quero fazer é tornar o texto um pouco menor. Controle C, execute novamente, vá aqui, recarregue e
agora parece melhor É assim que você faz
apenas por webapps. Observe que a ordem em que você cria
esses elementos é importante. Então você vê que a análise, é
claro, as avaliações estão no topo. Do outro elemento aqui. Então, se você quiser continuar adicionando
elementos aqui embaixo, você deve respeitar a ordem. Então, você quer adicionar
mais elementos aqui e sempre não se esqueça de
que sempre
precisa conectar esse
elemento à página da web Agora, foi assim que se
criou uma página web simples. Mas os Q DFs não são o
único elemento que podemos usar. Também podemos usar o elemento de gráfico
alto, que é um gráfico que
podemos adicionar à nossa página de usuário. Vamos fazer isso no
próximo vídeo. Te vejo.
145. Criando um aplicativo web de visualização de dados: Olá, bem-vindo de volta.
No vídeo anterior, criamos um aplicativo com Just Pi. Este aplicativo continha
dois componentes, então eles são
chamados de componentes no Jus Pi Então, esse componente aqui, Q Div e outro componente Q Div, ambos
são adicionados ao componente principal,
que é
a página do Quasar Nesta palestra, adicionaremos um terceiro componente, que será um gráfico alto,
que ainda é
um componente do Just Pi Então, vamos fazer isso passo a passo. Vou criar um novo Pythople onde
escreverei esse novo aplicativo Então, vamos chamá-lo de dia
médio de avaliação. Portanto, a classificação média
por dia é PY. Vou copiar
esse código porque precisamos dele e espaçá-lo aqui. E agora só precisamos adicionar
o componente de gráficos altos. Então, vamos fazer as coisas
passo a passo. A primeira etapa que
queremos seguir é
encontrar o gráfico adequado de que
precisamos . Existe uma maneira muito
boa de fazer isso. Podemos acessar a
documentação dos gráficos superiores e ver os exemplos nos
exemplos de gráficos que eles mostram nessa página
e, em seguida, podemos
escolher um deles. Vamos fazer isso. Vamos escolher
o gráfico que precisamos. Acesse seu navegador e procure
documentos de gráficos altos no Google Você encontrará nesta página a documentação do High
Charts. Portanto, High Charts também é uma biblioteca JavaScript
para produzir gráficos. Assim como o Quasar, o
Quasar era Não está relacionado aos altos gráficos. E o Python está reunindo
essas duas bibliotecas, essas duas estruturas, o
que é muito bom para nós, programadores de
Python, usarmos essas
duas bibliotecas JavaScript modernas Então, aqui estamos na documentação de
gráficos altos e queremos ver os tipos de
gráficos e séries. E aqui você
verá que
temos diferentes tipos de gráficos. Então, no nosso caso,
acho que um gráfico estriado
seria apropriado Então, se você clicar no
gráfico Spline, verá
este exemplo aqui É sobre temperatura
por altitude. Tem esse eixo de temperatura na horizontal e esse eixo de
altitude Agora, cada gráfico
fornece o código, o código JavaScript que
produz esse gráfico específico, e você pode ver que
pode acessá-lo partir do JSFiddle ou da caneta de código, que são basicamente dois editores de código
on-line Se você clicar em jsFiddle, ele abrirá o código
que produz esse gráfico E cada gráfico
tem seu próprio código. Então, se você for para o gráfico de fluxo, você vai para o JS v novamente, ele mostrará o
código desse gráfico de fluxo. De qualquer forma, vamos voltar. Então esse é o gráfico
que nos interessa, e aqui está o código que
produz esse gráfico. Portanto, você também pode ver uma
versão ao vivo do gráfico aqui. Se você mudar alguma coisa aqui, isso produzirá esse gráfico. Mas eu não estou dizendo que você
precisa aprender Javascript. Tudo o que precisamos fazer
é copiar
o código que começa após o
coma desse contêiner aqui. Então, isso significa que, a partir
desse suporte encaracolado, você precisa selecioná-lo E desça até ver essa semi coluna e
esse parêntese redondo, e você quer copiar
até esse Então, você quer incluir
esse colchete encaracolado. Então pressione Control C ou vá até lá e
copie e depois vá para Python E o que precisamos fazer é
criar uma string. Vamos criar uma variável. Digamos que a definição do gráfico
seja igual a uma string. Vou usar aspas triplas. Então, seis citações, e eu
vou dividi-las. Então, três citações aqui, três citações aqui. Aqui dentro, vou
colar todo esse código. Então, novamente, você tem que
ter muito cuidado aqui. Esse código começa com
esse colchete, depois vai para
gráfico
e assim por diante, e termina com
esse colchete. Agora, antes de explicar o
que estou fazendo aqui, deixe-me primeiro fazer com
que funcione rapidamente e depois volto
ao código e
explico o que está acontecendo aqui. Então, depois de ter a
definição do código, essa é uma delas, você quer ir
aqui e, digamos HC para gráficos altos,
JP, gráficos C. Então esse é o componente que
queremos usar. Um igual a WP, então o argumento dos
padrões. E agora, esse componente de
gráficos altos espera um argumento de opções, que é igual a essa variável, que contém o gráfico de
código JavaScript Def no meu caso É isso mesmo. Agora, se eu
executar esse código, você verá que o aplicativo está em execução, clique em
Comando ou Clique em Controle, e este é o aplicativo web
com o gráfico dentro. Então, essa foi a primeira etapa:
obter o código
da documentação de alto custo e colar o código dentro do seu programa
Python Agora, deixe-me explicar o
primeiro passo: o que acabamos de fazer. Então, como expliquei para você, High charts é uma biblioteca
JavaScript. Portanto, isso aqui
é um código JavaScript. Mas, nesse caso, isso é JSN. Portanto, o JavaScript usa
JSON e o formato JSON
é um formato familiar para Python Então parece um dicionário. Você pode ver que começa
com esse colchete, e então você tem essa chave então, mesmo que seja uma
string, agora, atualmente, é uma string Python, o que
acontece quando fazemos isso
aqui é que o Juspi a converterá converterá Então, um objeto real que o Python
pode ler e manipular. Então Juspi processará
esse dicionário e o renderizará como
um gráfico na página da web Posso provar que o Python leu com sucesso essa
string como um dicionário opções de pontos HC para
imprimir Então, opções, porque a
passamos aqui como argumento, isso se tornará um atributo do HC e podemos
acessá-lo assim. Então, lá vou imprimir o
dicionário, e aqui embaixo, vou imprimir também o
tipo dessa opção HC,
para que você possa ver de que tipo é, e o console C para interromper a execução
da instância atual do aplicativo novamente, e nada acontecerá
agora porque eu ainda não carrego nenhuma instância
da página Então, se eu for para a página
e depois voltar aqui, você verá que
algo foi impresso pois quando eu
carrego a página, essa função do aplicativo é executada
e, portanto, essas
duas linhas são executadas. Então, vamos ver. Esse é
o dicionário, certo? Começa aí, termina aqui. É o mesmo dicionário em que colamos aqui como uma string. Veja também que o tipo
não é exatamente um dicionário. É um
tipo diferente de dicionário que é como um dicionário
Python plus Ele nos permite acessar as teclas
do dicionário
usando uma notação de pontos Então, por exemplo, deixe-me
mostrar o que isso significa. Se você acessar as
Opções de hc dot e disser dot novamente, poderá acessar todas as
teclas deste dicionário. Por exemplo,
digamos que queremos mudar o título desse
título aqui, certo? Assim, podemos acessar essa chave de
título usando o título do ponto. E então esse título também tem
um dicionário próprio. Podemos acessar o texto do título usando
a notação de
ponto novamente. Então, deixe-me fazer o texto
do título, certo? O texto do título é uma hierarquia. Então, deixe-me parar a
instância do aplicativo e executá-la novamente. Vá e recarregue a página e veja o que
imprimimos desta vez Veja, tivemos acesso
ao valor dessa chave de texto, que era esse título. Agora, isso nos permite mudar o título para algo
como classificação média por dia. Então, deixe-me parar a instância,
executar novamente e recarregar. E você vê que o título
mudou para a
classificação média por dia. O que estou
tentando fazer é que você pode mudar tudo a
partir desse gráfico, qualquer coisa que você quiser, qualquer coisa que você precise mudar a
partir desse gráfico. E, claro,
nosso primeiro interesse é alterar os dados desse
gráfico porque, atualmente, você vê que o gráfico
tem essa chave séria. E essa chave de série tem nome, temperatura e dados. Esses são os dados que estão
sendo plotados no gráfico. Então você vê um zero, 15, dez -50. Então você vê, por exemplo, 15 é uma temperatura, zero é um quilômetro. E então temos,
como eu disse, dez -50. Portanto, a 10 quilômetros de altitude , a temperatura
é de cerca de -50 Então, esses são os dados. Vamos mudar esses dados
para outra coisa. Para fazer isso, precisamos ter acesso
à série de pontos
H C, mas às opções. Certo, série. E a série é uma lista. Então você tem que ter
muito cuidado aqui. Você precisa entender as estruturas de dados do
Python, e essa é uma prática excelente,
na verdade excelente, para realmente entender e aprimorar suas habilidades com estruturas de dados do
Python ,
como Portanto, a série é uma chave e o
valor dessa chave é uma lista. E essa lista é feita
de um dicionário. Portanto, ele tem apenas um item. Essa lista e esse item
são o dicionário. Então, esse dicionário
tem duas chaves, uma chave de nome e uma chave de dados. A chave do nome tem como
valor a temperatura. A chave de dados tem como
valor essa lista. É uma lista com vários
valores como listas e itens. É uma lista de listas. Então, a segunda lista, a terceira lista e assim por diante. E até agora, isso
nos dá essa lista, certo. E dessa lista,
queremos o primeiro item. Então esse será o item
com índice zero, certo. Então, qual é o dicionário. Isso significa que, até agora, temos um dicionário. Fora do dicionário, queremos esses dados. Então essa é a lista. Temos acesso a essa lista
e podemos mudar isso. Podemos definir um novo valor, uma nova lista para essa lista. Por exemplo, deixe-me
criar alguns dados fictícios,
três, quatro, seis, 789 Então, temos três pontos. Deixe-me parar o aplicativo e executar novamente. Carregue R, e este é um novo gráfico. Então, novamente, os dados foram três, quatro, seis, sete, oito,
nove, três, quatro,
então três é o X.
Então, esse é o
gráfico inverso, na verdade Então três é Y, quatro é o X. Se você quiser
reverter esse gráfico, se você não se sentir
confortável com isso, você pode ir aqui e
mudar isso para quedas E você também pode alterar esses
dados diretamente aqui sem precisar alterá-los aqui
por meio do dicionário. Mas, mais tarde, vamos
injetar quadros de dados, ou
seja, colunas de quadros de dados E essa é a
maneira correta de fazer isso. Então, este aqui
porque nos permite trabalhar com um dicionário em vez de
trabalhar com uma string. E a string não é uma estrutura de dados projetada
para armazenar dados em seu interior. De qualquer forma, para
coisas simples como essas, você pode simplesmente alterar os
valores diretamente aqui. Então invertido, vou
configurá-lo para dobrar e parar e correr, E agora o gráfico é diferente. Então você vê que a
altitude está aqui embaixo. A temperatura está
no eixo Y agora. Tudo bem, então eu
digito manualmente alguns dados aqui, mas não é assim que a vida
real se parece. Então, na vida real, você não
terá dados nesse formato. Normalmente, você os tem em um quadro de
dados em um arquivo CSV, assim como
os temos em nosso aplicativo Portanto, temos os dados
nas avaliações desse CSV. E, portanto, o formato
será um pouco diferente. Normalmente, teremos
algo como uma matriz X para o eixo X, devemos olhar, digamos,
três, seis e oito, e então temos Y igual
a quatro, sete e nove. Então, não é assim. Portanto, nosso objetivo é
transformar essas duas listas
nessa lista. Como fazemos isso? Fazemos isso usando o objeto zip, que basicamente produz
esse tipo de lista. Então, nos formatos
com pares de listas. Isso espera X e Y. Então, duas listas No entanto, isso ainda não é uma lista. Este é um objeto zip. Eu posso te mostrar isso
em um shell Python. Então, digamos que temos essa
lista e temos essa lista. E o Zp XY
ainda será um objeto zip. Você deseja converter
esse objeto zip em uma lista usando
a função list. Então X e Y. Agora temos a lista
que esperávamos Portanto, podemos obter essa
lista e usá-la lá. Agora, se eu for para o
outro terminal aqui, paro o aplicativo e o executo novamente. Recarregue e ainda obteremos o
mesmo gráfico com esses dados. Agora, e se eles
vierem de um quadro de dados? Isso nos leva ao nosso
aplicativo com nossos dados de avaliações. Então, deixe-me passar para o código em que estávamos
trabalhando em Júpiter Que é essa aqui. Então, carregamos o
quadro de dados com esse código. Vou copiar isso
e colar aqui no topo depois de importar o
Jus Pi, certo Temos esse quadro
de dados agora. E o que mais
tivemos para calcular
a classificação média? Sim, tínhamos esse quadro de dados
médio diário, que era uma versão agregada
do quadro de dados Então, vou copiar
essas duas linhas e
colá-las aqui. Portanto, a média diária é o
quadro de dados em que estamos interessados, e tem um índice, que
será a data e uma coluna de classificação que tem as classificações médias
de cada dia. Então você pode apenas
refrescar sua memória, fica assim. Certo. Agora, em vez de X, teríamos a média d, o índice de pontos do quadro de dados. Então, isso será
usado como o eixo X. E então, para Y, teríamos uma classificação média
diária.
Então, essa coluna. Então, elas são tratadas
como duas listas por ZIP
e, em seguida, as emparelhamos, para criar um par
de data e classificação. Então, por exemplo, ficará
em segundo plano, parecerá uma lista de
listas, como expliquei para você. Então, a primeira data
seria como 2020 133, e a classificação 4,51, digamos,
responda uma, a próxima data
e você terá a ideia Então, vamos experimentar isso. Não vai funcionar, e
eu vou te dizer o porquê. Então, como eu disse, obtemos um
gráfico vazio e sem erros. O motivo pelo qual isso
não funciona é que os gráficos
altos consideram a data. Então,
esses tipos de dados são considerados como categorias, tipos de dados, não números. E nesse caso, você precisa fornecer esses
dados de outra forma. Isso ocorre por meio de opções de categorias de pontos do eixo
X. Então, o que é isso? Bem, o eixo X está realmente aqui. E estamos fazendo categorias de pontos
do eixo X. Agora, você não vê uma chave aqui, mas estamos criando essa chave. Isso será igual a
listar o índice médio de pontos. Então, estamos convertendo
isso em uma lista e fornecendo essa lista
para essas categorias Esta é uma lista de datas. E então, para a Delta, tudo o que precisamos fazer é
converter em uma lista a coluna de classificação. Deixe-me parar o roteiro e ver o que vamos conseguir dessa vez. Atualize e pronto,
obtemos o gráfico que
esperávamos O gráfico é interativo, mas você vê que
temos alguns rótulos aqui e alguns títulos
para o eixo, que são do exemplo antigo, então altitude e temperatura,
mas podemos alterá-los. Então, eu sugiro que você
possa alterá-los diretamente no código JavaScript. Assim, você pode alterar o texto
do título a partir daqui. Você pode alterar a
legenda a partir daí. Então eu acredito que isso é
fácil de fazer no código. Só para dar
um resumo rápido, o que fizemos foi carregar aqui o quadro de
dados de que precisamos. Portanto, a média diária é o
quadro de dados que contém nossos dados. Então, aqui temos o código JavaScript de
gráficos altos. Em seguida, temos a função
que renderiza a página da web. Temos o componente da página da web. Temos esses dois componentes, componentes normais, texto, QD. E então temos o componente
de gráficos altos, que contém agora esse gráfico
D JSON como um dicionário Assim, podemos acessar esse
dicionário por meio de opções, já que ele está armazenado nas opções. Portanto, agora as opções do HC
são o dicionário
e, portanto, podemos acessar as propriedades desse dicionário e alterá-las conforme desejarmos. E o uso
mais importante disso é definir os dados. Então você viu que para dados que contêm categorias, não números, você pode usar esse eixo X e definir a
propriedade dessa categoria em uma lista, que é uma lista de datas. E então os dados são iguais a
uma lista simples de classificações. Este é o aplicativo.
Obrigado por seguir. E esse foi um vídeo longo, mas os próximos aplicativos
levarão muito menos tempo porque
agora você conhece o processo
e, com um pouco de prática, poderá criar qualquer
gráfico que quiser. Obrigada.
146. Alterando os rótulos gráficos no aplicativo web: Oi, bem vindo de volta.
No vídeo anterior, criamos esse gráfico de
séries temporais das avaliações
médias mostradas
diariamente. Agora você vê que temos
alguns rótulos indesejados aqui, como temperatura aqui, temos quilômetros como o
final dos rótulos do eixo X. Então, vou
mudar isso rapidamente no meu código. Agora, você pode fazer
isso por meio do Python usando a notação de
pontos do dicionário
ou, para essas coisas, sugiro que você leia
diretamente o código JavaScript. Então, por exemplo, estamos
falando sobre o eixo X, e aqui temos a altitude. Portanto, o eixo X deve,
na verdade, ser a data da data. Então temos esses rótulos, o formato dos rótulos do eixo X. Então tem esse final de quilômetro, aquele que você vê aqui
em um quilômetro Se você quiser outra coisa,
basta escrevê-la aqui. Caso contrário, basta excluí-lo e
deixar o valor como está. Não exclua esses tipos de espaços reservados em
Javascript. Você também pode alterar
a descrição do intervalo, mesmo que isso
não apareça em nenhum lugar. Então, vou continuar
com a temperatura. Então é por isso que temos o eixo onde
temos a classificação média. Onde mais temos esse símbolo de grau
Celsius aqui. Vou deletar isso. E temos esse nome de
temperatura aqui, que na verdade é o nome temos aqui na janela
pop-up. Então, temperatura que
corresponde a isso. Então você pode dizer novamente aqui, classificação
média e, em seguida,
controlar C, executar novamente. E vamos ver as mudanças. Então, recarregue. Sim, avaliação
média aqui, datas aqui,
avaliação média lá. Ainda vemos esse
quilômetro no pop-up. Você vê 506 quilômetros. Isso está aqui na dica da ferramenta. Então, você deseja excluir isso
e excluir isso também. A dica de ferramenta tem
esse formato de cabeçalho, que é o nome de uma série, então a temperatura, e era temperatura antes
, é a classificação média. Então esse é o nome do ponto da série. E também temos o ponto ponto X. Então, ele vai
mostrar o valor X. No nosso caso, esse é o número, então a coluna do índice, que é um número de
zero até algum número. Então, o número da linha, e essa é a
classificação média que você vê lá. Então, corremos novamente
e, desta vez, tudo deve ficar bem. E isso encerra esse vídeo. Falarei com você
na próxima.
147. Adicionando um gráfico de séries de tempo ao aplicativo web: Olá, bem-vindo de volta.
Nos vídeos anteriores, criamos esse gráfico diário
de avaliações médias. Neste vídeo,
vamos criar o mesmo gráfico, mas
semanalmente. Agora, este será um vídeo
curto porque
eu não vou explicar o código porque
eu já fiz isso, então você poderá
entender facilmente o que estou fazendo. Então, deixe-me voltar ao código do
Visual Studio e criarei um novo arquivo. Vou chamar
isso de F, em média de Terrett para classificação e semana Então esse é o número dois. E o que eu geralmente
faço quando construo esses gráficos é ir até aquele modelo de espionagem
e colar aqui, e depois aqui dentro, então eu crio um novo componente de gráficos
altos que pertence ao WP
e, como opções, ele tem esse gráfico de variável, que será
uma variável Será uma
string de várias linhas entre aspas. Então, aqui agora, vou
encontrar um exemplo
de gráficos altos. Então, vou usar
a spline novamente para esse gráfico semanal
porque acho que esse é o tipo de
gráfico mais apropriado para esse tipo de análise para
esse tipo de visualização Então, vou clicar em JS Fiddle e isso
me mostrará o código JavaScript, que é esse aqui Eu posso copiar tudo isso
e ir para o Python e colar lá e, é
claro, excluir essa Começa com o primeiro
colchete antes do gráfico
e depois termina com
um colchete, então excluirei a
semi coluna e o parêntese então excluirei a
semi coluna e o As opções apontam para
essa string de documentos. Antes de aplicar meus próprios dados, primeiro testo esse código
para ver se ele está funcionando, mas primeiro preciso interromper o processo atual
com o Control C e executar Go para comprar e recarregar Sim, está funcionando. Em seguida, quero importar pandas. Então, como eu já estava fazendo a
análise em Júpiter, posso simplesmente copiar e
colar essas linhas Cole-os lá. Não precisamos Mt Lips, posso deletar isso. Esse é o nosso quadro de dados. Agora precisamos fazer algumas
análises sobre esses dados. Então, volte para Júpiter e encontre a análise semanal dessa
que está lá A média semanal são
os dados de que precisamos. Então, cole-os abaixo do quadro de dados original e devemos ter a média
desta semana agora. Agora, a média semanal
terá como coluna de índice as semanas. Então, aqui e semana, esse será o índice médio de pontos da semana. E também haverá uma coluna de classificação no quadro de dados da média
semanal. Então, vamos usar essas duas
colunas para representar graficamente os dados. Portanto, devemos acessar Hc categorias do eixo X das opções de
pontos para
dados categóricos, como Então, isso seria um índice de pontos
médio fraco, mas na forma de uma lista. Então, temos que convertê-lo em uma lista apenas
para reconhecê-lo. E então HC Options, isso é
sério. Esses dados. Então, o que significa que a série zero nos
dá esse primeiro item,
que é um dicionário. Então, temos o dicionário aqui
e, em seguida, acessamos a
chave de dados desse dicionário. Então, isso nos dará, na verdade,
o valor dessa chave, que é essa lista. E substituímos essa
lista por outra lista, que é uma classificação média fraca. Isso deve bastar. Então pare de
controlar C Re, execute, recarregue Esse é o nosso gráfico. estranho porque temos que
reverter isso. Na verdade, foi
originalmente invertido. Portanto, devemos dizer quedas como um
valor do Controle C invertido e executar novamente. Recarregar E sim, é isso.
Não vou perder seu tempo e mudar todos esses rótulos como fiz
no vídeo anterior. Então eu já fiz
isso. Portanto, isso é suficiente para este vídeo. Obrigado por seguir.
Eu vou te contar mais tarde.
148. Várias séries temporais: Oi, bem vindo de volta. Neste vídeo, vamos criar uma classificação média por
mês por gráfico de curso. Como você deve saber,
criamos esse gráfico já comprado usando Júpiter e Matplot Lib. Então
ficou assim. A ideia é que
teremos o mês no eixo horizontal
e
as avaliações médias
no eixo vertical, e
teremos vários gráficos nessa área do gráfico,
cada um representando um
curso
em cada um representando um
curso
em E, como você já deve saber, uma boa maneira de criar
gráficos usando tabelas B e altas é acessar
o site higchart.com Então, você acessa gráficos e tipos de
séries e encontramos um gráfico que seria um bom
representante de nossos dados. Então, dei uma olhada nesses
exemplos e descobri que gostaria de usar gráfico
Area Spline,
que se parece com isso Você vê que isso tem
várias linhas, então duas, neste caso, e tem esse eixo X com dados
categóricos Portanto, não são números, são segunda, terça,
quarta e assim por diante. E temos esse eixo numérico
Y, então unidades de frutas. E representa o consumo
médio de frutas durante uma semana
para John e Jane. No nosso caso,
vamos mudar esse gráfico e ter
seis ou sete linhas. Não tenho certeza de quantos
cursos existem. Portanto, uma linha para
cada curso mostrando as avaliações médias de um longo
período ao longo dos meses. Antes de copiarmos os códigos, vamos primeiro preparar
o ambiente. Crie o script e crie
o por aplicativo e assim por diante. Vou citar essas
quatro classificações médias. Isso seria,
digamos, mês do curso. Portanto, classificação média por
curso por mês e PY. Você vê que é diferente
da média do mês de avaliação. Essa é a classificação média
por curso por mês. Então eu vou copiar
esse modelo de J Pi. Copie aí. HC será o componente de gráficos
altos, que pertence ao WP, e as opções geralmente serão
uma definição de gráfico, que deve ser uma
variável em algum lugar aqui É igual a uma string,
uma string de várias linhas. Então, vamos copiar esse código
JavaScript. Então, este aqui,
vou copiar tudo isso, colar lá
e, pouco antes
do gráfico, e, pouco antes
do gráfico, deixamos esse
colchete antes do gráfico Deixamos isso e excluímos a semi coluna e
o parêntese E agora estamos prontos para substituir
os dados por nossos dados. Mas o que eu sugiro que
você faça primeiro é experimentar este exemplo para ver se isso está funcionando agora sem alterar os
dados com seus próprios dados. O que eu gostaria de
fazer agora é tentar executar isso e depois visitar o URL, e você verá
um erro. Então, erro de decodificação de Jason, gráficos altos de identificadores
desconhecidos Isso acontece por
causa dessa linha. O Python não pode reconhecer
essa expressão aqui porque isso é JavaScript Então você quer deletar isso e deixar
apenas essa string aqui, a cor da cor de fundo. E agora, se eu parar o
script e executá-lo novamente, e recarregar a página, devemos ver o
exemplo exatamente como obtivemos no site do
High Chart Agora, esses dois gráficos
são splines de área. Mas se você quiser
alterá-los para spline, vá até
seu código e altere essa spline de área para spline, pare o script e execute novamente.
E recarregue E essa é a saída. Agora estamos prontos para injetar
nossos próprios dados nos dados. Então, para isso,
queremos ir até Júpiter, onde temos
nossa análise pronta Copie esse código e cole lá, e também precisamos fazer as agregações necessárias
para extrair o mês,
os cursos por mês, que é esse código aqui, e isso nos dá
esse quadro de dados Agora, vamos atualizar nossa memória sobre a aparência do quadro de dados Então você pode imprimi-las aqui e executar o script, recarregar a página e ver o que você imprimiu no terminal, ou você pode ver a
saída de Júpiter Então, o que você
preferir, vou executar o script aqui. Então,
imprimimos o quadro de dados antes mesmo de carregarmos o aplicativo web, porque ele impresso porque o
aplicativo web está dentro da função, então isso está apenas
no namespace global, no escopo global Então, quando o script é
executado, eles são executados. Se isso estivesse dentro
da função aqui, ela só seria executada
quando carregássemos a página. E esse é o quadro de dados. Portanto, tem o índice deste mês e tem colunas diferentes. Então essa é a primeira coluna. Então temos mais colunas,
que não vemos aqui. E então a última coluna é essa e os valores
de cada coluna. Então, o nome de uma coluna, os valores dessa coluna, que são as classificações médias. E temos um
mês para cada linha. Então, isso é julho de 2019, agosto de 2019, janeiro de 2021. Então, indexe as colunas. Vamos ver agora como injetamos esses
dados nesses dados Então, vemos que XXIs tem essas categorias
nesses dias da semana Então, podemos fazer a mesma coisa agora. Aqui embaixo, dizemos hc
dot options dot XXI. Então XXs é a chave do
dicionário principal. Portanto, está diretamente exposto
no primeiro nível. Então, título do gráfico, eixo da legenda. E então temos
o segundo nível. Portanto, a categoria faz parte do eixo. Portanto, podemos acessá-lo assim então as categorias são uma
lista, como você pode ver aqui. Portanto, precisamos
substituí-lo por uma lista de CRS médios mensais Então esse é o índice de pontos do nosso
quadro de dados. Então, aquela coluna aí,
20185, 20186 e assim por diante Certo. Essa foi a parte mais fácil. Agora vêm os dados. Então, o que você
precisa
fazer é entender a
estrutura dos dados. Esse é o primeiro passo muito
importante. Portanto, a série é uma chave de primeiro nível. Portanto, podemos dizer
opções Hc, isso é série, certo. Então, isso nos dará essa lista. Então essa lista tem
quantos itens ela tem? Eu vejo um dicionário
de lá até aqui. Esse é um dicionário
que tem o nome John, par de chave e valor. Então, o nome é a chave,
John é o valor. Então temos esses outros
dados-chave e uma lista, e o dicionário termina aí. E então temos o
outro dicionário. Então é Jane How e esses
são os dados de Jane. A lista é feita de dicionário, e cada dicionário representa
uma linha no gráfico. Então isso é para Jane
e isso é para John. Portanto, o que precisamos
fazer é ter aqui. Então esse seria o
nome de um curso. Digamos que o primeiro curso
consistiria em 100 exercícios em Python e assim por diante, com o título inteiro E então os dados conteriam uma lista de classificações médias
para aquele curso específico. Então aquele, aquele,
aquele e assim por diante. E então teríamos que
repetir esse processo para cada um
dos seis ou sete cursos que temos aqui.
Como fazemos isso? Bem, você poderia
fazer isso manualmente. exemplo, talvez você pudesse
injetar isso de uma série, você diria o primeiro enredo, então isso lhe daria
o primeiro dicionário Essa expressão é
o primeiro dicionário. Então, poderíamos acessar
o nome e substituí-lo por
talvez a média mensal das colunas de pontos
CRS Então essa seria a
primeira coluna e assim por diante. Tudo bem, mas não é um processo
automático. Então, quando você faz um trabalho manual, isso é um sinal de que você
não está programando
da maneira certa. Em vez disso, o que precisamos fazer é criar
toda essa lista dinamicamente E esse é um
ponto muito, muito crucial agora para usar gráficos altos, mas também para saber como manipular
estruturas de dados em Python Portanto, essa é uma prática
excelente. Estou muito feliz que isso tenha sido divulgado. Uma ótima prática para você. Então, deixe-me mostrar como você pode construir essa lista a partir
desse quadro de dados. Então, antes de fazermos isso, antes de
atribuirmos a lista, queremos construir a lista. Então, vamos chamar esse sublinhado
HC de Delta. E isso é igual a. Então, precisamos criar uma lista. Então isso é uma lista. Portanto, escrevemos
colchetes. A lista é feita
de dicionários. Portanto,
escrevemos colchetes. E então, dentro de cada dicionário, temos uma chave de nome. Sempre temos essa chave de nome e uma variável para
essa chave de nome. Por que estou dizendo variável? Bem, porque nome é sempre
nome, então é uma constante. É por isso que estou codificando que devemos sempre
ter um nome lá Mas o valor do
nome é uma variável, então está mudando a cada vez. E depois o que mais? Nós temos esse par, ok. Dentro do dicionário,
esse dicionário. Então esse dicionário
tem outro par. Então, dados e a lista. Então, vamos escrever isso. Como dados, a string, uma coluna e temos uma lista. Essa lista é basicamente representativa de
cada uma das parcelas, cada uma das sete parcelas que teremos
para cada Então, o que significa que essa lista será dessas classificações. Por exemplo, vamos fazer com que
a primeira lista seja a
primeira coluna, por exemplo, para os exercícios de Python,
um para esse curso, essa coluna como uma lista
e depois a outra Depois desse curso, o próximo
, o próximo e o próximo. Então, uma coluna para cada curso e V uma será substituída pelo
título da coluna. Portanto, antes de escrever a
expressão dentro dessa lista, quero terminar primeiro a compreensão
da lista superior porque temos duas
compreensões de lista Temos o primeiro nível um, então vamos chamá-lo
de nível superior. Aqui estamos construindo
dicionários. Portanto, é uma lista feita
de dicionários , o que significa que devemos dizer aqui para V uma coluna
média mensal de CRS tat. Então, isso é uma lista
contendo sete sequências, uma sequência para
cada título do curso Então, será uma lista contendo 100 exercícios de
Python, um, avalie e melhore
suas habilidades, depois o outro título
do outro curso e assim por diante, é uma
lista desses O que estamos fazendo é
injetar aqui um título,
o primeiro título dessa lista
na primeira iteração e, em
seguida, o próximo título
da lista
média de colunas CRS desse mês na E então, primeiro,
teremos sete iterações ou seis, qualquer que seja o número de
cursos que acertamos Mas então, aqui dentro, temos uma iteração aninhada, uma compreensão de lista aninhada,
desculpe, que é E isso será, novamente, escrever
outra variável, como V dois para V dois
na média mensal CRS. Hm. Então, o que isso vai ser? Bem, tem que ser
essa coluna, certo? Então, qual é essa coluna? Qual é o nome dessa coluna? Bem, para este curso
é esse o nome da coluna. Então, aqui precisamos
anotar o nome da coluna. Veja, essa é
a sintaxe do Pandas. Então você escreve o
nome da coluna, mas temos nomes de
colunas diferentes. Então, o que inserimos
aqui é V um. Porque V one será
o título atual na compreensão da lista
de nível superior Então, basicamente, o que o
Python fará é que, enquanto estiver iterando
o primeiro título, ele parará na primeira iteração de nível
superior
e percorrerá aquela coluna específica por meio
dessas aquela coluna específica classificações para 100 E ele construirá essa
lista quando terminar com todos esses números, ele constrói essa lista depois vai para
a outra iteração na iteração de primeiro
nível Na segunda iteração
das outras colunas, que
será o próximo curso E assim por diante, espero que esteja claro. Certo, então o que resta a fazer é
atribuir essa nova lista, para injetá-la em nossos dados
porque a criamos, mas não a
conectamos ao HC Portanto, é apenas uma variável
flutuando em nosso script, sem conexões com
as outras partes. Então, o que precisamos fazer é
dizer que aquela, aquela lista é aquela lista. Então, precisamos
atribuí-lo à Série, certo? Ct options dot Series, igual aos dados HC. Certo. Agora vou
parar o script executar
e visitar o aplicativo. E essa é a saída. Aqui está o eixo X com o mês, e esta é nossa classificação
de 2,5 a 5,5. O máximo está
em algum lugar aqui. Então você pode passar o
mouse até lá e ver as classificações de
cada curso, certo? A lenda aqui está flutuando. Então, se você quiser mudar isso, pode voltar ao seu código
e localizar as legendas aqui. Então você tem alguns
parâmetros aqui que você pode experimentar. Mas se eu definir flutuação para quedas, isso deve mudar a
visão do gráfico. Então eu acho que isso está mais claro. Agora, eu não concordaria que
esse tipo de gráfico seja a melhor representação
para esse tipo de dados porque temos
várias linhas aqui, mas elas estão muito
próximas umas das outras. Portanto, não há muitas variações entre um curso
e outro. Acho que essas splines
seriam mais representativas se,
em vez das médias,
tivéssemos a contagem das avaliações
das classificações
restantes para cada curso, o que significa que temos que ir até
a seção de processamento e dizer aqui, contar em vez da E deixe-me tentar isso. Hmm. Então, sim, parece
melhor, eu acho. Temos mais variação,
mais diferença entre esse enredo
e os outros. Embora os outros ainda não
estejam tão visíveis, já que este gráfico aqui
está
abrangendo grande parte da faixa do eixo Y. Portanto, o que
vou fazer a seguir no próximo vídeo
é usar outro tipo de
gráfico para representar exatamente
os mesmos dados. Classificações médias por curso, por mês, mas usando
um gráfico de fluxo. Eu vou falar com você
no próximo vídeo.
149. Criando vários gráficos de fluxo de séries de tempo: Oi, bem vindo de volta. Neste vídeo, vamos criar
esse gráfico de fluxo. Portanto, você pode encontrá-lo
no
site hichart.com em tipos de gráficos
e séries Então, vá até o gráfico do Stream. No eixo X deste
gráfico neste exemplo, temos os anos, então são dados
categóricos do eixo X de tempo No eixo Y, temos o número de medalhas
conquistadas pelos atletas, e cada cor
representa um país Portanto, cada país teve um
determinado número de medalhas conquistadas por seus atletas
em um determinado ano Agora vamos ter o
mesmo gráfico, você entendeu. Temos os meses
ao longo do eixo X e cada cor que representamos
um curso e, em seguida,
podemos ter as avaliações
médias ou o número de
avaliações no eixo Y. Antes de copiarmos o
código JavaScript desse gráfico, vamos preparar
nosso ambiente. Vou duplicar
isso
copiando-o e pressionando
Control V para colá-lo Eu o duplico e
vou
renomeá-lo para outra coisa cinco. Vamos chamá-lo de stream. Certo. Em seguida, vá para o arquivo
que acabamos de criar. E tudo o que temos que
mudar a partir daqui é essa definição de gráfico, é essa definição de gráfico,
excluí-la e ir aqui, selecionar tudo isso,
Controle A, Controle C,
copiar, ir aqui, Controle
V para colá-la, e não se esqueça de remover
o caractere desnecessário,
então a semicluna entre parênteses, e aqui em cima precisamos de gráficos
e precisamos
do parêntese aqui em cima precisamos de gráficos
e precisamos gráficos Então, tudo antes
desse colchete encaracolado é excluído, desse jeito Então, vamos dar uma olhada
agora nesses dados. Sim, como os dados
são construídos. Então, a série é uma lista. É uma grande lista contendo
vários dicionários. Então, por exemplo, este é
o primeiro dicionário. Começa aqui. Isso termina aqui. E é feito desse par de chaves, valores, nome
e nome do país, que serão substituídos
pelo nome de um curso. E temos dados,
que são essa lista. E então esses
dicionários são repetidos
repetidamente com dados diferentes Isso significa que não precisamos
alterar nosso código aqui embaixo. Então, tínhamos esse código. Nós o construímos já
no vídeo anterior. Então, isso deve ser bom. Vamos tentar executá-lo. Vamos receber um erro
e vamos corrigi-lo. Portanto, interrompa o processo atual se houver um processo em execução. Verifique se você está executando
o novo arquivo que criamos. Então pressione Executar. Então esse é o erro. E quando você recebe esse erro de decodificação do
Jason, isso significa
que é sobre
o código JavaScript que temos Então, queremos ir aos códigos, e você vê que se
trata de cores e identificadores
desconhecidos, porque o que temos aqui são essas cores e precisamos excluí-las. E você pode excluir
as cores inteiras. Então, de lá para cá,
incluindo a vírgula, porque o Python não está
sendo capaz de usar essas cores Então, exclua
isso, e isso não
mudará nenhuma saída. E deixe-me te mostrar. Temos outro, Peto. Sim, então está aqui. Portanto, temos esse tipo de sintaxe de JavaScript que o
Python não consegue reconhecer Então, o que você pode fazer é, já que estamos substituindo
isso de qualquer maneira, desculpe, você pode excluir todos os valores
da lista de categorias e deixar
as categorias em uma lista vazia. Então, assim como essas categorias. Então, as categorias estão sendo substituídas, como você sabe, aqui embaixo
por meio dessa expressão. Deixe-me parar novamente e correr. Desta vez parece estar funcionando. Então, na verdade, esse o número de avaliações
restantes para cada curso, então isso mostra a diferença
entre esse curso, o megacurso de Python
e os outros E isso é algo
interessante aqui. Então, você vê que este novo
curso acabou de ser
lançado há pouco tempo, em 20 e 21 de janeiro Portanto, o curso completo de Python criou dez aplicativos OP profissionais, e os gráficos altos são muito inteligentes para ajustá-los
dentro desse gráfico de fluxo Agora, talvez você queira alterar esses rótulos para
poder encontrá-los facilmente. Você pode localizá-los
onde eles estão aqui para que eu possa realizar uma pesquisa na Alemanha, que é este texto aqui. Portanto, faz parte das anotações. Veja, você poderia dizer, por exemplo,
por exemplo, curso foi lançado ou o Python
ficou popular. Certo. Se eu parar e voltar a correr. Devemos ver esses
rótulos atualizados. Você também pode atualizar a localização
deles. Então, por exemplo, você vê,
com a primeira anotação, está em X 5,5,
y 30 . Então, X 5.5. Então zero aqui, um, dois, três, quatro, cinco, seis, então é 5-6 5,5 30 ao longo do eixo Y. Então 30 devem estar
em algum lugar aqui. Então você entendeu. Isso
conclui este vídeo, e falarei com você
nos próximos.
150. Adicionando um gráfico de pizza ao aplicativo web +: Olá. Neste vídeo,
vamos criar um gráfico circular, exatamente como o que
você está vendo. Portanto, você pode encontrar isso
em pchart.com, acessar
Tipos de gráficos e séries e acessar Este aqui mostra
a porcentagem de usuários dos principais navegadores
da Internet. Por exemplo, o Chrome
tem a maioria. Você vê essa grande fatia aqui e cada fatia está
associada à porcentagem No nosso caso, o que
teremos
é que fizemos essa análise anteriormente, então temos esses dados. Para cada curso, ainda
temos
várias classificações para esse curso. Portanto, vamos
acabar com algo assim, mas interativo, como
você pode ver aqui. Vamos preparar
nosso ambiente. Então, vou criar uma
nova classificação de arquivo por curso. É um pi. E, como de costume, vou
usar esse modelo, esse modelo Pi e, em seguida, adicionar um componente de gráfico alto
que pertencia ao WP e renderizarei esse código
JavaScript, que temos que colar Então, aqui está o
código desse gráfico. Então, aquele aí dentro. Controle A,
copie e cole lá, e não se esqueça de excluir a semiccoluna,
o
parêntese e, no topo aqui, excluir tudo o que estiver
antes Eu gostaria de testar o código
antes de fazer qualquer alteração. Mas eu tenho esse erro aqui.
Existem quatro códigos. Eu tenho que remover um e depois executar. Assim,
obtemos o gráfico circular
visualizado corretamente. Em seguida, quero que esse
código seja colado aqui em cima. Além disso, queremos ter essa agregação do quadro de
dados em que basicamente contamos quantas classificações existem para cada curso Então, classificação do nome do curso. Conte isso. Certo. Em seguida, temos que examinar a
estrutura dos dados. Então, como você pode ver, esta é uma
grande lista com dicionários. Então, aqui está o primeiro dicionário,
mas tenha cuidado aqui. Pelo que vejo,
o que temos aqui é esse dicionário que
tem essa chave e valor, essa chave e valor, e então essa chave
e esse valor, que é uma lista. Então, termina aqui. Portanto, desta vez,
o que precisamos fazer é acessar hc dot options
dot serious dot data. Portanto, ao contrário das outras vezes que fizemos a série de pontos de
opções hc, porque os dados estavam
diretamente após a série. A série estava na lista. Mas desta vez, o Series
tem uma chave de dados, e essa chave de dados
contém os dados reais, que são feitos de dicionários Então, o primeiro dicionário
com nome e Y, o segundo dicionário
com nome e por que novamente. O primeiro dicionário também tem essas outras propriedades, como fatiado e
selecionado, o
que indica que Uh, que indica que Uh, esse cromo é Veja, está separado
pelas outras fatias da torta. Então, isso é para o Chrome. Os outros não têm essas propriedades, o que é bom. Então, eu vou
deixar as coisas assim. Mas cada um deles
tem um nome e um Y. Portanto, isso
será igual a algo, e esse algo é algo que
precisamos construir agora Então, os dados do HC
mostrarão que isso é uma lista. É uma lista de
dicionários, certo. Uma lista de dicionários
que têm um nome igual a vamos encontrar um nome para uma
variável V um, certo E então nome e Y, o rótulo do
outro valor é Y. Vamos ter uma variável V dois Então, como eles sempre
mudam opera aqui, QQ aqui, então vá explorador lá, isso significa que precisamos de uma
variável após o nome e também uma variável depois de Y, pois esses valores também estão mudando E o que estamos fazendo é construir uma
compreensão de lista Então, para V um e V dois em. Então, onde podemos conseguir isso? Basicamente, precisamos do V 1, precisamos dos
nomes de cada curso, dos títulos dos cursos. E para V dois, precisamos do número
de avaliações do curso. Então, vamos dar uma
olhada no quadro de dados, como ele se parece, compartilhar. Então, acho que o índice
tem o nome do curso. Deixe-me mostrar, na verdade, que você. Vou executar aquela célula
e executá-la também. Então, entendemos isso, mas compartilhamos que índice é basicamente
um objeto em forma de lista, que contém todos os
nomes dos cursos. E compartilhar, na verdade, o
compartilhamento da lista contém o
número de avaliações. O que vamos fazer é
fazer para V um,
V dois no Zip compartilhar índice de pontos, compartilhar impressão V um, V dois. E o que está acontecendo aqui é
que, na primeira iteração, ela
imprimirá V 1, o título do
primeiro curso e o número de avaliações
restantes para esse curso Então, v1v2 e depois v1v2 de novo e de novo e de novo. É disso que precisamos aqui. Então, para v1v2 no Zip, compartilhe, desculpe, compartilhe, índice e compartilhe Então, esses valores serão injetados aqui e aqui
neste dicionário E então atribuímos isso a isso, paramos
o script e o
executamos novamente para
ver onde estamos. Então, recebemos um erro. O objeto da lista de atributos não
tem dados de atributos. Então, vamos dar uma olhada
onde o erro ocorreu, uma linha 84, que está aqui. E diz que o objeto List não
tem dados de atributos, que significa que esse
é o último objeto e esse é o atributo de dados. Como é uma lista, é claro, ela não tem
esse atributo de dados porque pensamos que
era um dicionário. De alguma forma, pensei que
talvez você não soubesse. Tão sério. Hmm.
A série é na verdade uma lista. Então, isso foi um
erro lógico da minha parte, mas é disso que tratam os
erros. Então, eles explicam para
você o que está acontecendo. Você lê isso e
corrige o problema. Então, como a série é uma lista, significa que ela tem itens
e, nesse caso,
tem apenas um item. Portanto, é o grande dicionário
que tem essa chave e valor, essa chave e valor
e esse valor-chave. Portanto, a lista de séries
tem apenas um item. Portanto, precisamos
acessar esse único item. Da série, então o
item com índice zero, que então
nos dará esse dicionário. E desse dicionário, extraímos a chave
de dados desse dicionário. Então, ao extrair dados
acessando a chave de dados, obtemos a lista da chave de dados Então, agora devemos ficar bem. Ei, parece bom. E isso também encerra esse
vídeo, e essa foi uma série de gráficos que desenvolvemos
ao longo dessas seções Gostaria de
agradecer por seguir e falarei com você
nos próximos vídeos. Te vejo.
151. Demonstração de aplicativo 5: desenvolvimento web com o Flask: criando um site pessoal: Olá, bem-vindo a esta
nova seção do curso. E esta é a primeira
palestra em que vou dar uma demonstração do que você vai
construir nesta seção Então, essa é uma
daquelas seções
do curso em que você vai
criar um aplicativo. Este aplicativo específico
é um site com Python. O Python pode criar sites, assim como outras
linguagens de programação Obviamente, você precisa de HTML e
também pode precisar de CSS
e JavaScript para que o site do cliente renderize
a
página da web no navegador Mas no back-end,
você usa Python, assim como faz com PHP e outras linguagens de programação Sim, o site
que você vai
construir é esse
aqui que você vê. Quer dizer, está bastante
vazio por enquanto, não tem nenhum conteúdo, mas você pode preenchê-lo com conteúdo e usá-lo como uma
vitrine para seu trabalho, como um portfólio ou qualquer coisa Então, quando chegar a esse ponto, você pode melhorá-lo com o Easy. Saiba também que este
site já está ativo, então vou te ensinar como
implantar um site em um servidor ativo para que todos possam navegar e
visitar seu site. Portanto, é um
tutorial completo para criar o site do zero
e fazê-lo funcionar online. E agora esse é um site
estático. Porém, posteriormente no curso, teremos outros aplicativos nos quais
você criará sites
mais dinâmicos com banco de dados no back-end e
também alguns recursos dinâmicos. Mas esse é um ótimo
ponto de partida. Então, espero que você goste
desta seção
e, se tiver dúvidas,
fique à vontade para perguntar. E sim, falarei com
você na próxima palestra.
152. Seu primeiro site no Flask com aviso de servidor adicionado: Olá. E nesta palestra, você criará
seu primeiro site com o FLASK, caso
ainda não tenha feito isso FLASK é uma
estrutura Python que tem todas as ferramentas modelos e funções para você
criar sites com E antes de aprofundar o
FAS e explicar como usar
o FLASK provavelmente para
criar aplicativos web em Python , gostaria que você gastasse 3 minutos
para criar um site muito
básico E isso é feito com apenas
algumas linhas de código Python. Então é isso que
vamos fazer agora. Para criar um aplicativo web com o FLASK, você precisa ter o
Flask instalado Portanto, a instalação do PIP Flask deve instalar o Flask em seu ambiente
Python Tudo bem. Isso foi instalado
com sucesso. E vamos criar
nosso site agora. O que você precisa é de um arquivo Python. Então, estou criando um aqui. Digamos que o primeiro roteiro não seja uma torta. E aqui é onde você escreve o código que
criará seu aplicativo web, e tudo começa com a importação
do Flask E, na verdade, você não
importa a estrutura flask, mas importa a
classe flask de uma estrutura flask Então, do frasco, importe o frasco. E o FLASK é uma classe
dessa biblioteca, contém
todos os protótipos que contém
todos os protótipos necessários para criar aplicativos
web com Python Portanto, isso tratará das
solicitações para você. Você não precisa
configurar solicitações sozinho. Mas vamos nos concentrar
nesse exemplo por enquanto. Depois de fazer isso, você
precisa criar uma variável na
qual
armazenará sua instância do objeto FLASK,
seu aplicativo FLASK Isso seria igual
à classe FLASK. E você passa a
variável de nome lá, não se preocupe com
isso agora. Então você precisa de um decorador, root, e aqui está uma URL onde
você visualizará seu site Então, essa barra aqui
significa a página inicial. E logo depois disso,
você precisa escrever
a função, a função
Python E essa função é o que define o que sua página
da web fará. Nesse caso,
retornaremos uma string. Digamos que uma string aqui. O conteúdo do site vai aqui. Logo depois disso, você precisa de mais
duas linhas de código, e isso é uma declaração
condicional Se o nome for igual à string
main app dot run. Debug é igual a True. É isso mesmo. Não se preocupe com
isso agora. Basta clicar em Salvar,
abrir o terminal e executar o script com o script
Python um, Python E parece que seu aplicativo
da web está em execução agora, então abra o navegador. E seu site deve estar
ativo em seu host local. É isso mesmo. Nada impressionante, mas você vê como é fácil criar
um site com Python E, nesse caso,
estamos apenas devolvendo uma engrenagem de corda ao site. Portanto, não há nada
sofisticado lá dentro. Mas, mais tarde,
explicarei como você pode retornar páginas
HTML em vez de reproduzir strings
em Python Isso permitirá que você realmente
tenha formatos diferentes, fontes
diferentes em seu texto
e, em seguida, você também poderá aplicar estilos
CSS ao seu HTML
e, assim, terá
um site completo com recursos modernos Por enquanto, vamos
garantir que você entenda essas sete linhas de código. Sim, são sete linhas. Como eu disse, na primeira linha, você está importando
o objeto da classe FAS da biblioteca FAS Então, na próxima linha, depois de importar
a classe flask aqui,
o objeto flask, em outras palavras, você está instanciando
essa classe, esse Aqui está uma
variável especial que obterá como valor o nome
do script Python Agora, quando você executa um arquivo
Python, um script Python, o
Python atribui o nome main this string ao Quando você importa um script
para outro script, como se importássemos esse
script de outro script, esse script receberá
o nome de um ponto py do script. Mas quando você executa
esse script, Python atribui o nome
underscore underscore, main score underscore o
Python atribui o nome
underscore underscore, main score underscore. Então, o que acontece é
isso? Nesta linha, dizemos que o nome I é igual ao principal e, em
seguida, ao redor do aplicativo Isso é verdade quando executamos
o script como fizemos aqui. Mas se importássemos esse
script de outro script, essa linha aqui
não seria executada. Então, isso nos
permite ter controle sobre esse script
usando essa linha aqui. Então temos essas duas linhas. Este é um decorador. Agora, a saída
que essa função produz será
mapeada para essa URL Então, se quiser, você pode
alterar esse URL para isso, por exemplo, salvar o script. Claro, você precisa de um URL aqui. Salve o script, execute e vá
para o host local, recarregue. E desta vez você
receberá um erro. O Python não conseguiu encontrar esta página, mas conseguiu encontrar a página sobre Sim, é isso mesmo. Se você ainda quiser a página inicial, adicione outro decorador e outra função logo
após o Então, saia com esta
página inicial e diga página inicial. Aqui. Salvar. Novamente, temos um
erro porque
não podemos ter funções
com o mesmo nome. Então, podemos mudar isso para um bot. O nome não importa. Então, isso não precisa ser o
mesmo com este. Clique em Salvar no script novamente. E acesse o site.
Isso está funcionando. Experimente a web na página inicial.
Isso também está funcionando. Se você quiser mudar alguma coisa, digamos que, sobre o conteúdo, clique
aqui, você salva o script. E o aplicativo web será reiniciado
sozinho para que você não
precise fechá-lo e executar o script
novamente, como fiz anteriormente. Se você receber um erro como o que
recebi anteriormente, o
script será interrompido. Mas se tudo estiver certo, você não receberá um erro, então tente novamente. página inicial está boa.
A página Sobre também está boa, e com o novo conteúdo. Então é só isso.
Na próxima aula, você aprenderá como
retornar um modelo HTML,
um arquivo HTML usando
suas funções do Python Isso lhe dará todo o poder publicar o
que quiser em seu site e não apenas tocar cordas, como
fizemos nesta palestra Então, nos vemos
na próxima palestra.
153. Preparando modelos HTML +: Bem-vindo novamente. Nesta palestra, você aprenderá a gerar páginas
HTML usando
seu Python Na aula anterior,
simplesmente retornamos algumas strings
simples,
como você pode ver aqui, então
retornamos uma Agora, retornaremos um modelo
HTML aqui. Para fazer isso, precisamos usar o método de modelo de renderização
da biblioteca Flask E o que o modelo de renderização faz
é acessar um arquivo HTML, armazenado em algum lugar em nosso aplicativo
Python , em nossos arquivos Python e, em seguida
, exibir esse
HTML em todas as Então, precisamos
substituir isso pelo nome de uma página HDML,
digamos, home dot HTML E esse nome aqui,
esse nome
de arquivo deve refletir um arquivo HTML real, que deve ser
armazenado em uma pasta, que por sua vez
deve ser chamada de modelos. Portanto, certifique-se de usar esses nomes
ao criar uma pasta. Dentro da pasta,
você precisa criar um arquivo HTML, home dot HTML. E o nome deve
refletir o nome que você está retornando aqui no método de modelo
Eder É isso mesmo. E aqui é onde
você escreve o código HTML agora Se você já conhece HTML, isso deve ser tão
fácil quanto respirar. Se você não sabe, então
deve ser fácil de aprender. Se você conhece um pouco de Python agora
, aprender
HTML é muito fácil Então vá em frente
e aprenda um pouco de HTML. É muito fácil. De qualquer forma, vou criar um arquivo HTML aqui. Tudo começa
com uma declaração
do tipo de documento, HTML. Então você tem as tags HTML. Havia uma etiqueta de abertura
e você também tem uma etiqueta de fechamento. É isso mesmo. Você tem etiquetas corporais. Assim mesmo, e aqui está o conteúdo
da sua página da web. Digamos que eu queira um
título como esse. E aqui dentro, você
pode colocar algum texto. Minha página inicial, por exemplo. E aqui está outro tipo
diferente de tag, que é uma tag de parágrafo, e digamos que este seja um site de teste. Clicksaf e, sim, você
deve estar pronto para ir. Acesse seu script,
certifique-se de salvá-lo. E a web está reiniciando, e eu vou agora
visitar minha página inicial Esta é a página do bot. Esta
deve ser a página inicial, como Parece que tenho um pequeno erro de
digitação aqui, eu acho. Sim, esta deve ser a
primeira página como tag de abertura. Clique em Salvar e você não precisa ler o script Python Basta ir aqui e recarregar a página. E esse é um texto normal agora. Então, este é um parágrafo, e esse é o título Ótimo. Portanto, também podemos ter outra
página para a página Sobre. Se você quiser duplicar isso
rapidamente,
fale sobre minha página Sobre Aqui, este é um site de teste. Novamente, assim,
você acessa seu script um e altera para renderizar o modelo, e aí você passa
o HTML de pontos. Clique em Salvar, vá para
o host local. Essa deve ser a página inicial. Você tem a página Sobre. Sim, minha página Sobre. Este é este site
novamente. Então, é isso. É assim que você passa
modelos HE Mel para seu aplicativo web
Python e é assim que você
os mapeia para seus Vamos seguir em frente e depois
para a próxima palestra.
154. Adicionando um menu de navegação do site: Ok, nesta palestra,
continuarei trabalhando no site E, especificamente, adicionarei um menu de navegação para que o usuário possa
navegar facilmente pelas páginas. Deixe-me ilustrar
a ideia primeiro. Em primeiro lugar, gostaria de
executar o que temos até agora. Então, o script Python 1. Portanto, o aplicativo está em execução. E se você acessar seu
navegador, host local, a porta padrão é 5.000,
e esse é o site. E também temos duas páginas aqui. Sobre a página. Bom. Então, sobre a página e a página inicial. Agora, o que eu vou construir
nesta palestra é essa coisa
aqui. Eu tenho uma captura de tela Então, a página inicial, a página Sobre, página inicial, a página Sobre Então, o que temos é um menu de
navegação aqui, que se você clicar em um
desses textos aqui, você vai para a página específica. E também temos um título e algo que você
deve observar agora, o que é importante
observar é que essa parte aqui é a
mesma nas duas páginas. Isso significa que
adicionaremos essa parte aqui, o código dessa
parte na página HML Como isso soa? Bem, isso não parece muito inteligente para mim. Uma maneira mais inteligente de fazer isso
seria criar uma página HTML separada
para essa parte aqui
e, em seguida, vincular a página A e a página inicial
a essa página Então é isso que
faremos nesta palestra. Portanto, precisamos ter o código HTML para esse cabeçalho e
o menu de navegação. E eu já tenho esse código, então não vou
digitar todo o código HTML. Aqui. Tudo bem Mas vou explicar para você o que
o HTML faz. Então, primeiro de tudo, eu gostaria de clicar
duas vezes nele e mostrá-lo localmente. Então, não estamos executando isso em
um servidor, clicamos duas vezes nele. Portanto, temos o cabeçalho aqui e o menu de navegação, no
qual, se
você clicar, não vai a lugar nenhum porque ainda não
vinculamos o layout dessa página HTML
a A e à página inicial. E como você pode ver, coloquei isso dentro da pasta
de modelos. Portanto, cada página HTML vai
para a pasta de modelos. Então, o que temos aqui é que temos a
declaração do documento e temos as tags HTML no fechamento aqui. Então, temos um elemento de cabeçalho, que contém DF aqui E usaremos
esse nome de classe mais tarde para nos referirmos ao nosso código CSS. Então, temos uma função
aqui que diz URL quatro. E o que isso faz é acionar a função home,
a função Python.
Que temos aqui. Então, essa aqui, essa função
será acionada quando o link inicial for
clicado pelo usuário Então, esse aqui. E
o mesmo para o laboratório. Então, quando o usuário clicar em sobre, a função Python
será executada e o arquivo HTML sobre esse arquivo HTML será renderizado por meio do Então, espero que isso esteja claro. Se você é preguiçoso como eu, não quer digitar todas as
linhas desse arquivo, você pode encontrar esse arquivo
na seção de recursos, que fica à
direita da tela Agora, precisamos
descobrir uma maneira de vincular esse arquivo HTML de layout
à página inicial e às páginas HTML
acima. Voltarei rapidamente à
aparência da página. Então, como você vê aqui,
temos o cabeçalho, e logo abaixo do cabeçalho,
temos a página HTML A. Então, só aqui. Isso significa que,
logo abaixo do cabeçalho, inseriremos um
código que será vinculado
à página HTML de ponto inicial ou
à página HTML de ponto dependendo do que
o usuário clicará. E então temos uma divisão
aqui, fechando-a. E vou dar a ela um nome de classe para que eu possa me referir
posteriormente ao código CSS. Então você tem colchetes encaracolados. Então isso é uma sintaxe, e você também precisa usar o
sinal de porcentagem lá Em seguida, você escreve a tag do bloco e dá um
nome ao bloco. E o que estamos fazendo aqui é na verdade, herança de modelos Portanto, a página HTML de pontos de layout, que estamos
modificando agora, é um modelo básico O modelo secundário será a página HTML de ponto inicial ou
a página HTML sobre pontos E esse modelo infantil
preencherá esse bloco aqui. Também há outra linha dentro dos colchetes e sinais de
porcentagem Essa é a palavra-chave end block, que indica o
final do bloco. E terminamos com
o layout da página HTML. O que vou fazer aqui é ir até Panes e dividir
a janela à direita Então, eu tenho a
página HTML de pontos do layout aqui, feche-a aqui. E eu vou para o
home dot HML agora. E como esse
será um modelo
secundário, não preciso da declaração
aqui e da tag HTML, nem mesmo
da tag body. Vou substituir isso por um DIV. E digamos que classe seja igual Início, feche-a aqui
e exclua essas duas E o que você precisa fazer agora é usar a
sintaxe de modelagem novamente, dessa
forma, e usar
a palavra-chave extends E então você declara
o que deseja estender. Crie o layout desse arquivo HTML. Então você também precisa de outra linha. E aqui você precisa especificar
o nome do bloco. Então, isso precisa corresponder
a este aqui. E então, o que está acontecendo aqui? Bem, vamos
ao script do script Python. O que acontece é que quando
o usuário visita essa URL, seja, a página inicial ou
esta, digamos esta, Python
executará a função inicial porque a
função inicial é mapeada para essa URL
, e a função inicial
renderizará o modelo HTML de ponto
inicial Então, o Python irá para
a página HTML do ponto inicial e verá que a página HTML do ponto inicial
estende o HTML do ponto inicial Então, esse aqui. Então, o que
ele fará é enviar esse código
neste bloco aqui
e, em seguida, essa página será
renderizada na URL inicial Então, tão simples quanto isso, o
usuário verá o layout dessa página HML com
seu conteúdo secundário Então esse é o modelo base,
esse é o modelo filho. E também temos outro
filho neste caso, que é sobre esse HML Então deixe-me trazer isso aqui. E vou copiar isso eu coloquei isso aqui,
e isso também. Controle C e você. Certifique-se de ter salvo
todos os arquivos e este. Sim. E vamos dar uma olhada
se o aplicativo está em execução. Sim, parece ao vivo. E eu vou para a página inicial.
Sim, parece bom. Temos em casa e em. Vamos falar sobre tinta. Sim. Parece que
perdemos o rumo aqui. O formato dessa linha, vamos dar uma
olhada na página ab. Sim, esqueci de
fechar o Div aqui, salvar novamente, acessar o navegador, recarregar e está tudo bem Então é só isso. Espero que as coisas estejam funcionando do seu lado. Caso contrário,
sinta-se à vontade para fazer uma pergunta ou até mesmo verificar meus arquivos, que estou colocando na seção de
recursos à
direita da tela. E sim, acho que nosso
aplicativo está pronto para mais. Então, vamos seguir em frente e nos
vemos na próxima palestra.
155. Melhorando o front-end do site com CSS ++: Ótimo. Nós
progredimos bastante Temos um
script Python que gera Flashcap e
temos duas funções E cada um deles mapeia duas páginas HTML para
dois URLs diferentes E este é o nosso site
com duas páginas da web. Nesta palestra,
adicionaremos alguns estilos CSS a
este site para que se pareça com qualquer
outro site moderno, seja visualmente atraente e não tenha a
aparência Tudo bem. Para fazer isso, temos que
fazer basicamente duas coisas. A primeira coisa é
que precisamos criar um arquivo CSS e escrever
o código CSS dentro dele. E a segunda coisa é que,
uma vez que escrevemos esse código CSS, uma vez que temos o arquivo CSS, precisamos vinculá-lo a partir do
nosso arquivo HTML de pontos de layout. CSS é um HTML CCS. Então, se você não
conhece, sugiro que dê uma olhada em alguns tutoriais e tenho certeza de que você se
acostumará com o CSS muito rapidamente Eu já tenho um arquivo CSS
que estilizará meu site. Vou cortar isso e
colocá-lo em uma pasta que
chamarei de estática. Aqui dentro, vou criar
outra pasta e chamá-la de CSS, e vou colar o
arquivo CSS aqui dentro. Então, deixe-me fechar isso. Como você pode ver, a pasta
que eu criei e o arquivo foram refletidos na visualização em
árvore aqui dentro do atom. Portanto, a ideia é que o
Python procure arquivos
estáticos
na pasta estática Então, aqui dentro da pasta estática, você pode colocar arquivos diferentes. Por exemplo, se você quiser
adicionar uma imagem ao seu site, crie uma pasta
aqui chamada Imagens
e, em seguida, coloque as imagens
dentro dessa pasta. Em seguida, você pode vincular esses arquivos
estáticos
a partir da página HTML do layout ou
de qualquer outra página. Agora, antes de abrir o arquivo CSS e examiná-lo rapidamente, gostaria de mostrar como você
pode vincular ao arquivo CSS. Agora, lembre-se de que a parte
visível de um código HTML está
dentro do corpo do texto, enquanto links para arquivos
JavaScript ou
links para arquivos CSS saem dele. E esses devem ser
colocados dentro das etiquetas de cabeça. Então vá aqui e vá para lá. E então temos uma tag de link. E o L aí significa
o relacionamento. Portanto, o relacionamento com
o arquivo ao qual estamos vinculando
é uma folha de estilo Então, estamos meio que declarando o tipo de
arquivo ao qual estamos vinculando Portanto, é uma folha de estilo CSS
e, em seguida, temos a
referência aqui que será igual à função URL quatro,
que toma como argumento o que toma como argumento nome
da pasta
onde o arquivo
está localizado e o parâmetro do nome do arquivo, que é igual ao
CSS main dot CSS Então, o que temos aqui é declarar o tipo
de arquivo ao qual estamos vinculados
e, em seguida, colocamos o
link do arquivo E isso deve estar
entre aspas. Então, tudo isso. E eu também gostaria de adicionar
um título para o site,
digamos, o aplicativo Flask É isso mesmo. Vou guardar isso. E eu vou
experimentar o site. Uau. Você consegue ver
a diferença? Sim. Temos o menu
aqui muito bem. Sobre a página, página inicial, e
temos o título aqui. E então o conteúdo da página
da web vai aqui. Agora, todas essas barras aqui,
a cor de fundo, os preenchimentos, tudo isso
foi definido usando CSS Então, vamos dar uma
olhada no código CSS. Isso é. Eu acredito que isso é bastante
autoexplicativo. Mas de qualquer forma, o que
temos
é basicamente um elemento HTML, então o corpo está aqui. E quando escrevemos o
elemento HTML no script CSS, usamos colchetes
e, dentro dos colchetes,
definimos definimos Então, a margem, a pintura e a família da fonte do texto e a
cor do texto. Se você quiser alterar
isso, digamos 999, salve e vá para o recarregamento da
página da web, você verá que o texto
tem Então, isso é bastante medíocre. Isso significa que esse
atributo aqui está afetando o
corpo do site. Vou colocar isso de volta
em quatro para quatro. Então você tem o elemento de
cabeçalho, que é responsável
por esse cabeçalho aqui. Então, no topo. Então, se você quiser estilizar uma parte específica
da sua página da web, digamos, apenas o logotipo, que é este
aqui, você teria se
referir
primeiro ao cabeçalho e depois
ao elemento agon e depois
à classe do logotipo Então, esse é o
nome de uma classe que está aqui. E assim por diante, você pode ver esse código no
seu próprio ritmo, eu acredito. Então, a lógica é a mesma. Ótimo. E agora estamos prontos para implantar este site on-line
na nuvem. Então, faremos isso nas
próximas palestras. Te vejo.
156. Criando um ambiente virtual em Python: Portanto, temos um site em funcionamento,
que parece muito bom. O problema é que isso
está em nosso host local. Então, a única pessoa
vendo isso é, sim, você ou alguém que tem
acesso ao seu computador. Então, o que queremos fazer
em vez disso é implantar este site no
servidor web ou na nuvem, como faremos neste curso. E usaremos
a nuvem Hogu. Heroku é um serviço
que permite implantar aplicativos
Python boa notícia é que você pode
implantar um aplicativo gratuitamente e também pode ter seu
domínio público gratuitamente. Embora você precise de um subdomínio
de Heroko, algo
como, digamos, como, digamos No entanto, se seu site tiver muito
tráfego posteriormente, você deve realmente
atualizar seu plano e
comprar mais largura de banda A implantação no Heroko
é relativamente fácil. Você não precisa pensar e fazer nenhum trabalho administrativo, então um Heroko economiza muito
tempo e esforço para que você
possa se concentrar na programação em
vez das partes do servidor antes de usar o Heroku, No entanto, antes de usar o Heroku, precisamos fazer Há algo que
deveríamos ter feito desde o início
desta seção. Portanto, mesmo antes de escrever
qualquer arquivo aqui, o que você deve
fazer é criar um
ambiente virtual isolado de seus outros arquivos e da instalação principal do
Python Então, para executar nosso aplicativo, usamos Python, que
vem da nossa instalação
principal Então esse aqui,
os que eu tenho aqui. Isso não é uma boa prática. Uma boa prática é realmente
ter uma
instalação limpa do Python, que é usada somente
para seu aplicativo Portanto, nessa instalação, você não quer que as
bibliotecas instalem bibliotecas que você não precisa para criar aplicativos FLASK Portanto, precisamos criar
um ambiente virtual. E aqui, eu vou te mostrar
como você pode fazer isso. Para criar um ambiente virtual, você precisa usar uma biblioteca Virtual
F Python E para usar a biblioteca Virtual
Python, você precisa instalar o
Virtual F. Então, o PIP instala Virtual NV, então estamos usando a instalação principal do
Python aqui para instalar o você precisa instalar o
Virtual F. Então, o PIP instala o
Virtual NV, então estamos
usando a instalação principal do
Python aqui para instalar o Virtual ENV. Ótimo. Isso foi instalado
com sucesso e agora vamos criar
um ambiente virtual. O ambiente virtual
deve ser criado
no mesmo nível da pasta principal que contém
os arquivos do aplicativo. Então, se formos ao nosso diretório, aqui é
onde estão os arquivos. E o que vou fazer é criar uma pasta principal aqui
e chamá-la de meu site. E eu vou fechar o átomo por um tempo. E isso entraria dentro
disso. Então, só aqui. E agora você pode abrir o atom
neste diretório porque
é aqui que criaremos
o ambiente virtual. Então, vamos abrir a linha de
comando agora e estamos prontos para criar
um ambiente virtual. E para fazer isso, você deve usar uma biblioteca Visual M
dizendo Python O argumento, então você tem Vn, que é o nome da
biblioteca do módulo E aqui está um argumento
que permite
ao Python localizar módulos para
execução como scripts Em seguida, você precisa especificar um
nome para a pasta em os arquivos do
ambiente virtual
serão que
os arquivos do
ambiente virtual
serão armazenados, para
que isso funcione. Vamos ver se a
pasta virtual foi criada. E o ambiente foi
criado com sucesso. O que temos aqui é uma
instalação isolada do Python
e, dentro dos scripts, você verá que tem
Python Aqui está. Ok, não
se preocupe com isso. E aqui está a PIP também. Então pip dot. E isso significa que você pode usar esse
Python se quiser Deixe-me experimentar. Então,
agora estamos no diretório Mside Isso significa que precisamos nos referir
às criptas virtuais e ao Python. E isso acionará nosso
novo Python no console. No entanto,
não estamos interessados em
realmente executar o Python a
partir da prateleira Então, vou simplesmente sair disso. Em vez disso, o que estamos interessados é realmente executar o aplicativo FLASK usando a nova instalação
do Python Mas antes de fazermos isso,
precisamos realmente
instalar o Flask em nosso Visual
Python, se você quiser E para fazer isso, você precisa usar
a biblioteca PIP do
seu Python isolado Portanto, você precisa apontar para
a pasta virtual, para
a pasta do script e
depois para instalar o Flask pelo PIP E então o FASC está instalando e
também instalando suas dependências E devemos estar prontos para ir agora. Então, vamos executar nosso aplicativo web usando nossa nova
instalação do Python Para fazer isso, você precisa
apontar para o novo Python
e aquele para demonstração, porque estamos no meu site
agora, como você vê aqui, então o
script de barra invertida Demo Isso deve funcionar. Ótimo. E se você acessar o site agora, verá
que está funcionando bem. É isso mesmo. Agora você está
mais do que pronto para implantar seu
aplicativo FASC na nuvem, e faremos exatamente isso
na próxima palestra E eu gostaria de mencionar novamente
que, por favor, tenha
em mente que você deve sempre criar
um ambiente virtual antes de criar seu aplicativo
FLASK Portanto, antes de escrever qualquer código, você deve usar uma nova
instalação do Python
157. Como usar o serviço PythonAnywhere: Olá, bem-vindo a uma nova
palestra sobre como
implantar seu
aplicativo web Flask em um servidor ativo, que significa que
você terá seu próprio nome de domínio, que pode ser fornecido a qualquer pessoa e que
eles poderão usar seu aplicativo web E vamos
usar o Python Anywhere. Então acesse python ware.com. O Python Anywhere
tem um serviço gratuito onde você pode hospedar seus aplicativos
FLASK Então é isso que
vamos fazer, e é relativamente fácil de
implantar em Python em qualquer lugar Então, este é um
vídeo atualizado, na verdade, é claro. Antes disso, usamos o Heroku. Agora, o Heroku e o Python
Nware permitem que você hospede e implante
aplicativos FLASK A diferença é
que o Python Aware tende a ser mais fácil E o Heroku, por outro
lado, torna isso mais difícil. Então, eu geralmente sugiro
que, como programador, você queira se concentrar em
seus códigos em vez de lidar com problemas de
administração do servidor Embora eu também
queira dizer que tanto o software Hiroko quanto o Python
são relativamente fáceis em comparação com se você tivesse seu próprio servidor, onde
teria que Ainda assim, o Hoco e o
Python Aware facilitam as coisas. Para poder implantar
seu aplicativo web FAS em Python em qualquer lugar, você
precisa se inscrever em uma conta Então vá para Preços e cadastre-se, e você quer encontrar
a seção onde você pode criar uma conta de iniciante,
pois ela é gratuita E eles também têm
outros planos pagos. Portanto, se você tiver mais visitantes, precisará fazer o upgrade
para uma conta paga. Então, vou
criar uma nova conta. Tudo bem, então eu me inscrevi e
meu nome de usuário é Ardit 12345. Esse é meu nome de usuário e
este é um painel. Agora, em Python em qualquer lugar, além de implantar aplicativos web, você também pode fazer
outras coisas Então, antes de implantarmos o aplicativo web, deixe-me fazer um breve
tour sobre o Python Basicamente, você deve conseguir
ver o menu do painel aqui
e, em seguida, temos os consoles. Nos consoles, se você
for aos consoles,
basicamente, poderá
criar um console Bash E isso lhe dá acesso ao seu próprio servidor onde
você implantará seu aplicativo web, e você também pode
fazer outras coisas , como
iniciar o Python 3 E isso inicia essa
versão do Python. Portanto, é um Python interativo você pode até importar
algumas bibliotecas aqui, então o Pandas já está
instalado, você pode A desvantagem disso é que você não tem uma interface
gráfica de usuário Então, se você quiser mostrar para gerar alguns gráficos e
quiser vê-los, isso não é possível em
Python em nenhum lugar porque
tudo o que você tem é Então, o shell do Python e você
volta para o terminal. E, por exemplo, com o PWD, você pode ver onde
está atualmente Então essa é a sua localização
no servidor. Então você está dentro de casa, depois dentro do 20 2345, seja, aquela pasta
da pasta inicial Aqui você também pode
criar arquivos Python,
por exemplo, Nano
example Nano é um editor de texto, que você pode usar nesse tipo de interface de linha de comando Então, isso criará um novo arquivo, e aqui você pode escrever código
Python, como imprimir Olá. Parêntese.
Agora, para salvar esse arquivo, o que você quer fazer
é seguir esses comandos. Então saia. Você deseja sair com o Controle X. Então, pressione o Controle X. Você verá esta mensagem Diz, salve o buffer modificado, o que significa que você
deseja salvar este arquivo? Y para sim ou N para não. Então eu vou pressionar Y, e então ele pergunta novamente qual nome você quer
colocar no seu arquivo? Exemplo de ponto PY S, sim. Então, basta pressionar Enter. Entre e o arquivo
será salvo. Para executá-lo. Você faz o Python 3.9. Exemplo de ponto PY, execute e
você obterá a saída. Então é isso que você pode
fazer com o console. Se você voltar, então
você tem esses arquivos. E aqui agora você pode
ver que o exemplo de PY, que criamos
anteriormente, está aqui. E você vê o diretório
atual, então um home Rit um, dois, três, quatro, cinco, é um diretório. Estávamos na interface da
linha de comando. Então, essa é outra
maneira de criar arquivos. Então, se você quiser
criar um arquivo aqui, dê um nome aqui. Digamos o exemplo dois
PY e vá para Novo arquivo. E digamos que aqui estou impresso. Olá de novo. E agora você
também pode executar esse arquivo, salvá-lo e executá-lo a partir daqui. Então, salve-o primeiro e
vá até o botão Executar. E você deve ver
a saída aqui embaixo. Isso é um pouco
mais lento do que a maneira anterior executar
o aplicativo
para executar arquivos Python Mas de qualquer forma, essa é a saída. Então, essa é outra maneira
de executar arquivos Python. Se quiser voltar agora,
você pode pressionar aqui. Portanto, esta é uma página de arquivos
e, em seguida, temos a web. É aqui que
criaremos um novo aplicativo web, mas na próxima palestra. Então, temos tarefas com tarefas. O que você pode fazer é
inserir aqui o caminho de um dos seus arquivos Python em qualquer lugar do
Python Por exemplo, se eu quiser
dar o caminho do exemplo PY, direi home.r1,
dois, três, quatro,
cinco, o diretório
e o E então defina um horário. Vou definir um horário aqui
no sistema de horário UTC. Esse script então
seria executado naquele
horário todos os dias. Isso pode ser útil
para coisas como web scraping. Se você quiser criar um script em um determinado
horário todos os dias, você também pode fazer isso em
Python Por fim, temos um banco de dados. O menu aqui é onde você
pode criar um banco de dados. Então, se seu aplicativo web tem um banco de dados onde
salva os dados, você deseja criar
um novo banco de dados aqui e, em seguida, criar uma
tabela para esse banco de dados. Novamente, você pode fazer isso nessa interface
aqui em bancos de dados
e, em seguida, seu aplicativo web
poderá interagir
com esse banco de dados. Então, essa foi uma introdução
ao Python Anywhere. No próximo vídeo, vamos
implantar nosso aplicativo Python, ou
seja, nosso flash em Python em qualquer lugar.
Te vejo.
158. Implantando o aplicativo Flask no PythonAnywhere +: Bem-vindo de volta. Estou empolgado
em mostrar agora como implantar seu aplicativo web
no Python Então, esta é minha conta do Python
Anywhere, e eu estou na
seção do painel atualmente Você quer acessar a
web e criar um novo aplicativo web e recebe esta mensagem aqui. O Python em qualquer lugar permite que você
saiba que você não pode ter
um nome de domínio personalizado,
digamos, ardit.com, porque
essa é Se você quiser um nome de domínio
personalizado, pague para obter
uma das contas pagas. Primeiro, porém, você quer encontrar um provedor de domínio para
comprar um nome de domínio. Então, se você quiser comprar o nome de
domínio example.com, por exemplo, você gostaria de ir
para talvez o name chip O chip de nomes é, eu acho, o
melhor para obter nomes de domínio. Então, nomeie chip.com e, uma vez
que você compre um nome de domínio lá, chip de nomes
fornecerá alguns nomes de DNS, e esses nomes você
precisa colocar aqui em um
Python em qualquer lugar para
conectá-los à sua web. No entanto, não
estamos fazendo isso Para nosso propósito,
basta ter esse tipo de nome de domínio, que é, no meu caso,
esse aqui. Então Rs um, dois, três, quatro, cinco, dot Python
Anywhere, dot Portanto, este é um subdomínio do
Python aware.com . Pressione em Avançar. E você tem várias opções. O que queremos é o FLASK, para que você possa implantar diferentes tipos de
aplicativos web em Python em qualquer lugar Nós pressionamos FLASK, e o
Python 3.9 está pronto.
Então, continue aí. E agora esse é o
ponto de entrada do aplicativo Flask. Por ponto de entrada, quero dizer, o arquivo que você
executa para iniciar o aplicativo FLASK Então, no nosso caso, é
script one dot PY. Esse é um arquivo que executamos
com o script Python PY. Portanto, não mude isso,
deixe como está. Então, pressione Avançar por enquanto. E o aplicativo foi criado, mas precisamos adicionar
nossos arquivos ao nosso aplicativo. Então, para isso, você quer
ir ao menu de arquivos. E agora aqui à esquerda, você pode ver meu site. Se você clicar lá, verá o arquivo
que o Python Anywhere criou Então esse é o ponto de entrada de
que eu estava falando, o aplicativo
Flask Underscore que é Você deseja clicar aqui e
excluir esse código e colar, copiar seu próprio código e colar seu código lá
e pressionar em salvar. Então você pode ver agora que
estamos nesse diretório. Então corte O R o
um, dois, três, 45. Então, seu nome de usuário MySite, fA FAS Underscore app
that PY é nosso arquivo Então, se você clicar no meu site, você volta para o
diretório raiz do seu projeto. Então esse é o diretório raiz
do Python Anywhere, e esse é o diretório raiz
do nosso projeto local Então, escreva um script em que o PY está lá
e, em seguida, ele tem
uma pasta estática e uma pasta de modelo no
mesmo diretório raiz. Portanto, neste diretório raiz do
Mist, queremos criar
uma pasta modelo Então, escreva modelos lá
e pressione em novo diretório. Isso criará uma
nova pasta de modelos. Você vê que agora ele mudou
para esta pasta. Então, se você voltar para o meu lado, verá
que os modelos foram adicionados
no aplicativo de
sublinhado Flask do diretório e também na mesma pasta, meu site E também queremos criar
uma pasta estática vazia. Novo diretório, pressione esse
botão e ele deve criar
uma pasta estática. Então, volte para o meu lado. Você vê a estática e os
modelos estão lá agora. Portanto, precisamos adicionar
nossos arquivos estáticos. Então, pressione em estática. Você está em static dentro de
static agora e deseja fazer o upload do principal que é CSS, mas espere, isso está
em outra pasta. CSS é a pasta, então você deseja criar
dentro da estática. Você deseja criar
um diretório CSS. Pressione em novo diretório. Certifique-se de estar
nesse diretório,
para que meu site corte barra
estática CSS E aqui agora queremos
fazer o upload do arquivo. E esse arquivo é esse Css principal. Então aqui estou. Este é o diretório do projeto
com nossos arquivos locais. Em Static em CSS, temos o Dot Css principal. Clique duas vezes e ele
será carregado dentro do CSS. Em seguida, volte ao meu site, acesse os modelos e faça o upload. Os arquivos que estão
dentro dos modelos, que são sobre HTML de ponto inicial, e o terceiro, HTML de ponto de
layout. Esses três são modelos
internos. Portanto, verifique se eles estão
dentro dos modelos. Em seguida, volte ao meu
site e dê uma olhada se está tudo
bem. Parece bom para mim. Uma mudança que você também quer fazer é
acessar seu aplicativo
e, quando seu aplicativo
estiver em produção, altere
isso para false. Portanto, você não quer mostrar erros de Python
aos visitantes pois isso pode tornar
seu aplicativo propenso a hackers Porque pessoas ou hackers verão os erros do seu aplicativo. Eles podem entender
como seu aplicativo da web está estruturado e você
também pode expor dados que não
deseja expor nas mensagens de erro de depuração
que Então, falso e presente seguro, agora estamos
prontos para ver nosso aplicativo, mas depois de
recarregá-lo com esse botão Então, na seção web, pressione e recarregue
esse botão para obter a versão mais recente
dos arquivos
servidos pelo
Python E então você quer
clicar nesse URL. Então essa é a URL do meu aplicativo, pressione lá e
meu site está online. Então, está funcionando muito bem. Espero que o seu também esteja funcionando. Caso contrário,
você deve voltar para a seção
da web, rolar para baixo
e localizar esses registros de erros. Se você pressionar aqui,
verá
os erros mais recentes que
recebeu do seu aplicativo da web. Então, esses são erros do Python e tente lê-los para
entender o que está acontecendo Se você não os entender, sinta-se à vontade para postar uma
pergunta nas Perguntas e Respostas, mas certifique-se de copiar e
colar esses erros lá e também o
código do seu aplicativo web, e ficaremos felizes em ajudá-lo Muito obrigado. Falarei com
você nos próximos vídeos.
159. Introdução à biblioteca do Tkinter: Olá, bem-vindo a esta
nova seção do curso. Nesta seção, você
aprenderá a
criar interfaces gráficas de usuário com o Python E, especificamente,
vamos usar
a biblioteca Tkinter para Portanto, nesta seção,
você não
criará nenhum programa do mundo real. Vou apresentar a biblioteca
Tkinter e, é claro,
criar uma interface gráfica de
usuário, um pequeno programa que pode ajudar
você a começar a usar o Tkinter Então, na próxima
seção, quando terminarmos esta seção
na próxima seção, você aprenderá como
interagir com
bancos de dados com Python Então, usaremos o
Python como um invólucro do código
SQL para que possamos armazenar dados em um
banco de dados, consultar dados, excluir e assim por diante Então essa foi uma seção
depois desta. E então, na primeira seção
após essas duas seções, vamos criar
um programa do mundo real. E esse programa
é esse aqui. Então eu a chamei de livraria, e o que isso faz
é permitir que você armazene informações do livro
em um banco de dados Essa é uma interface gráfica de
usuário. Portanto, esse programa é
feito em duas partes. Você tem uma interface gráfica de
usuário, que é a janela de botões, chamada Widgets E isso foi construído com o Tkinter. E então você tem o back-end, que consiste em código que se comunica
com o banco de dados Por exemplo, se
pressionarmos o botão de visualização, estamos adquirindo o banco de dados para carregar todos os livros para nós Oh, nós temos o título. Então, se você pressionar um deles, obterá o título aqui, o autor e o
ano do livro. E também o número
de identificação do livro
, chamado ISBN. Você também pode
pesquisar uma entrada. Portanto, se você quiser
pesquisar um autor, escreva o nome do autor, Ni e pressione Pesquisar. E se você quiser adicionar uma entrada, basta digitá-la. E sim, algo parecido. Adicionar entrada. E se
você carregá-los novamente, sua entrada deve estar aqui. Então isso é um programa.
Vamos construir duas seções
depois desta. Então, deixe-me encerrar esta aqui
e, na próxima palestra, apresentarei a biblioteca
do Tinder Então, vamos criar algumas interfaces simples
com alguns widgets Nos vemos
na próxima palestra.
160. Criando uma janela de interface gráfica e adicionando widgets: Então, vamos lá. Eu
abri o Atom aqui, então vou usar o Atom para criar o
programa da livraria, por assim dizer, que usa kinder e Aquia
Light three Então, vou continuar e criar
um novo arquivo Python aqui. Que roteiro. Torta ganhada. Agora, para criar
interfaces gráficas de usuário com o Kiner, você precisa da biblioteca inter e não precisa instalá-la porque o Tkinter é uma biblioteca Python integrada Então, tudo o que você precisa fazer
é importar o Tkinter. Se você estiver no Python dois, isso seria com at
T. No Python três, Tkinter simplesmente assim Uma boa prática, no entanto, é
realmente importar tudo do Tkinter Então, do Skiner importe
tudo Então, por que fazemos isso? Fazemos isso porque
vamos usar muitos
objetos Tkinter em nossos scripts Portanto, faz sentido simplesmente
carregá-los todos em vez de referenciá-los com o botão de
pontos Tkinter, Em vez de fazer isso,
podemos simplesmente dizer botão, inserir os
parâmetros e assim por diante. Então, deixe-me criar uma interface
gráfica de usuário. Agora, o programa da Kinter é
composto por duas coisas principais. Você tem a janela e
os widgets. Então, por exemplo, a janela é todo esse programa
que você vê, e então você tem botões
e coisas assim,
que são chamados de widgets Então, primeiro de tudo, você
precisa criar a janela. E eu gosto de chamar
minha variável de janela, e isso seria
igual a decair É isso mesmo. Isso criaria
uma janela vazia para nós, mas precisamos fazer
algo mais aqui. Dizemos janela nesse loop principal. Isso é sempre necessário. Então abrimos uma janela,
criamos uma janela, e então tudo fica
entre essas duas linhas. Então você cria widges
entre esses dois. E isso é necessário porque,
se você não tiver isso, seu programa abrirá e fechará em uma
fração de segundo. Então, basicamente, isso permite
que
você realmente pressione o botão no canto da janela e
feche o programa. Portanto, isso deve estar sempre
no final do seu código. Vou salvar esse script
e executá-lo. E temos um erro,
diz que TK não está definido, então o Python não está reconhecendo essa função aqui
porque ela deveria ser T. E E esta é a janela, e ela não tem nada dentro, então vamos
adicionar um botão. Então, armazenamos a
janela principal em uma variável e vamos fazer
os mesmos quatro widgets Então, vamos
criar variáveis. Digamos que B um seja
igual ao botão. Portanto, o botão é uma função que gera um widget de botão A função bottom
usa alguns argumentos. Se você quiser obter uma lista
completa de argumentos, faça uma introspecção
do código Digamos que o IPython aqui. E da capa à importação. Puxe e, em seguida, digamos,
botão e um ponto de interrogação. E aqui você pode
ver quais parâmetros você pode passar para a função
inferior. Agora, o primeiro parâmetro que
você deseja adicionar ao widget é a variável da
janela da janela principal Portanto, você precisa informar ao seu widget, à janela, que o widget
também deve ser compactado Então, janela e então você pode passar parâmetros como o
que você vê aqui. Digamos que um dos principais
parâmetros seja o texto. Então, o texto é igual, digamos, à string execute Então esse é o texto, o rótulo que será exibido
na parte inferior. Agora, se tentarmos
executar esse script agora, você verá que ainda não
temos um botão, e isso porque não
especificamos onde
colocar essa parte inferior. Para fazer isso, você precisa
usar o método pack, que é um método de widget,
e depois executar novamente. E agora você vê o fundo. No entanto, há outra maneira de
realmente colocar seu
widget em sua janela Esse é um método de grade. Grade. E, muitas vezes, é uma questão de preferência
usar pacote ou grade. Mas a ideia da grade é
que, com o método de grade, você tenha mais controle
sobre a posição dos botões ou dos
widgets em geral, porque aqui você especifica a linha e a coluna em
que deseja colocar a parte inferior Então, tudo começa do zero. Assim, a primeira linha
tem um índice de zero, e a primeira coluna tem um
índice de zero e assim por diante. Na verdade, encontrei uma
ilustração para isso. Portanto, este é um programa mais gentil, e temos duas linhas aqui Então, temos essa primeira linha, que deve ter
um índice de zero, e você tem a segunda
linha, que deve ter um índice de um. E você tem colunas, então zero, um, dois,
três e assim por diante. E digamos que o botão OK, que é esse aqui,
teria uma linha de zero, um, dois, então dois para a linha, e então zero, um, dois, três, três
para a coluna. Então, você também pode ter widgets
que se estendem por mais de
uma linha ou coluna Nesse caso, você
adicionaria outro parâmetro
aqui chamado rowspan E isso seria
igual a um número. Digamos que se você colocasse o
botão se estenderia em duas linhas. No nosso caso, isso não é
necessário, na verdade, porque não temos
muitos widgets. Só
temos um botão. Então, deixe-me executar esse script agora e
ver o que obtemos. Então, obtemos um botão
que, na verdade, não faz
nada porque não
especificamos qual ação
executar quando você
pressiona o botão. E vou explicar isso
na próxima palestra. Mas, por enquanto, vamos adicionar mais
alguns widgets aqui, apenas para você se
familiarizar mais com os widgets Então, vamos adicionar um widget de entrada. E digamos que E E um para isso. Portanto, a entrada um é igual à entrada
e, em seguida, adivinhe qual é
o primeiro parâmetro E esse é o parâmetro da janela. E podemos deixar
assim por enquanto. E digamos que uma nota E 1. E vamos mantê-lo na
mesma linha e na coluna um. Salvar execução. E aqui temos uma entrada. Então, o que é uma entrada. Uma entrada é como uma área
em que você pode inserir um valor interagir com
esse valor em seu script. Então, digamos que você insira
quilômetros aqui e queira ter um botão que converta
esses quilômetros em milhas Assim, o botão obteria o
valor dessa área aqui e o
exibiria em outro widget, que poderia ser um widget de texto Então, vamos adicionar um widget de texto. Digamos que T um seja igual a janela de
texto, é claro. E digamos T um, linha zero
da grade, coluna dois. É isso mesmo. Executar. um widget de texto muito grande
porque o tamanho padrão, altura e
a largura padrão na
verdade, um número bem grande Portanto, precisamos especificar dois
parâmetros para o widget de texto. Precisaríamos colocar a altura. Digamos que uma célula
e a largura. Digamos 20. E então
essa é a área do widget. E esta é a entrada,
e esta é a parte inferior. E isso é tudo para esta palestra. Na próxima palestra,
mostrarei como dar
vida a esses widgets para que eles
possam realmente fazer alguma coisa.
Nos vemos na próxima palestra.
161. Como conectar widgets de GUI com funções ++: Olá, novamente, na palestra
anterior, construímos essa
interface gráfica de usuário com o Kiner E o problema é
que isso não faz nada por enquanto, então pressionamos isso, mas
não faz nada. Então, o que eu gostaria de fazer aqui, a saída final que
eu gostaria de ter é quando eu executo essa parte inferior, então temos uma entrada aqui. Podemos inserir o valor,
e eu quero executar este botão e obter milhas
aqui na área de texto. Então, milhas são como uma unidade de
1 quilômetro é igual
a 1 milha vezes 1,6 Então, se eu executar isso, quero que algo como 16
aqui seja gerado. Então, um programa muito simples. Observe que esse não é um
dos programas reais que
prometi criar
neste curso. Então, isso é só para você começar
a trabalhar com Kinder. Então, vamos fechar isso agora. E para que um botão
faça alguma coisa, precisamos adicionar um parâmetro de
comando aqui. Então, o parâmetro de comando assume uma função aqui como
argumento, como um valor. E então, quando você
pressionar esse botão, execute o botão, neste caso, a função que você tem
aqui será executada. Então, digamos que temos
uma função aqui quilômetros a milhas. Digamos que essa função, por enquanto, ela apenas imprima algum texto. Digamos que tenha sucesso, por
exemplo, porque você sabe
que, antes de escrever
seu programa real, é bom usar
declarações impressas para experimentar coisas. Isso permite que você
isole seus problemas. Se algo acontecer aqui, você sabe que não pode ter problemas com
uma declaração
impressa, mas se você tiver uma expressão mais
complicada aqui, fica mais difícil saber
se o problema acontece
aqui
porque você não está apontando para a função
correta ou se você tem um problema
com sua declaração. Portanto, é bom usar primeiro declarações
simples,
como a declaração impressa. Então você iria aqui e quilômetro 2 milhas,
essa é a função. E uma coisa que você deve
ter em mente é que você não
ultrapassa os colchetes aqui Portanto, essa não é uma chamada de
função usual. Você está apenas
se referindo à função aqui e deixando o
Python cuidar do resto Então, o nome da função
está aqui e vamos testar isso. Execute, e você verá que temos o sucesso
impresso aqui. Pressione novamente, sucesso, sucesso, sucesso. Então está funcionando. No entanto, não precisamos
imprimir o sucesso
na linha de comando. Queremos imprimir um
valor na área de texto. Agora, precisamos
examinar o widget de entrada. B aqui é de onde vamos
obter o valor, então o usuário
insere um valor
no widget de entrada, pegamos esse valor e usamos esse valor
em nossa função E para isso, existe um
parâmetro chamado variável de texto. E isso seria igual
a um objeto string var, que temos que declarar
mais adiante aqui Então, digamos que você queira um valor, então isso é variável, e
isso seria igual à função string var. E então apontamos para
E uma variável de valor, que acabamos de criar. Portanto, essa variável
obterá o valor
dependendo do que o usuário
inserirá no widget de entrada Então, podemos usar esse
valor o que quisermos. Digamos que queremos
imprimir isso em valor e também precisamos adicionar
algo extra aqui, que é um método get
do objeto string. Então, esse é um objeto especial. Não é uma string, uma string de reprodução em
Python. Para obter uma string
real desse objeto, precisamos aplicar o método G. Então salve isso e experimente o script. Digamos, dez aqui, execute, e obtemos dez
impressos no terminal. Então, ainda não conectamos essa string aqui
com um widget de texto Então, vamos fazer exatamente isso aqui. A ideia aqui é que precisamos
inserir um valor
no widget de texto E para fazer isso, o widget de texto tem um método chamado insert Portanto, você precisa se referir ao widget de
texto desejado. Então T one é nosso objeto de texto
e, em seguida, aplique o método
insert. E o método obtém primeiro
um argumento, que é o local onde você
deseja inserir o texto. Digamos que queremos inserir no final
do widget de texto Por exemplo, vamos supor que você
esteja inserindo muitas
linhas de texto em seu widget e precise se inscrever
para executar esse
método várias vezes E cada vez que você coloca, você insere o novo texto na
parte inferior do texto existente. Então você está dizendo colocar
no final este texto. Você quer o ponto de valor G. Então, a sequência de valores que o usuário
inserirá no widget de entrada Então, vamos ver como isso acontece. Execute a função
e coloque algum texto aqui. Você também pode colocar qualquer coisa lá, executar e obter a string impressa
no widget de texto Tudo bem, mas não queremos simplesmente pegar esse valor e
inseri-lo no texto. Primeiro, queremos fazer
algo com esse valor
e, em seguida, inserir o produto, a saída no widget de texto Digamos que pegaremos
o valor on dot get e o
multiplicaremos por 1,6 E isso seria milhas. Então, milhas são iguais ao valor que
o
usuário insere Então você está pedindo ao
usuário que insira quilômetros, e 1 milha é igual
a 1 quilômetro vezes 1,6, na verdade é algo
como 1,6 ou seis Não me lembro
do valor exato, mas você entendeu. E por último, você gostaria
de passar milhas aqui. Então, você deseja inserir o valor de saída
no widget, com segurança E execute. E espero
receber um erro aqui. Digamos que dez. Sim,
temos um erro. Então, quando você receber erros, não tente copiar
esse erro e colá-lo no Google e tentar ver o que
outras pessoas estão dizendo. Você pode perder muito tempo. Em vez disso, invista algum tempo e tente entender
esse erro. Então, o que isso está dizendo é
que diz erro de tipo. Não é possível multiplicar a sequência por um número
não inteiro do tipo float. Portanto, uma sequência pode ser uma
lista, pode ser uma string, uma tupla, etc Python está tentando fazer várias sequências com um
número não inteiro que é Então float aqui é o número 1.6, e o Python está tentando
multiplicar 1.6 por uma
sequência com Portanto, isso não é um número
porque o método G realmente pega uma string
de um objeto string E uma string não pode ser
multiplicada por um número de fluxo. Se fossem dois, era
possível multiplicar. Por exemplo, se você multiplicar M, a string M vezes
dois, obterá Mimi Então, mas você não pode
me multiplicar por 1,6 porque
não faz nenhum sentido De qualquer forma, a solução
para isso é
converter o valor que o
usuário insere em um float, e você faz isso adicionando
a função float Portanto, cuidado com os colchetes. Você vê que há um sublinhado abaixo do colchete e você
tem um sublinhado Então isso significa que esse
colchete se fecha aqui. Então, tudo parece bem, seguro e execute novamente,
dez, e execute. E obtemos a saída esperada. Você pode excluir a função
de impressão. Não precisamos mais disso. Acredito que foi um bom
começo com a biblioteca Kiner, e agora você deve ser capaz criar interfaces mais
avançadas No entanto, criaremos
uma interface gráfica de
usuário realmente avançada com o Kiner, que interagirá
com o banco de dados,
portanto, será um programa do mundo
real E, por enquanto, vou lhe
dar um exercício
na próxima palestra para que você
pratique um pouco o Kiner E você também conhece mais
alguns aspectos cosméticos. Assim, você criará o programa
que construímos nesta palestra, tornará mais atraente
visualmente e garantirá que sujará um pouco as mãos com
mais gentileza Falarei com você mais tarde.
162. Como Python interage com bancos de dados: Olá, e tenho o prazer de
apresentar a você esta nova
seção do curso. Nesta seção, você
aprenderá como
interagir com
bancos de dados via Python E isso significa que você usará bibliotecas específicas do
Python e operará
um banco de dados do Python usando o
Python Você fará
operações
como inserir dados
em tabelas de banco de dados Você poderá atualizar dados, excluir e consultar dados
do banco de dados. Então você poderá usar esses dados em seu programa
Python Python é capaz de interagir com muitos bancos de dados, como MySQL, Post Graculocle Nesta seção, você
aprenderá a interagir com
um banco de dados SQL light e também com um banco de dados
pós-SQL. O SQL Lite e o Postgrasul
são diferentes nisso. O SQLite não é um banco de dados
cliente-servidor. Em vez disso, ele é
incorporado ao programa final. Então, o que isso significa? Bem,
vamos dar uma olhada nesse programa. Se você seguir a seção
anterior, você sabe que vamos
criar esse programa
na próxima seção. Quando você clica em um botão
aqui, você vê alguns dados, e esses dados são armazenados
no banco de dados SQL Lite. Ao contrário de outros bancos de dados
, como o SQL de pós-graduação, SQLite é baseado em arquivos Então, todos esses dados
aqui são armazenados no arquivo de banco de dados dot dBfle Isso significa que você pode simplesmente dar esse programa a outra pessoa que não tenha o SQLite instalado, e eles podem usar esse programa, para que possam adicionar mais dados aqui, atualizar dados e
excluí-los e assim por diante Mas se você tiver esse programa
no banco de dados SQL de pós-graduação, o usuário ao qual você deu
o programa, ele precisaria ter o
PostgreSQL instalado em seu computador
para poder operar Portanto, considere o SQLite, um banco de dados
pequeno, e você pode chamá-lo de portátil, mas é muito popular
e, após o GrascUL seria mais apropriado para
uso em Então, digamos que você
tenha alguns formulários, receba alguns dados
do usuário em seu site e
armazene seus dados em
um banco de dados pós-GrasCul
em Python é um programa que obtém
os dados de seus formulários no cliente
no navegador e envia esses dados
em seu banco de dados Para poder interagir
com esses bancos de dados, você precisa ter duas bibliotecas,
e essas bibliotecas servem como interfaces para realmente enviar
código SQL ao banco de dados,
e a biblioteca para interagir com
um banco e a biblioteca para interagir com de dados SQLite é
chamada SQLite three, e a biblioteca para trabalhar com um banco de dados SQL de pós-graduação
é psycho PG Então, nesta seção, agora
na próxima palestra, mostrarei como trabalhar
com o SQLite três e depois passaremos para o
psychopg two. Então, vamos seguir em frente.
163. Como conectar um banco de dados SQLite em Python: Tudo bem Nesta palestra, você
aprenderá a usar o SQLite three Portanto, o Acul three é uma
biblioteca Python para interagir
com bancos de dados SQL Então, pense nisso como um
invólucro Python de código SQL. Então, você pode realmente
escrever código SQL dentro do Python usando
Ascoli Você não precisa instalar o
Scull three porque SQLite three é uma biblioteca
Python integrada Então, tudo que você precisa fazer
é importar o culto três. Deixe-me testá-lo. Roteiro
um. Sim, está funcionando. Agora, o processo padrão
de interação com um banco de dados
consistiria em cinco etapas Primeiro, você se conecta
ao banco de dados. Em segundo lugar, você cria
um objeto cursor, e o objeto cursor
é como um ponteiro para realmente acessar as linhas de
uma tabela de um banco de Em seguida, a primeira etapa é
aplicar uma consulta SQL,
portanto, talvez você queira inserir
dados no banco de dados
ou selecionar dados da tabela
e assim por diante. E então a quarta etapa é você confirmar suas alterações no
banco de dados
e, em seguida, fechar
a conexão. Então, vamos continuar e escrever um exemplo com todas essas cinco etapas
que acabei de mencionar. Então, a primeira coisa é
criar uma conexão e armazenar
esse objeto de conexão em uma variável. Então, digamos que C. Isso seria igual a cult three dot connect. E o que você passa aqui
é o arquivo do banco de dados. Então, digamos que é dot DB. E se você ainda não tiver
um arquivo de banco de dados, seu banco de dados será criado
por essa linha de código e a conexão
será estabelecida. Se você tiver um banco de dados, uma conexão
será estabelecida com seu banco de dados existente de
forma tão simples quanto isso. Em seguida, você precisa criar
um objeto cursor, sua conexão e, então cortar a variável
e fazer referência à em seguida,
ao método cursor, que é um método
do objeto de conexão Até aí tudo bem, aí
vem o código SQL real. Você deseja apontar para o objeto
cursor
e, em seguida, usar o método execute. E então, dentro dos colchetes é onde você insere
seu código SQL Lembre-se de que seu código SQL
sempre está dentro do código. Então, você passa o
código SQL como uma string para o método execute
do objeto cursor da biblioteca
SQL Lite three. Então, se você está familiarizado com SQL, isso deve ser fácil para você. Se você não está familiarizado com o
SQL, o SQL é bem simples, então você poderá
aprendê-lo rapidamente. Neste ponto,
temos um banco de dados, mas não temos nenhuma tabela
no banco de dados porque
um banco de dados é feito de tabelas e as tabelas têm
linhas e colunas. Então, primeiro, você
quer criar uma tabela. E uma boa prática é usar letras
maiúsculas para
as palavras-chave SQL. Portanto, criar é uma palavra-chave AsCl. Tabela também é uma
palavra-chave AscUL. E então você deseja
especificar o nome que deseja dar à
tabela. Digamos que loja. É assim que você ordena o Python
VasQul para criar uma tabela, mas então você precisa especificar
quais colunas você quer,
quais campos você
quer quais campos você
quer Então, vamos supor que
estamos criando uma tabela. Temos uma loja, temos uma loja e queremos armazenar nossos
produtos na tabela do banco de dados SQL. Então, gostaríamos
de ter o item. Então esse seria o nome do item. E o item
seria do tipo de dados de texto. Então, o texto é como
strings em Python , e então você
gostaria de ter E isso seria um número inteiro. Então, quantos desses
itens você tem em sua loja e o
preço também. E digamos que seja real
pelo preço, que deveria ser uma
flutuação em Python Então, um
número de ponto decimal. É isso mesmo. Aqui fecha o código
do código SL e aqui está o último colchete
do método execute Em seguida, você precisa confirmar essas
alterações no banco de dados. Então, você se refere à
conexão e, em seguida,
confirma e, em seguida, deseja
fechar a conexão. Então é isso. Você salva
isso e vai e executa. O Qlite não está definido, é claro, porque eu cometi um
erro aqui no Typo E novamente, e como você vê, um banco de dados foi criado. Agora, se você estiver
no programa novamente, receberá um erro
porque a tabela já existe no banco de dados. Então, o que você pode fazer
aqui é um truque simples. Você precisa adicionar algum
código na sua linha SQL. Você diz, crie uma tabela
se não existir. Tão seguro. E se você inserir seu
código novamente agora, nada acontecerá porque
o que o Python faz é se conectar
ao banco de dados e criar um cursor E então, se houver
uma tabela chamada store, ela não faz nada e
vai para a próxima linha. Se não houvesse uma tabela,
ela criaria uma tabela. Portanto, é bom ter
essa condicional simples aqui dentro do código SQL Que tal adicionar alguns
dados à nossa tabela vazia? Vamos tentar isso. C executar. Então, estamos executando
algum código SQL novamente, e a palavra-chave que insere dados no
banco de dados é Em seguida, você deseja especificar onde deseja
inserir os dados. Então insira na loja. E quais valores você deseja
inserir na tabela da sua loja. Então, valores, então você abre colchetes
e dentro dos colchetes, você insere os valores
na ordem correta Então, na ordem em que você
definiu suas colunas, você teria a
quantidade e o preço do item
e, digamos, uma taça de vinho. Agora, isso é uma string, então ela deve estar entre aspas. E você deve usar
aspas simples aqui porque você está usando aspas
duplas para a expressão externa. Então, se você usar aspas
duplas aqui, você confundirá
Python e continuará então use É por isso que temos
diferentes tipos de aspas para envolver as strings. Então, temos a taça de vinho de corda, e digamos que
temos uma quantidade de
oito e o preço de oito e o preço Salve isso e vá
em frente e execute. Não recebemos um erro,
então isso foi bem-sucedido. Agora, e se
quisermos inserir outra linha? Bem, poderíamos adicionar essa
linha aqui abaixo desta. Mas então, quando
executamos o código, também
executamos essa linha. Então, teríamos uma
duplicata dessa linha. Portanto, o que poderíamos fazer
nesse caso é usar uma função para envolver
nossas instruções SQL separadas. Assim, você pode indentar esse
bloco de código, se
quiser, editar o recuo de linhas ou usar um atalho, que pode ser específico
no Então, basta procurar aqui
o atalho do teclado
e, em seguida, você pode simplesmente usá-lo Então, a razão pela qual estou tentando o bloco de código é que eu quero criar
uma função aqui Digamos que a função crie uma tabela. Não esqueça a coluna lá. E então eu quero uma
função separada. Para dados inseridos. Então essa seria a
instrução SQL para a função de
inserção, mas você pode ver a diferença entre essa
função e essa função. Aqui não estamos criando uma conexão com o
banco de dados, o que está errado. Então, você gostaria de inserir
essas linhas aqui. Para que você estabeleça uma
conexão com o banco de dados. E então você
fecha corretamente essa conexão. Então você sabe como usar as funções do
Python agora. E, naturalmente, surge
a necessidade de passar parâmetros para
sua função aqui. Então você quer dizer item, então apenas algumas variáveis
e quantidade. Preço. E então você
gostaria de substituir de alguma forma esses parâmetros aqui para que toda vez que você
chamar a função, insira alguns argumentos e esses valores sejam
inseridos na sua tabela. Agora, você pode usar espaços reservados de
string reservados de string
Python para substituir esses valores pelos valores que o usuário passará ao Mas isso não é uma boa prática
porque seu código
estaria propenso a
injeções de SQL de prostitutas, e isso se aplica
quando, é claro, quando seu aplicativo web
está na Mas de qualquer forma, uma boa prática é colocar pontos de interrogação aqui. E depois da
instrução SQL, depois do código duplo, você gostaria de passar as variáveis
pelas quais
esses pontos de interrogação poderiam ser substituídos. Então você quer o item, então na
quantidade e preço corretos do pedido. Então, vamos tentar tudo isso agora. Eu gostaria de executar a função de
inserção que acabei de criar com
alguns itens novos. Então, digamos que água, vidro, temos dez deles, e isso seria mais
barato. Salve isso e vá e execute. Eu cometi um erro terrível aqui. Eu embrulhei com código
todos os argumentos. Então, o copo de água deve estar
próximo, e esses são números. Então, salve novamente e tente novamente. E seus dados devem ser
conhecidos no banco de dados. Então, mais uma vez, e
digamos uma xícara de café. Execute com segurança novamente. Agora tenho certeza de que você
gostaria de ver os dados que você está
inserindo em seu banco de dados
em sua tabela Então, vamos criar uma função
que faça exatamente isso. Digamos que visão em profundidade. E você gostaria de estabelecer uma conexão com o
banco de dados. Então, vamos copiar isso. Cole-o aqui e, em seguida, aqui vai o código SQL,
então execute. Portanto, sempre usamos
o método execute para enviar código SQL
para o banco de dados. E então temos citações. Digamos que queremos
selecionar os dados de todas as colunas
da tabela da loja. Portanto, selecione um asterisco, o que significa tudo da loja Tudo bem Então, nós os selecionamos, mas como podemos realmente buscar esses dados para que
possamos usá-los em Python Bem, a maneira de buscá-los é usando os métodos
fetch all E queremos selecionar
armazenar essas linhas em variáveis. Então, digamos que as linhas busquem tudo. E então precisamos
fechar a conexão. Então, ao contrário
dos outros métodos em dos outros métodos em que estávamos gravando
dados na tabela, aqui estamos apenas selecionando dados, para que não precisemos
usar o método commit. E queremos retornar
a variável rose. E eu só gosto de imprimir
a saída da função. Portanto, a saída da
função é a variável rose. Então, vou
imprimir o valor da rosa na linha de comando. Salve o script e execute. Claro, eu tenho um erro de digitação
aqui e deveria ser devolvido. Tente novamente. E
aqui estão nossos dados. Portanto, temos um
copo de água e duas linhas
de xícaras de café. Isso porque executamos a função anteriormente,
a função de inserção, e agora que executei
o script novamente com objetivo
de executar a função de
visualização, a função de inserção
também foi executada pela segunda vez. Então, a xícara de café foi inserida
duas vezes na mesa. Tudo bem, isso é
para esta palestra. E na próxima palestra, mostrarei
mais algumas operações que
você pode fazer com o banco de dados Então eu vou falar com você mais tarde.
164. SQLite: selecionar, inserir, excluir e atualizar registros SQL: Então, na aula anterior, apresentei a biblioteca
SQLite Three e mostrei como
criar uma tabela em seu banco de dados SQL e como inserir
dados em seu banco de dados e como selecionar dados
e visualizá-los em Python Então, temos essas quatro linhas, quatro linhas em nossa tabela de banco de dados. E nesta palestra, mostrarei
rapidamente como
excluir e atualizar
dados da sua tabela Então, novamente, vou criar uma
função, então deixe-me copiar isso. Ainda precisamos nos conectar ao banco
de dados e criar
um objeto cursor. Então, precisamos usar o método
execute. E neste caso,
eu gostaria de
deletar a linha que
tem a taça de vinho. Então, dentro de execute,
escreveríamos, excluiríamos da loja
onde o item é igual, eu gostaria de usar o espaço reservado para pontos de
interrogação Então, marque e entre colchetes, gostaríamos do parâmetro que
passaríamos por nossa função Então esse item aqui é o
que colocamos aqui, item, e deixe-me mudar
o nome da nossa função. Então esse é esse. Não confunda com isso. Essa é a coluna da nossa tabela, e essa era a linha
da função anterior.
Exclua isso também. E você também quer confirmar
as alterações em seu banco de dados. Então se comprometa. Então é isso. E eu gostaria de comentar isso para não querer executar
a função de inserção novamente. E eu quero que a função de visualização
seja executada depois de
excluirmos a linha. Então exclua. Então, item, qual item
você gostaria de excluir? Então, o item copo de vinho. E vamos ver o que vai acontecer. Recebemos um erro e
solicitamos três erros, número
incorreto da
encadernação fornecida. Linha 28, eu posso ver que sim, há algo que
muitas vezes esqueço. Você precisa adicionar um coma aqui. Você verá isso quando eu
ensinar como se conectar a um banco de dados postgrascule e como consultar
dados do banco de dados
postgrascule um banco de dados postgrascule e como consultar
dados do banco de dados
postgrascule. O código é bem parecido, mas tem algumas
mudanças críticas como esta aqui. Portanto, pode ser confuso
trabalhar com diferentes
tipos de bancos de dados Vamos tentar isso de novo. E parece estar funcionando agora. Wineglass não está aqui. Então é assim que você exclui uma linha. Agora vamos adicionar outra função. Para atualizar a atualização de dados. Neste,
gostaria de atualizar a quantidade
de óculos fotográficos. Então, eu quero mudar isso 10-11. Novamente, você estabelece sua
conexão com o banco de dados, cria um objeto cursor
e, em seguida, executa, e aqui você insere o comando
update SQL. Então, atualize o que você deseja
atualizar é a tabela da loja. E qual coluna você deseja atualizar da tabela
da loja? Então, você deseja definir
o nome da coluna, que nesse caso
seria quantidade. E isso seria igual
a quê? Adivinha o que? interrogação. E
então você diz, onde? Ou deixe-me mostrar como
atualizar mais de uma coluna. Então, se você quisesse
mais de uma coluna, usaria uma vírgula e diria que o
preço é igual a outro ponto Tudo bem, então dizemos atualizar, armazenar e definir quantidade e
preço para isso, mas qual linha? Portanto, você precisa especificar o
condicional aqui. Portanto, nosso item é igual a uma taça de vinho. Ou você também pode definir isso como um ponto
de interrogação. Então você tem três
espaços reservados aqui, e então você tem a cotação
para fechar sua declaração cL, e então, entre colchetes, você quer passar os
parâmetros de quantidade, e você tem
um segundo é preço e item Quando você tem mais de
um parâmetro aqui, você não coloca uma
vírgula no final, então isso termina assim Você também quer passar esses parâmetros aqui para que eles reflitam a entrada
da função. Então, o que temos aqui é estamos atualizando a tabela da
loja e definimos o valor da coluna de quantidade e da coluna de
preço para esses valores, mas apenas para as linhas em que o item será igual
a um determinado valor. Então, atribuímos esse
valor a este aqui e os dois primeiros a
esses. Você entendeu a ideia. Salve o script e você
precisa chamá-lo aqui. Então, deixe-me comentar
isso e atualizar. Então, qual quantidade
você quer passar? 11, digamos. E
o preço era cinco. Digamos que suba para seis, e qual item você
deseja atualizar?
Copo de água? É isso mesmo. Salve seu
script e experimente. E
atualizamos esses valores conforme o esperado. E é isso que eu queria
ensinar a você nesta palestra. Poderia ser mais prático realmente
ter um ID aqui. Então, dizemos quantidade e preço em que o ID é
igual a um número, então não precisamos
passar o nome inteiro, o que pode ser confuso
ou propenso Então, nesse caso, gostaríamos de alterar
a tabela aqui e adicionar uma chave primária que seja
totalmente incrementada Mas você aprenderá como fazer isso na próxima seção
do curso. Então, mostrarei como criar o programa do mundo real, e implementaremos
isso nesse programa. Então, esses foram alguns exemplos
triviais, e você terá uma
ideia muito melhor na próxima seção Então, em seguida, passaremos
para o SQL de pós-graduação e trabalharemos com a biblioteca Cycle PG two. Falo com você mais tarde.
165. Banco de dados PostgreSQL em Python: Bem-vindo a esta palestra. Terminamos com o SQLite três, então espero que você tenha conseguido criar esse script que
mostrei nas palestras
anteriores Porque nesta palestra,
vamos usar esse script,
mas vou modificá-lo para que seja compatível com a interação com dados SQL
pós-graduados Felizmente, a maior parte do código
é a mesma, com
algumas pequenas alterações Claro, precisaríamos outra biblioteca
chamada Psycho PG two E então pegaremos
métodos dessa biblioteca. E, ao contrário do SQLite três, psycopg two
precisa ser instalado, então é uma biblioteca de terceiros Ele não vem como uma biblioteca Python
embutida. Portanto, você precisa do psychopg
two instalado e também do QL de pós-graduação
instalado em Então, nesta palestra, eu gostaria de mostrar como instalar
o Postgraql e o
psychopg Tudo bem Esta é a
página oficial do PostgraSQL e você pode simplesmente acessar os
downloads aqui embaixo aqui E então você quer encontrar
seu sistema operacional. Portanto, o PostGraqul funciona em Mac,
Linux e Windows, bem como no
Solaris Então, eu estou no Windows.
Vou clicar no Windows e, ao instalar o Postgrasul,
você também instala
o PG Admin three, que é uma ferramenta gráfica na
qual você pode ver Você está familiarizado com o MySQL, administrador do
PG é equivalente
ao PHB QL de pós-graduação também vem
com um Stack Builder, que é um pacote que
você pode usar para baixar e instalar outras extensões SQL de
pós-graduação Então, digamos que você queira uma
extensão para dados espaciais, para armazenar dados espaciais no PostQL para que você possa usá-los
em aplicativos JS Portanto, há uma extensão
para isso chamada Post GS. De qualquer forma, mostrarei
como instalar extensões. Primeiro, você precisa baixar o PostgreSQL e eu estou no
Windows, então vou clicar aqui E vou esperar um pouco até que
meu download termine. Então, vou passar rapidamente pelo
processo de instalação. Então, só me
perguntam onde quero instalar o Post grass QL e onde meus dados
serão armazenados. E aqui você deve ter cuidado
com essas credenciais. Então, seu superusuário,
aqueles que têm a maioria dos
privilégios em seus bancos de dados, e seu
nome de superusuário é Postgres, e eu realmente gostaria de criar Um arquivo de texto apenas para
armazenar minhas credenciais. Eu também gostaria de dizer
a senha. Um, dois, três. Tudo bem, então eu
insiro postgress um, dois, três como senha Em seguida, essa é uma porta do seu servidor do seu servidor de
banco de dados. Então, eu gostaria
de anotar isso também. Isso é sobre sua configuração
local, então vou deixar esse padrão. E você só terá que esperar
um pouco até que a
instalação termine Tudo bem, isso foi um sucesso. Agora, se você quiser
iniciar o Stock Builder para instalar extensões para o banco de dados da escala de
pós-graduação, talvez
queira que
isso seja marcado para
que este seja meu servidor de banco de dados. E aqui você tem
várias extensões que talvez queira
instalar, por exemplo, extensões
espaciais, e você tem Post gs para 32 bits e
Post Gs para 60 bits. Se eu clicar em Avançar, isso me diz que eles precisam de
pelo menos um pacote para ser instalado.
Deixe-me instalar o Post gs. Tudo bem, concorde com
a licença Poss e
depois vá em seguida Isso está me perguntando sobre o DEL, que é outra
interface para dados GIS Tudo bem, foi difícil
instalar extensões externas. Se você quiser voltar
ao Stack Builder mais tarde, seu Stack Builder deve
estar aqui ou você pode simplesmente acessar o Postgres SQL,
e aqui também temos o administrador do
PG, e aqui está o Tudo bem, mas se você
quiser trabalhar com Python, você quer acessar os
bancos de dados PostGraqul através
do Python , então você não precisa você quer acessar os
bancos de dados PostGraqul através
do Python
, então você não precisa interagir com esses aplicativos aqui. A maneira de interagir
com o PostgrasQUL com Python é
instalando o Psycho PG two
, e você pode instalar o psychopg two , e você pode No entanto, você pode ter
problemas porque a cyclopedia
two é escrita em C, então você precisa de um compilador C instalado em seu
sistema no Windows, pelo
menos, você não
tem esse problema em um Mac e Linux, tenho certeza A solução para isso, na verdade,
existem algumas soluções. Uma das soluções é
que você pode querer
instalar um estúdio visual
em sua máquina Windows, mas esse é um programa muito grande e eu não gostaria de
instalá-lo. Portanto, a segunda solução, que eu mais prefiro, é usar bibliotecas
Python pré-compiladas E você pode encontrar quase
todas as bibliotecas Python que exigem um compilador C. Você pode encontrar essas bibliotecas
nesta página fornecida por
Christoph Então, estamos procurando uma chamada SIP. PG dois. Aqui você tem os arquivos da roda. Portanto, um arquivo de roda é um arquivo que
pode ser instalado com o PIP. Então, o que você faz
quando instala algo com o PIP PIP
instala o Psycho PIP está baixando o
arquivo We de um servidor remoto
e, em seguida, o
instala em seu sistema Então, aqui você pode
procurar sua versão. Esse seria o
arquivo do meu sistema. Então, pegue isso
daqui e cole aqui para que eu possa acessá-lo a
partir da linha de comando atom. Então aqui está o arquivo
que acabei de baixar. Então, vá em frente
e instale o pip, e então você precisa
apontar para o arquivo Well Então isso será Oliged. E isso foi instalado
com sucesso. Posso verificar rapidamente
se isso está disponível. E parece estar funcionando. Você também pode verificar a versão da sua biblioteca, se quiser. Portanto, é 2,6 0,1. Tudo bem, então
na próxima aula, nos conectaremos ao banco de dados
ao banco de dados
post gradsqll
e, em seguida, criaremos
tabelas e inseriremos dados,
visualizaremos, excluiremos Então, vamos seguir em frente.
166. PostGreSQL: selecionar, inserir, excluir e atualizar registros do SQL: Muito bom Nesta palestra, você aprenderá como se conectar a um banco de dados Post GradesCL e como criar tabelas em um banco de dados
pós-graduado,
armazenar dados, visualizar dados e também excluir
e atualizar linhas e O script que você está
vendo agora, porém, é um script que você criou nas palestras anteriores
usando
o banco de dados SQLi Então, se você ainda não
assistiu a essas palestras, eu recomendo que você as
leia primeiro
e depois venha aqui Porque nesta palestra, vou examinar esse código
e substituir
apenas algumas linhas, o que
sugere que o código que você usa para a biblioteca
Q three é muito
semelhante ao
código que
usaremos para psycopg two,
que é uma biblioteca que você usa para uma biblioteca que você usa se conectar
aos A principal diferença é que
seu banco de dados não
será um arquivo DB armazenado
em seu sistema de arquivos. Será um banco de dados incorporado em sua instalação
pós-grascule Portanto, o primeiro requisito
é que você precise ter um banco de dados existente em
seu servidor de banco de dados. O Post grass SquL vem
com um banco de dados padrão. Então, depois de instalar o PostgreSQL, você terá um banco de dados
chamado PostGres, então você pode simplesmente passar
o banco de dados aqui
ou, se quiser,
criar Então, você só precisa
acessar a instalação do PostgreSQL e criar um
banco de dados por meio do PG Então, aqui estão seus servidores
de banco de dados, e esse é o padrão. Você precisa primeiro se conectar ao seu servidor
de banco de dados. Que essa seria a senha que você criou quando
instalou o Postgress O PostGress 123 era meu. Tudo bem Então, fui conectado
com sucesso e tenho três bancos de dados. Então, esse é o banco de dados
padrão do qual eu estava falando, e esses são outros dois
bancos de dados que eu criei. Então, para criar um novo banco de dados, basta clicar com o botão direito nos
bancos de dados e no novo banco de dados. Digamos que o banco de dados um, e você precisa
especificar o proprietário, ou
seja, o usuário do seu banco de dados. PostgressT é o que
eu especifiquei quando
eu paro o Postgres UL,
isso Tudo bem, agora você
tem um banco de dados aqui. Se você clicar nele,
você se conectará a ele. Agora você pode simplesmente fechar isso
e voltar para o Python. Ok, deixe-me primeiro comentar essas linhas para que,
quando eu executar o script, eu não receba essas
instâncias de função chamadas. Portanto, temos um banco de dados vazio. Então, a primeira coisa que
gostaríamos de
fazer é criar uma tabela. Mas antes de tudo, eu
gostaria de mudar isso também. Psicopia dois. E, claro, eu gostaria de fazer uma
substituição em lote do SQ L três, substituí-lo por PG dois Então, eu quero que todos esses nomes de
bibliotecas aqui sejam
substituídos por Pycopg two Então, substitua tudo e apenas pressione
escape. Isso vai embora. Felizmente, esse código é o
mesmo da biblioteca SQLite three. Então, temos connect e, em seguida,
temos o objeto cursor, então temos o
método execute commit e close. Tudo o que precisamos fazer é alterar
os parâmetros aqui. E aqui gostaríamos de passar o nome do banco de dados,
o nome do usuário, o host, a senha e o número da porta do
seu servidor de banco de dados. E tudo isso vem entre
aspas. Portanto, ele é passado como uma string
para o método connect. Primeiro, temos um nome de banco de dados. Então, o parâmetro dbname e isso serão
iguais a um valor Portanto, você precisa inserir o
valor entre aspas simples. Então isso é banco de dados. Bem, o nome do banco de dados. Então você tem um usuário e esteja ciente de que não
precisa usar vírgulas aqui Então, tudo isso vai como
uma string e é lido como uma string
pelo método connect. Então, o usuário entra
entre aspas, publica grass, então temos a senha, post grass, um, dois, três, então você tem o nome do host, então o parâmetro do host. Esse deve ser o host local. Tudo bem Portanto, o host local deve ser o nome do seu host
e é sempre assim. E, por fim, temos
o número da porta, que também está entre
aspas. Então, 532 Então, esses são os
parâmetros que você passa para o seu método de conexão ou para
a biblioteca cycle PG two. Então, vamos tentar
chamar essa função. Então, criar tabela é uma função, e eu vou salvar o script. Então, deixe-me ter certeza de que você sabe
o que está acontecendo aqui. Então, nos conectamos ao banco de dados
e, em seguida, temos
os mesmos métodos para a biblioteca do ciclo PG two. Então, estamos criando
um armazenamento de nomes de tabela
e, em seguida, temos três
colunas para essa tabela. E nós cometemos essas
mudanças e fechamos a conexão. Então,
salve o script. Controle S. Alan,
chame o script. E isso parece bem-sucedido. Se quiser, você pode
simplesmente ir ao PG no Mean. E aqui você pode ver a tabela que você acabou de criar. Então, basta digitar a senha e você precisa
acessar seu banco de dados. Então, banco de dados um, expanda isso. Em seguida, você precisa acessar
esquemas, tabelas públicas. E esse é o nome da nossa tabela. Portanto, temos a tabela da loja e você tem três colunas, quantidade e preço do
item. Tudo bem Temos
uma tabela vazia, então vamos inserir
alguns dados nessa tabela. Vou apenas copiar essa
string de conexão e colá-la. Aqui. Então,
lembre-se de que usamos interrogação ao inserir
valores para três.
Se você quiser, você pode usar espaços reservados para formatação de
string Então, um para o item, um para a quantidade e outro para o preço. Depois da vírgula,
deixe-me adiar isso. Após a citação, desculpe, você passa a porcentagem, então você já conhece a formatação da
string
e, em seguida, especifica a tupla das variáveis nas quais
deseja inserir Portanto, quantidade e preço do item. Portanto, você pode usar isso,
mas isso estaria sujeito a injeções de SQL
de tuckers Portanto, não é uma boa ideia. Eu posso ir em frente e executar isso na verdade, só para
ver o que acontece. Então, digamos que abril,
dez e 15 pelo preço. E deixe-me executar isso. Então parece que funcionou, e podemos verificar isso
na tabela aqui. Então, você pode simplesmente
acessar seu banco de dados, que é o banco de dados um. E aqui você pode executar
uma consulta SQL simples, selecionar tudo da loja ir para Executar e ver que a
Apple foi adicionada à tabela. Então funciona, mas é
arriscado usar a formatação de string do
Python Então, o que você quer fazer é deixar isso lá por um
tempo para que você compare as coisas e, para
evitar injeções de scull, você deve realmente
passar suas variáveis como um segundo parâmetro para
o Então, o que isso significa é que
você não precisa usar odes, então você simplesmente passa a porcentagem
S, desse jeito Então você coloca uma vírgula
aqui, o que significa que essa string aqui
entre aspas duplas é um argumento, e essa aqui
é o outro argumento Em seguida, você passa suas variáveis, então isso deve funcionar agora. Então, tenho certeza que você pode ver a diferença entre
isso e isso. E vou apenas comentar
isso para que não seja executado. E digamos laranja. Mesmo preço e quantidade executados. E vamos dar uma
olhada em PG Mad Man. Então, deixe-me executar
a consulta novamente. E você vê que as laranjas foram adicionadas
como um neuro à mesa. Então, esse é o caminho a percorrer
e eu vou deletar isso. Tudo bem Agora vamos dar uma
olhada na função de visualização. Então, o que a função de visualização está fazendo é se conectar
ao banco e selecionar todas as
linhas da tabela de armazenamento Em seguida, armazenamos essas linhas
na variável de linha usando
o método fatal. Em seguida, retornamos essas linhas
como uma saída de função. Tudo o que você
precisa mudar aqui é argumento do método connect. Então, basta colocá-los aqui. E
deve ser bom ir. Então, deixe-me ver, chamar a
função e executar. E sim, precisamos imprimi-lo. Esqueci isso. Sim. Então, temos April e
temos três laranjas agora porque quando executei o script aqui,
executei a
função de inserção novamente, então obtivemos duas laranjas e outra quando você usa Então você entendeu.
Vamos dar uma olhada na exclusão. Função. Novamente, precisamos apresentar argumentos sobre a conexão
psicológica dupla Em seguida, excluímos da
loja onde o item, novamente, não
podemos usar ponto de interrogação, então precisamos usar porcentagens E então, como segundo argumento, passamos a variável item. Então é o mesmo que cul três, mas usamos porcentagens aqui. E deixe-me chamar delete. Vou comentar isso
e deletar aqui. Então, o que você deseja excluir
é o item, qual item? Digamos que queremos excluir linhas em que o item
seja igual a laranja. Então, vamos ver como isso acontece. Sim, o item foi excluído. As linhas com o item
laranja foram excluídas e executamos a
função de visualização, então temos uma linha agora. Nossa mesa tem apenas uma linha. Uma rápida olhada no
método de atualizações agora. Exatamente desse jeito. E aqui estamos atualizando
a tabela da loja, e lá estamos configurando, então estamos atualizando a quantidade para esse valor e o preço
também para esse valor em que o
item é igual a esse valor. Tudo bem, então temos um, dois, três valores e passamos três variáveis aqui
depois da vírgula Então, como segundo argumento
do método execute, o método update
recebe três argumentos. Então, deixe-me comentar
isso e atualizar, temos apenas uma linha. Então, eu gostaria de definir a quantidade de maçãs para, digamos, 20. E o preço, vamos
manter o mesmo preço. E para o item Apple simplesmente
faça isso e execute. E
alteramos a quantidade para 20. Então foi isso. Eu acredito
que foi bem simples. Então, se você aprendeu S
como três antes, isso foi bem simples para você. E se você tiver alguma dúvida, sinta-se à vontade para colocá-la
na seção de discussão. Eu ficarei feliz em responder. Nos
vemos na próxima palestra.
167. Aplicativo 6: aplicativo de inventário de livros: Bem-vindo a esta nova seção. E nesta seção, você
aprenderá como criar um programa real que permita ao usuário armazenar
informações sobre livros. Então, eu já
criei esse programa e mostrarei passo a
passo como você pode fazer o mesmo. Eu tenho o programa aqui, e
é um arquivo executável. Portanto, além de aprender como
criar o programa dot pi, você também aprenderá como
criar arquivos executáveis que executados no Windows e
arquivos de aplicativo dot executados em um Mac Assim, você pode basicamente
dar seu programa a qualquer pessoa e ela
não precisa ter o Python instalado
no computador Então eu chamo o programa de Livraria. E isso foi construído
principalmente com o Kinte, que é uma biblioteca gráfica de interface de
usuário,
e a biblioteca ASQ Light three,
que é uma biblioteca para interagir
com o banco de dados ASQE Então, o que temos aqui
são quatro entradas nas quais você pode inserir
um novo registro do livro. Então, digamos que você
tenha um novo livro em sua loja e queira
adicioná-lo ao seu banco de dados. E aqui você pode
ver todos os livros que foram adicionados
ao programa. Você pode adicionar um novo
livro, digamos, Pythons para o título
rdt quickly Você tem o número ISBN, que é um número
de identificação exclusivo para livros. É bem longo. Digamos assim,
e você adiciona uma entrada
e, em seguida, visualiza tudo
novamente e verá que a nova entrada foi
adicionada ao banco de dados. Então, cada registro que você
vê aqui é, na verdade, armazenado em uma tabela dentro
desse banco de dados do Light One. Então você tem alguns
outros botões aqui. Então, se você quiser, você pode realmente pesquisar a entrada de um registro, uma entrada de
pesquisa e, em seguida, ela
exibirá a entrada
que você pesquisa. Ao clicar na entrada, você obtém todos os campos exibidos em cada livro didático Resolva tudo de novo e você
também pode atualizar e excluir registros. E, finalmente, você pode
fechar a janela. Portanto, não é uma ótima interface de
usuário. Não sou um ótimo designer de
interface de usuário, mas você aprende muito
criando esse programa. Portanto, é muito longo
, mas valerá a
pena . Então, vamos começar.
168. Projetando a interface do usuário: Olá. E nesta palestra, o que você vai fazer é começar
a
construir nosso programa de livraria Especificamente, vamos
trabalhar na interface gráfica do
usuário porque, você sabe, esse programa
tem duas partes, por assim dizer. Portanto, ele tem um back-end
e um front-end. O back-end é o código do banco de dados Sculi
Three. Então, o código que interage
com o banco de dados. E o front-end é o
código da biblioteca Tkinter. Então, o código que
cria todos esses botões,
essas entradas, esse texto, essa caixa de listagem
e essa barra de rolagem Então, normalmente, você teria que
escolher se
deseja trabalhar primeiro
no código de back-end ou se
deseja começar a criar
o código de front-end. Antes de tudo, porém, a primeira coisa
que você quer fazer é começar a definir
alguns requisitos. Então, você quer dizer o que
seu programa fará. Então, digamos que você
queira que seu programa mostre uma lista
dos registros atuais. Então, quando você pressiona VO, você vê a lista
de registros aqui. E então você deseja que seu programa
pesquise uma entrada atual
e, em seguida, adicione
Andrea,
atualize e selecione os dados E então você quer que o
programa feche a janela. Então, basicamente, esses
são nossos requisitos, e agora você pode escolher
começar a escrever o final de Beck, para poder escrever
uma função que seleciona todos os dados do banco
de dados Em seguida, você pode retornar
esses dados como texto. Então, você pode simplesmente
imprimi-las por enquanto, se quiser
escrever o back-end primeiro porque você não
tem o front-end, você ainda não tem a interface gráfica
do usuário construída. Assim, você pode simplesmente
escrever funções
do back-end e depois
imprimir a saída. Ou você pode começar a escrever
o front-end primeiro. Então você cria essa interface
gráfica de usuário. Mas quando você clica nesses
botões, nada acontece. Então, basicamente, você simplesmente desenha
essa coisa com Python. E depois de fazer isso, você começa a criar o back-end
e, em seguida, conecta
todos os widgets e todos os comandos
desses botões às funções de
back-end Portanto, é uma questão de
preferência se você optar por trabalhar primeiro com o
back-end ou com o front-end. Neste curso, nesta seção, vamos criar primeiro
o front-end. Então, vamos criar uma
interface gráfica de usuário que
não fará nada por um tempo até conectá-la ao
back-end. Tudo bem então. Eu gostaria de primeiro
remover essa barra vertical aqui porque vou
desenhar a interface gráfica do
usuário aqui. Então eu vou fazer
um esboço para você
ver e ter o esboço
aqui o tempo todo Então, para remover essa barra,
se você estiver curioso, basta acessar as configurações. Depois, há um pacote
que realmente mostra aquela barra
chamada rap guide, e você deseja deslocar todas as exibições de uma linha
do oitavo caractere
no editor E isso pode ajudá-lo, se você quiser, pode ajudá-lo a manter
um padrão específico. Portanto, você não quer ter mais de 80 caracteres
em seu código. Então, essa barra ajuda
você a manter essa regra. De qualquer forma, não queremos isso,
então acabei de removê-lo. E eu vou escrever algumas notas dentro
da sequência de documentos. Então você sabe que uma string de documento
é como uma linha de comentário. Então, se você colocar alguma coisa
dentro desses códigos triplos, isso não é lido
como código pelo Pathon , mas é como uma string de
documentação Então, só para os humanos lerem. Então, digamos que eu queira um programa. Isso armazena as informações desse
livro. Então, título, autor e ISBN. Então, o
número de identificação dos livros. E o usuário pode
ver todos os registros. Eles podem pesquisar uma
entrada e adicionar uma entrada, atualizar uma entrada, excluir e fechar o
programa se quiserem. Fechar. Oito. Então, se você
começar a pensar nisso, agora você gostaria de ter uma interface
gráfica de usuário que tenha todos esses botões para que o usuário possa realizar essas ações
por meio de alguns botões. E então você pensa em
como eles podem ver os registros. E você sabe que o Tkinter
tem a caixa de listagem, widget que
permite exibir texto como uma lista. Então, linha por linha. E então você deseja que
o usuário pesquise uma entrada em uma
entrada de atualização de entrada. Então você precisa de alguns widgets de entrada. E então, é claro, você gostaria alguns rótulos que possam dizer do
que se trata cada entrada. Então isso seria um widget de rótulo. E você também pode querer
uma barra de rolagem para que sua lista seja rolada. Se
houver muitos registros, o usuário possa
percorrê-los e ver os
registros abaixo da lista. E então temos um esboço. Isso, é claro,
requer alguma fantasia e talvez alguma experiência com design de interface de
usuário. Mas é muito importante
que você tenha um esboço. Então, vou
manter esse esboço
na tela enquanto
codifico o programa Normalmente, na vida real, você gostaria de desenhar, talvez em um papel real ou
apenas em uma tela digital. Mas é importante tê-lo, e agora que o temos, vamos começar a construí-lo
na próxima palestra
169. Programando a interface front-end: Ótimo. Agora temos um esboço da nossa interface gráfica de usuário, e isso deve
facilitar as coisas Então, agora você pode
seguir em frente e codificar sua interface gráfica de usuário em Python usando os recursos do Kiner Salt Kiner é uma
biblioteca que
usaremos para criar essa interface E suponho que você já
conheça o Kinder porque
expliquei isso em uma
das seções anteriores Portanto, se você não conhece o Kinder, volte duas
seções antes disso e então você poderá entender do que estou
falando aqui Então, vou manter o
esboço à direita. E agora você sabe que para criar uma
interface gráfica de usuário com o Kiner, você pode usar os métodos de empacotamento para empacotar seu
widget ou o método de grade Usaremos o método de grade, então pode ser uma boa ideia
realmente criar uma grade
em seu esboço Assim, ao
criar seus widgets, digamos que você crie uma parte inferior, você queira passar o número da linha e o
número da coluna Portanto, ter uma grade como essa
facilitará as coisas. Tudo bem. E eu só gostaria de
deletar essa string de documentos. Não precisamos disso, e
isso me economiza espaço para que você possa ver um espaço de trabalho mais
limpo aqui Tudo bem. De
skinerimport. Tudo. Então, eu não estou explicando o código agora porque você já
sabe essas coisas. Se houver algo
novo, eu vou analisar isso. Window é igual a TK, o método TK que
cria um objeto de janela, e então você deseja aplicar
o método de loop principal, que é basicamente
uma forma de agrupar todos os widgets que você
inserirá neste espaço agora Tudo bem, então temos
quatro rótulos aqui. Portanto, temos o título
e o autor da etiqueta aqui e o ISBN. Então, vou criar
fobels four label objects. Então, nomearei meus objetos, minhas variáveis de
L um a L quatro e usaremos o método de
rótulo de objeto para isso. janela é a janela principal
e o texto deve ser o título. Então, Control Enter, você
pode ir para a próxima linha, não importa onde você esteja
na linha anterior. Então você não precisa
simplesmente alternar, vá até aqui e pressione Enter, basta pressionar Control Enter
e ir para a próxima linha. Primeiro, você aplica
o método de grade. Portanto, o primeiro rótulo é a linha zero, coluna zero também. Depois, você pode simplesmente copiar e colar mais
três vezes. Então isso seria L dois,
L três e L quatro. E você também gostaria de alterar
o texto da sua etiqueta. Aqui e ISBN. O autor seria a coluna dois, como você pode ver no esboço. Então 02, então temos que
o aqui seria um, zero e depois 12
para o último rótulo. Então, vamos ver o que temos. Eu só gostaria de chamar meu roteiro. Tudo bem, parece promissor. Agora vamos adicionar as entradas. Então, esses eram widgets estáticos. Agora precisamos adicionar algumas entradas. Então, um seria a entrada. E a entrada obtém a janela
como o primeiro parâmetro, assim como qualquer outro widget E também um parâmetro de
variável de texto. Esse parâmetro de variável de
texto espera como
argumento o valor que o usuário inserirá
no widget de entrada Esse é um tipo de dados espaciais. Então, primeiro você precisa realmente
criar um tipo de dados aqui, um objeto desse
tipo de dados. Então, vamos chamá-lo. Estamos criando a
entrada para o título,
digamos, o texto do título, igual
à string vary. Então essa é a função que
cria esse objeto espacial. Isso seria igual
ao sexo do título. Então é isso. E
você também precisa colocar esse widget de entrada em grade E os primeiros widgets do widget de
título correspondem à linha zero e
à coluna Então é isso. Eu posso
rapidamente multiplicar isso aqui e o texto do autor
aqui o texto e o texto do ISBN Você também precisa
alterar os números ou menos variáveis desse jeito. E, claro, você precisa passar as entradas do usuário aqui. Então isso deveria ser e
esses dois. Tudo bem. E, por fim, você também deseja especificar as linhas e
as colunas das entradas. Então seria zero, três, e então temos
o widget de texto,
um, um. Tudo bem. E a última entrada.
Um. Três. Tudo bem. Vamos dar uma olhada.
Sim. Parece bom. Ótimo. E agora é a vez
da caixa de locação. Então, vamos chamá-la
de Lista 1. Por que não? Isso seria igual
à janela da caixa de listagem. E então você deseja
especificar a altura da sua última caixa e também
a largura. Então pensei
em colocar seis e 35. Seria uma boa
altura e largura. Você pode saborear
diferentes alturas e larguras e ver o que é melhor. E então eu gostaria de avaliar isso. Grade. E então isso começaria na linha número dois e na coluna zero. No entanto, se
deixarmos assim, as coisas não correrão como esperamos. Na verdade,
podemos tentar isso. Como você pode ver, a caixa de listagem
ocupou apenas a primeira célula. Então, a primeira célula da
primeira coluna na linha zero, um, dois, então linha
dois, coluna zero. Em vez disso, o que
queremos é estender essas caixas de listagem
nas outras colunas e
nas outras linhas, porque
teremos botões aqui mais tarde, então queremos abranger isso. E você pode ver o esboço aqui. Então, podemos adicionar o parâmetro de
extensão de linha, e isso também seria igual a extensão de
seis colunas. Então, seriam dois. Tudo bem. Então isso seria uma caixa de listagem. No entanto, também precisamos adicionar uma
barra de rolagem para que a lista possa ser rolada quando houver muitos
dados na lista, muitos registros para anexar
uma barra de rolagem à A lógica aqui funciona assim. Você cria sua barra de rolagem e, em
seguida, informa à barra de
rolagem sobre a lista que a
barra de rolagem deve rolar E então você diz à sua lista também quem é a barra de rolagem. Então, vamos primeiro criar a rolagem, uma barra de rolagem
independente Então, digamos SB one. Método da barra de rolagem. Isso é tocado
pela janela. E então você aplica
o método verde. Portanto, a barra de rolagem
estaria em uma coluna três. E depois de criar
esses dois objetos, você deseja aplicar
um método de configuração à caixa de concessão e
um método de configuração Para o objeto da barra de rolagem. E esses
métodos de configuração recebem argumentos. Então isso seria um comando de rolagem, igual a ser um conjunto de pontos
. É isso mesmo. Isso significa que a barra de rolagem
vertical ao longo do eixo Y será
definida como essa barra de rolagem
e, em seguida, você acessará o método da barra de
rolagem. Desculpe, isso precisa ser configurado e,
em seguida, você passa o comando
igual a listar uma visualização Y. Então isso deve funcionar. Você está passando um
parâmetro de comando aqui, o que significa que quando
você rola
a barra, a visão vertical
da última mudará. Então, vamos ver como isso acontece. E parece que eu
estraguei alguma coisa aqui. Eu coloquei a posição
da barra de rolagem na linha um, eu acho, e na coluna três. Portanto, a barra de rolagem deve ser,
na verdade, a linha dois e a coluna dois. Vamos verificar isso novamente.
Sim, parece estar funcionando. Embora não
pareça muito centralizado porque precisamos
distribuí-lo pelas mesmas linhas em que
percorremos a caixa aqui Então, precisamos adicionar aqui
um parâmetro rowspan e configurá-lo para seis outras
barras de rolagem que parecem centralizadas Tudo bem, agora, o que nos resta é adicionar esses
widgets de botão aqui Ótimo. Então, temos seis botões. Vamos começar com o primeiro. Temos o método do botão. Janela e texto, então
os botões têm texto. A é o primeiro. E então pensei
em colocar uma largura de 12. Então, vá embora, gored. Isso seria a linha
dois, coluna três. E temos mais cinco botões. Então, eu vou colar esses seis, eu acho. Então b2b3,
quatro, quatro, Obviamente, esses botões não
têm um parâmetro de comando agora, porque mais tarde
adicionaremos aqui o parâmetro de comando, e isso decidirá
o que os botões farão. Mas, por enquanto, está tudo bem. Então, esses botões serão
alinhados na coluna três, todos eles, e todos
terão um valor de linha diferente E seis. Ótimo. Então,
vamos ver o que temos. E bum. Esqueci de colocar um número de linha na parte inferior
fechada. Sete. E agora parece melhor. Então, essa foi a forma de criar uma interface
gráfica de usuário. Obviamente, esses botões
não fazem nada por enquanto. Então, na próxima palestra, mostrarei como
anexar ações a essa interface
gráfica de usuário Então, trabalharemos no back-end e usaremos o SQLite three para interagir com
o banco de dados e buscar esses dados nessa
interface gráfica Então, espero que minhas rotinas e minhas
práticas ajudem você a criar
interfaces gráficas de usuário com EZ e nos vemos
na próxima palestra
170. Programando o backend do aplicativo: Ei, bem-vindo a
esta nova palestra. E aqui continuamos a
criar nosso programa de livraria que armazena e recupera registros de
livros de um banco de dados Até onde, você sabe,
construímos a interface gráfica do
usuário com o kinder Então esse é o nosso roteiro. Então, basicamente, temos o
front-end do nosso programa. E agora, essa é a nossa interface
gráfica de usuário. E, basicamente, o que
precisamos fazer agora é anexar algumas funções
a todos esses botões. Então, digamos, por exemplo, quando pressionamos o botão
exibir tudo, uma função será acionada
que seleciona dados de
um banco de dados SQL Lite
e, em seguida, obtém esses dados e os coloca
nesta caixa de listagem aqui Então isso significa que precisamos
criar um banco de dados, banco de dados SQLite
com SQLite três Também precisamos
criar uma tabela primeiro. Então, poderíamos fazer isso
no script, mas eu prefiro realmente criar outro script e depois
importar esse script aqui. Então, Import, vamos chamar
o novo backend do script. Então, precisamos criar um back-end desse
script Pi. Tudo bem. E agora eu quero
mudar o nome
disso do meu script de front-end para que mantenhamos
o mesmo padrão. Então, digamos que front-end. Tudo bem. Então, estamos
no script de front-end agora, e aqui estamos
no script de back-end. Então, o que isso significa é que,
digamos que você crie uma função de visualização, que selecione dados
do banco de dados e
crie essa função aqui, depois vá até
o botão Exibir tudo
e, em seguida, clique no parâmetro de
comando aqui, e isso seria igual Então, digamos que comando, só
para você ter uma ideia, comando é igual ao back-end
e ao nome da função Então, algo parecido. Tudo bem. Espero que
isso faça sentido. No entanto, por enquanto, seria ótimo se
esquecêssemos esse roteiro. Portanto, precisamos ter em mente
a interface gráfica do usuário, mas é bom não interagir
com esses widgets por enquanto Então, o que fazemos em vez disso é imprimir as saídas
das funções, as funções que construímos como strings na linha de
comando Portanto, não vamos colocar esses
dados na menor caixa, mas no terminal aqui. Tudo bem. Vamos começar a programar. Importe SQLite três. Essa é a primeira
coisa que você quer fazer. E eu vou manter uma imagem
da interface gráfica do usuário aqui para que seja fácil para
você se referir a ela. Então, precisamos criar
uma função de visualização. Mas antes disso, eu
gostaria de criar um banco de dados, ou
seja, uma conexão com o banco de dados. E eu gostaria de colocar isso
dentro da função. Então, digamos que a função connect. E temos um objeto de conexão. Então isso seria uma conexão
Scul three. E vamos chamar os
livros do banco de dados de dot dB. Tudo bem. Então, estabelecemos uma
conexão com o banco de dados. Em seguida, definimos um
objeto cursor como esse. E, em seguida, precisamos
executar a instrução SQL. Então, objeto do cursor, execute
e coloque aspas duplas, inserimos a instrução SQL. Portanto, temos um banco de dados e também precisamos de uma tabela
no banco de dados onde armazenar as informações do
nosso livro. Agora, pense sobre isso. Usuário quando você fornece este programa ao usuário, ele executará o programa. E toda vez que eles
executam o programa, seu script precisa
verificar se há uma tabela existente no banco de dados
do livro. Então, se houver uma tabela, você diz, não crie a tabela. Se não houver uma tabela, você
gostaria de criar a tabela. Portanto, crie uma tabela se não existir. E vamos chamar um livro de tabelas, só para diferenciá-lo
do nome do banco E então você gostaria de
passar alguns parâmetros. O primeiro parâmetro que eu
gostaria de passar é o ID. Portanto, não confunda isso
com o número ISBN. A identificação do livro, é apenas um número que
começará do zero e será
incrementado automaticamente em um para que tenhamos controle de quantos registros
temos no banco Portanto, é uma boa ideia
ter esse ID aqui, que seria um número inteiro, e você precisa
configurá-lo como chave primária Então, essa é uma
coluna obrigatória na sua tabela. Então você tem título
como texto, autor, como texto aqui como inteiro, e ISBN, que também é um
número inteiro Tudo bem, é isso.
Você deseja confirmar as alterações e, em seguida,
fechar a conexão. Tudo bem, então criamos
uma função de conexão. Mais tarde, quando
executaremos esse script, então o script de front-end, e então você importa o back-end, esse script, o script
do back-end. Portanto, o código do
back-end será lido pelo Python. Mas se você não tiver
chamado essa função, esse código não será executado. Então, o que você quer fazer em vez disso
é ter essa função. Executado sempre que você
executa essa função. Então você executa o front-end
e isso importa o back-end, então ele executa todo o código E essa linha aqui é executada. Portanto, a função será executada
sempre que você executar o front-end. Tudo bem. Espero
que isso faça sentido. Ou deixe-me
explicar isso melhor rapidamente. Portanto, temos um script A dot pi e temos um script B dot pi. E no script A dot pi, importamos o script B. E o que temos
no script B é uma função PU que
imprime algo na tela. Ei, e salve isso e
salve isso também. Então, quando você executa um ponto pi, nada acontece por enquanto, porque você acabou de
definir seu script. Mas se você chamar o
script aqui, certo, food, safe, e executar A novamente, desta vez você obterá a
saída da função. Então essa é a ideia.
Obrigado. E voltando ao nosso
roteiro do mundo real. Tudo bem. Agora temos a função de
conexão. Vamos começar criando uma função de inserção que inserirá alguns dados
no banco de dados. Então, estou começando com a função de inserção porque essa é uma função
mais fácil do que a outra. Então, eu gostaria de
começar pelas coisas mais fáceis. Inserção de desenvolvimento. Então é
assim que eu chamo minha função. E pense que você
tem quatro entradas lá. Portanto, você espera que
o usuário insira o autor do
título, o ano
e o número ISBN. Então, você quer passar quatro
parâmetros aqui e ISBN. Tudo bem. E então, é
claro, você precisa
se conectar ao banco de dados. Como essa função aqui, ele apenas se conectará
ao banco de dados temporariamente, verificará se há uma tabela e
fechará a conexão. Portanto, você tem uma
conexão fechada aqui, ao pressionar o botão de inserção ao pressionar o botão de entrada, você precisa criar uma nova
conexão com o banco de dados. E deixe-me ir em frente e
pegar essas duas linhas
também , porque também precisamos
delas, certo. E aqui é onde executamos nossa
instrução SQL específica entre aspas. Então, o que o
botão Adentry fará é inserir. No livro, então tabule os valores do livro. E aqui está um truque agora. Temos um ID aqui, então esse
é um valor de incremento automático, então não precisamos
passá-lo manualmente E o que podemos fazer em vez disso
é passar um novo valor aqui. E o Python entende isso
e criará
o ID automaticamente E então temos
quatro pontos de interrogação, um para cada um dos nossos valores. Em seguida, você precisa
passar seus parâmetros como um segundo parâmetro
da função de execução. Então, como uma tupla aqui, título aqui e ISBN. Tudo bem, deixe-me escrever
outra função, e então executamos o script para testá-la e ver
como está indo. Então, definitivamente, digamos que
a função de visualização. Então, isso buscará todas as
linhas de dados da tabela. Então, copiamos isso
e os colocamos aqui. Então, nos conectamos ao banco de dados, criamos um objeto cursor e executamos
uma instrução SQL. E então, como essa
será uma instrução de seleção, não realizaremos nenhuma
alteração no banco de dados, então não precisamos de um método de
confirmação aqui. E isso é realmente
muito simples. Selecione tudo do livro. Então, você realmente precisa devolver sua seleção
como uma queda. Em seguida, você pega essa seleção e a coloca
na caixa de listagem. Então, você quer que a
função de visualização retorne uma queda. Então, digamos que rose, igual a cur fetch all, você pode
fechar a conexão, mas seus dados permanecerão
armazenados na variável rose,
então você pode simplesmente retornar as linhas aqui.
Tudo bem. Então, vamos testar o script agora. E a maneira de experimentá-lo seria usar uma declaração
impressa. Então, gostaríamos de chamar insert
e, em seguida, inserir
alguns dados manualmente. Portanto, no programa real, essa função de inserção será executada
em algum lugar na entrada do anúncio. Botão. Mas, por enquanto, precisamos manter as coisas simples e alcançar nosso objetivo
passo a passo. Insira, vamos passar alguns
valores aqui no título. Digamos que o C e, em seguida, o tablet
do autor John. Tudo bem. E aqui está um número inteiro, então você só precisa passar um número e o ISBL
também é Portanto, não é necessário
colocá-los entre aspas. E então você também deseja imprimir a
saída
da função de visualização. Ótimo. Então, vamos
ver como isso acontece. Esse seria o script de
back-end. Ótimo. Então, o registro foi inserido
no banco de dados e impresso
a partir da função de visualização. Se você executar o script novamente, obterá dois registros porque a função de inserção foi
executada duas vezes. Tudo bem. Parece
estar indo bem. Então, o que mais temos? Temos uma função de busca. E implementaríamos
uma pesquisa ou. Então, isso significa que o
usuário inserirá um título ou nome do autor ou o
ano ou o número ISBN, ou poderá optar por inserir todos
eles ao mesmo tempo. Mas se digamos que ele
entre apenas no ano, ele obterá todas as linhas
correspondentes a esse ano. Então, aqui também precisamos passar
quatro parâmetros. Ben está bem. E então precisamos dessas linhas de código, então conecte-se ao banco de dados, objeto
cursor e execute. Então, vamos ficar aqui por um tempo. Queremos selecionar todos os
livros em que o título é igual a algo ou o autor
é igual a algo ou o ano é igual a
algo ou ISBN E então o segundo
parâmetro seria a tupla
dos argumentos, PHTaleSBN Em seguida, precisamos buscar todas as
linhas que serão retornadas dessa consulta e
armazená-las nessa variável de linhas, fechar a conexão e, novamente, retornar as linhas All right Um problema aqui, porém, que podemos encontrar é que
o usuário pode querer passar, digamos, o
nome do autor apenas para as entradas. Portanto, essa função
obterá apenas os argumentos para o parâmetro author. Esses outros parâmetros
permanecerão sem um valor. E então você receberá
um erro porque sua função foi projetada
para ter quatro parâmetros. Nesse caso, você gostaria de passar algumas strings vazias
como valores padrão Tudo bem. E esses dois. Então, agora, se o usuário
passar um nome de autor, digamos John Smith, essa instrução SQL
procurará por um título vazio ou pelo nome do autor John Smith ou por um Ear
e ISBN vazios e assim por diante. E retornará todas as linhas com John Smith como nome do autor. Tudo bem. Então, vamos dizer
isso e experimentar. Portanto, conectamos, inserimos na visualização de impressão. Digamos que a Terra. Estou
inserindo outro registro aqui. João Smith. Tudo bem. E então, digamos, imprima a pesquisa e você
queira passar alguns argumentos. Por exemplo, autor é igual
a John Smith. Tudo bem. Sem uma citação aqui. E
vamos ver como isso acontece. Então, temos aqui essa lista de linhas da função view porque também temos
a função view aqui. E então a função de pesquisa
retornará essa linha para nós. Então, a linha com ID três e
com John Smith como autor. Então, isso está funcionando bem. Vamos continuar e criar
uma função Dilute. Então, vamos pensar em como o usuário deseja
excluir um registro. Então, provavelmente, eles gostariam ver alguns discos
em sua caixa. Em seguida, eles gostariam de
selecionar um dos registros. Digamos que o
recorde da identificação três, a Terra, John
Smith, etc Então, eles selecionariam isso e pressionariam o botão delete. Isso significa que queremos primeiro
pegar a seleção da lista, então a seleção
da caixa de listagem, nós a pegaríamos como uma tupla, mas pensaremos
nisso mais tarde Então, vamos pegar isso como uma tupla. Essa tupla tem números de
identificação exclusivos para o ID. Portanto, gostaríamos de nos
referir a esse ID e, em seguida, acessar nossa tabela de banco de dados e
excluir a linha com esse ID. Portanto, espero que isso não seja muito confuso na função de
exclusão, então esperaríamos o ID da tupla que o
usuário selecionará E então gostaríamos de ter esse código e começar a partir daí. Então, conecte-se ao banco de dados, objeto
cursor,
execute uma instrução. Tudo bem. Vamos
ver como isso vai funcionar. Então, queremos excluir do livro onde o ID é
igual a alguma coisa. Ótimo. E então esse algo
é o parâmetro ID. Então, o argumento
desse parâmetro aqui, e esse é o nome da coluna. Portanto, não confunda isso com
esse parâmetro de
função do nome da coluna Não esqueça a vírgula aqui. E sim, é basicamente isso. Vamos salvar esse script agora e executá-lo. Nós inserimos alguns dados lá. Digamos que o sol desta vez. E então teríamos
o C, o C novamente, a Terra e o sol, então eu gostaria de deletar a Terra. E eu gostaria de
colocá-los aqui, deletar. Então, a Terra tem uma ideia de três. Então, gostaríamos de passar três aqui. Em seguida, visualizaríamos todos
os registros atuais depois de excluí-los. Tudo bem. Então, aqui estão nossos registros, e a Terra desapareceu.
Então, está funcionando muito bem. Novamente, como eu disse, esse ID
será extraído da tabela Portanto, a tupla terá
o ID como primeiro item. Então, basicamente, da Tuple,
obteremos o item com índice zero e passaremos esse primeiro
item para essa função de exclusão Ótimo. A função seria atualizada. Atualizar. E, novamente, como
você deseja atualizar os registros? Então, como o usuário
gostaria de atualizar um registro? Bem, novamente, eles
podem esperar selecionar uma linha da caixa de listagem da caixa
de listagem do Tinder is, e os valores dessa barra são
exibidos nos widgets de entrada Então, a partir daí, o usuário
pode querer alterar uma
dessas células dessas entradas
e pressionar a parte inferior de atualização. Então, novamente, obteremos a
seleção na caixa de listagem e,
em seguida, nos referiremos à ideia. Portanto, identifique aqui como primeiro parâmetro, mas também gostaríamos de obter os novos valores que o usuário deseja
dessas entradas. Então, digamos que o usuário quisesse mudar o título do
sol para a lua, digamos, e você
obteria esse título. Então, o título estará na caixa de
entrada e passe aqui. O mesmo vale para o autor aqui
e para o ISBN. Tudo bem. E então você gostaria
de atualizar sua tabela. Então, atualize a tabela onde
o ID é igual a isso. Atualize a tabela com
esses novos valores, em que ID é igual a isso. Antes de tudo, porém,
precisamos obter todas essas linhas. Tudo bem. Então atualize,
reserve e você diz pronto. Portanto, o título do conjunto de palavras-chave
é igual ao ponto de interrogação. O mesmo aqui, ponto de interrogação e ISBN é igual a ponto de interrogação. Então, atualize o livro e
defina esses valores onde ID é igual a
outro ponto de interrogação. Então, passamos um triplo aqui. Então ID, título, autor e ISBN. Então, está parecendo bom. Nós confirmamos as alterações e
fechamos a conexão. E vamos ver como isso acontece. Então, atualmente, temos
as linhas na tabela, o C, o C novamente, o sol. Sim, essas três fileiras. E vamos atualizar o sol. Então, eu quero
comentar isso primeiro e também deletar. Então, vamos nos concentrar na função de
atualização e atualização. Então, você gostaria de passar a ideia da linha para
que você queira atualizar. E então você quer passar os valores na ordem correta. Então, o que você quer para o novo
título, digamos, a lua. E então, na interface real na interface gráfica do usuário, se o usuário quiser
alterar apenas o título, ele deixará os outros
valores como estão. Portanto, esses valores serão
substituídos pelos valores existentes. Então John Smith e o ano
1919, o número ISBN. Mas, neste caso, estamos apenas em um modo de degustação para que possamos
passar esses valores. Suave. Tudo bem. E um número. Então, vamos
ver como isso acontece agora. E parece que não funcionou. O sol ainda está lá. Então,
vamos ver o que temos aqui. Atualize o autor do título
aqui, ISBN, onde estão os IDs. Portanto, o ID deve estar no
final da lista aqui. Hmm. B, você sabe, nós
os colocamos na ordem correta
que definimos aqui. Então, vamos tentar isso de novo. Hm. Agora está funcionando. Então, o ID quatro foi
substituído pela lua, John Smooth e
os outros valores. Ótimo. Então, acho que temos
o roteiro de Ben pronto. E o que precisamos agora é anexar todas essas funções
aos nossos botões. Portanto, ainda temos trabalho a fazer, e faremos isso
na próxima palestra.
171. Conectando o front-end com o back-end, parte 1: Ei, bem-vindo novamente. E esse é o empurrão final que daremos ao
nosso aplicativo. Portanto, ao final desta palestra, você terá um
programa totalmente funcional que pode armazenar e recuperar registros de livros
em um banco de dados ASQE Então, como você sabe,
temos dois scripts. Temos front e dot py, e temos o script dot pi
no back-end. Terminamos completamente com
o script Bend dot pi. Por isso, criamos todas as nossas funções que
se conectam ao banco
de dados e terceiro lugar, pesquisam,
excluem e atualizam dados. E agora precisamos ir para o script de front-end porque precisamos
ajustá-lo um pouco para
que o script de front-end
seja capaz de buscar dados do script de back-end
ou, mais especificamente,
conseguir as saídas da
função que são basicamente
tuplas Em seguida, insira essas tabelas
de dados na caixa de listagem. Então, basicamente, o usuário
pressiona um botão
e, em seguida, essas funções são acionadas e os dados são
inseridos na caixa de listagem Então, vamos começar
pelas coisas mais fáceis. A primeira coisa que eu
gostaria de implementar é colocar os registros na caixa de listagem quando o usuário
pressiona a visualização ou o botão Em primeiro lugar, como
mencionei antes, você precisa importar
o script
Ben aqui para que depois
possa se referir às
suas funções como
algo como visualização de pontos no backend,
por exemplo, para a função de visualização do
banco de dados Não, mencionei
que para anexar uma
função a uma parte inferior, você precisa ir até onde definiu essa parte inferior Então, para a função inferior, e então você adiciona um comando aqui. Então comando e depois vai
aqui vai a função. Agora, se apenas chamarmos a função
de visualização do script Bend. Então, se fizermos o Bent View View, tudo o que estamos fazendo é apenas
executar a função de visualização, então não estamos inserindo
nenhum dado na caixa de listagem Então, o que queremos fazer é ter outra função e
ter essa função, pegar os dados
da função de visualização e inserir esses dados
na caixa de listagem. Por exemplo, vamos chamar
esse comando de visualização de função. Assim mesmo. Lembre-se de que você não
passa colchetes aqui porque se você fizer isso ao
executar o script, essa função aqui,
se você fizer assim,
essa função será
executada quando o
Python ler seu script,
mas você não quer Você quer isso quando
pressiona o botão quando o usuário
pressiona o botão Essa função é executada. Então, o Tkinter sabe disso e se você simplesmente passar isso dessa forma, o
Python Tkinter o executará quando o botão
for pressionado for Então, visualize o comando, e agora você precisa de uma função de
comando de visualização. Então, vamos escrever nossas
funções aqui. O comando view. Então, pense na saída agora. A saída que estamos
obtendo é tupla. Então, vou executar
a função de visualização aqui, então imprima a visualização apenas
para ver o que temos, caso você a tenha esquecido. Então, Python Band dot pi. Então, na verdade,
temos uma lista de tuplas. Então cai na lista. E o que queremos fazer agora é inserir cada uma dessas tuplas Portanto, cada uma dessas linhas do
banco de dados é uma nova linha dentro da lista
dentro da caixa de listagem. Então, o que podemos fazer é
iterar por meio dessa tupla. Então, isso seria para, digamos, uma linha na visualização de pontos do back-end. Então, na verdade,
essa é essa lista aqui. Então isso é na verdade um
objeto e um objeto de lista. E então, a Lista 1, eu acredito, é assim que
nossa caixa de listagem é codificada Sim, então é a Lista 1. Essa é uma variável que contém
nossa caixa de locação dot Insert. E então o método insert
recebe dois argumentos. O primeiro argumento
é o índice em que você deseja inserir seus valores. Então você tem uma caixa de listagem, e essa caixa de listagem tem
vários lugares. Então, ele tem o primeiro lugar e depois o segundo,
terceiro e assim por diante. Então, se você quiser colocá-lo em primeiro lugar, insira zero. Se você quiser
colocá-lo no segundo, insira um índice
de um aqui e assim por diante. Mas pense sobre isso. Estamos examinando esses
túbulos. Então, vamos para a primeira tupla
e, em seguida,
gostaríamos de colocá-la, e gostaríamos de colocar essa tupla como o primeiro
item da lista E então
gostaríamos que o segundo fosse colocado como o segundo
item, e assim por diante. Portanto, nesses casos, o método de inserção também tem um índice especial chamado end e, em seguida, você passa a linha. Então, o que isso significa
é que as novas linhas serão colocadas no
final da caixa is. Então você tem essa linha e
ela é colocada a primeira, e então ela será colocada no final
das linhas existentes. Isso garante
que cada nova linha seja inserida no
final da caixa de listagem. Então, espero que isso esteja claro. E eu realmente gostaria
de executar o script. Então, agora temos o
front-end. Não é torta. Eu cometi um erro aqui. Então, na verdade, eu quero importar back-end aqui
assim. Execute novamente. E temos a interface. Então, vamos ver o que o VO tem. O nome backhand não está
definido na linha cinco. Então, sim, claro, não está definido porque
eu tenho um erro de digitação aqui Curvar. Tudo bem. Vamos tentar de novo. Feche isso. Vamos ver. Ótimo. Então, temos as linhas
exibidas na caixa is. Mas quando você pressiona
repetidamente , essas linhas serão anexadas
às existentes. Então, precisamos
pensar em como podemos realmente ter uma
caixa de listagem vazia quando pressionamos a parte inferior. Na verdade, isso é muito fácil de fazer. Precisamos garantir aqui que, quando essas
linhas forem executadas, a caixa de listagem já esteja vazia. Então, o que podemos fazer é listar um, excluir e zero
garante que você esteja excluindo tudo, desde
o índice de zero da linha com índice zero
até o final da última linha Então, vamos ver como isso acontece. Ve, e se você pressionar
Vegain view novamente, sempre obterá todas as linhas que você tem no
banco de dados na tabela Ótimo. Vamos agora definir uma função semelhante para a parte inferior
da entrada de pesquisa. Então o botão é esse
aqui, entrada de pesquisa. E, novamente, queremos que
o usuário insira pelo
menos um valor nas
entradas nas caixas de entrada
e, em seguida, pressione o botão de
pesquisa e espere que o
programa retorne as linhas que contêm a entrada inserida
pelo usuário na caixa de entrada. Então, novamente, você gostaria de
inserir dados na caixa. Então, novamente, você pode simplesmente chamar
a função de pesquisa ou o script Ben no comando here. Portanto, você precisa de uma função de invólucro. Então, digamos que o comando de busca. Outro bom motivo pelo
qual você deseja usar essas
funções de wrapper, por assim dizer, é que em alguns casos
como este aqui, você está passando alguns
parâmetros para a função Então, se você olhar para o back-end a função de visualização não
tinha nenhum parâmetro, mas a função de pesquisa
tem alguns parâmetros. Isso significa que você não tem
permissão para colocar colchetes aqui, então você precisa usar outra
função na qual você
chama sua função principal de
pesquisa de back-end com parâmetros, E é isso que
vamos fazer agora. Então, def search, command. E, novamente, o comando de pesquisa, o que realmente obtemos como argumento é o título de
que o usuário
inserirá o nome do autor e
aqui o número ISBN. Agora, a forma como obteremos esses parâmetros
é
a partir dos widgets de entrada Então, onde está a entrada, a entrada. Aqui estão os widgets de entrada, e você deve
se lembrar que temos esse objeto string var aqui Essa variável que
tem a string do tipo de
dados será
fornecida como um valor, o texto ou o número que o usuário insere no
widget de entrada Portanto, tenha isso em mente.
Vamos continuar aqui e a primeira coisa que você quer fazer é listar um ponto de exclusão. Então você quer esvaziar a lista. Tudo bem. E então
você precisa percorrer a saída da
lista de back-end porque, você sabe, nesse caso,
vamos executar isso rapidamente, ou seja,
o script de back-end Então, estamos
procurando o nome do autor John Smith, backend dot pi Tudo bem, não temos nenhum
John Smith no momento, então vamos procurar John Smooth. Então, temos uma lista vazia lá. Salve novamente e você verá
que temos uma lista de derrubadas. Então, neste caso, temos apenas uma tupla,
mas você entendeu Isso significa que precisamos
iterar até quatro, filar novamente no
back-end, pontuar, pesquisar E aqui você precisa ter cuidado. Portanto, a função de pesquisa
tem parâmetros e o primeiro parâmetro
será o texto do título. Portanto, o texto que o
usuário está inserindo no entrada, widget de entrada de
texto No entanto, não terminamos porque o texto do título é, na verdade,
uma string, um objeto,
portanto, não é uma string simples. E o que precisamos fazer é na verdade, acrescentar um método
get aqui, e isso produzirá
um objeto string Portanto, se o usuário inserir a tarifa John
Smooth no widget, isso produzirá uma string
John Smooth simples Então, espero que isso faça sentido. Crie o texto novamente, obtenha o método. Em seguida, temos o ano text dot Get e, por último, o ISBN text dot Get Então, para um na lista a função de pesquisa
exibirá para nós quando pesquisar
no banco de dados, simplesmente queremos inserir novos valores no final
da lista, assim mesmo. Eu posso ver que o destaque da sintaxe não
está funcionando aqui, então provavelmente tenho
algum tipo de erro de Estou faltando uma coluna aqui. Então, agora quatro e cinco eram
coloridos em roxo. Ok, então vamos experimentar
o script de front-end. E vamos procurar o
autor John Smooth. Bem, obviamente, eu
pressiono o botão do orifício de visão, então eu tenho tudo aqui. Então você quer pressionar o botão
Pesquisar. Tudo bem. Pesquisar pesquisa. E
sempre mostra John Smooth. Se você disser “ver orifício”,
ele mostra tudo. Então parece estar funcionando. E o próximo é na parte inferior da entrada. Então, o usuário pressiona na parte inferior
da entrada. Eles esperam que os
dados que estão digitando nos quatro widgets de
entrada sejam
armazenados Eles não sabem onde,
mas serão armazenados em algum lugar e
poderão recuperá-los. Isso significa que você precisa chamar
a função de inserção
aqui no script Bend. Portanto, essa função obterá
esses quatro argumentos. Portanto, o valor em torno dos widgets de
entrada, e ele os colocará
na tabela do livro fácil quanto isso. Então,
a primeira coisa que podemos fazer é ir para a parte inferior da entrada de
adição. Então, aqui, e depois adicione uma função de
invólucro aqui. No comando. E então criamos uma função de comando
Adicionar. E isso é bem
simples, na verdade. Basta dizer inserção de ponto no final e aqui você passa esses valores. Então, vou copiar isso
e pagar um pouco aqui. Então, vamos experimentar isso. Vamos tentar adicionar algumas entradas. Digamos que árvores e grama. Digamos que fui areia, ano de 1917, e basta colocar um O lá para o
ISBN e adicionar uma entrada Portanto, a entrada provavelmente
foi adicionada ao banco de dados, mas não vimos nada, e você pode vê-la com
uma função VL, provavelmente Então, se eu pressionar VL, vou ver árvores e grama Mas seria bom que, ao
adicionarmos uma entrada, essa entrada, a nova entrada seja exibida
aqui para que o usuário saiba que a entrada foi
adicionada com sucesso ao banco de dados. Então aqui estão as árvores e a grama. Então, vamos
fazer algo para que a entrada seja mostrada na caixa de listagem quando
o usuário pressiona a entrada E o que podemos fazer é primeiro garantir que
a lista esteja vazia. Portanto, exclua zero para finalizar a lista. Isso nos dá uma lista vazia. Em seguida, inserimos novos valores
no final da lista. Então, quais valores? Bem, é um. Então, os valores que o usuário
inserirá, sem mais nem menos. Então, vamos ver como isso acontece. Digamos que e pastagens. Digamos que Kirk conheceu o ano de
1910 e um número lá. E isso não é bem o que
esperávamos, na verdade. E nós entendemos isso porque estamos inserindo
aqui muitos valores, de fato Então, estamos dizendo ao
Python para inserir tudo isso em um novo valor, isso em um novo, e isso também, e
assim por diante Portanto, a solução aqui é simples. Basta colocá-lo como um valor único. Então, faça um triplo e execute
o programa novamente. Um erro aqui, então
precisamos de mais um colchete
porque esse colchete aqui fecha aqui Então, desse jeito,
experimente novamente. Digamos que Warm e Elena Gomez,
1944, e um número aqui.
Adicionar entrada. E agora temos a linha
em uma única linha. Combustível, e a lente Wonder está lá. A lente de grama também está lá. Então, vamos seguir em frente.
172. Conectando o front-end com o back-end, parte 2 ++: Ok, temos
mais alguns códigos pela frente. Definimos a visualização, a pesquisa e os botões do anúncio. Então, agora temos a atualização
e a parte inferior fechada. E eu gostaria de continuar com
o botão excluir porque
o botão excluir é mais fácil de
implementar do que o botão
atualizar. Então, deixe-me chamar a
interface novamente. E, novamente, pense no usuário. O que o usuário pode
esperar é que ele queira excluir uma das
linhas, digamos, essa linha. Portanto, eles esperam selecionar essa linha e, em seguida, pressionam
o botão excluir selecionado, e essa linha desaparecerá
do banco de dados. E eles também podem querer,
ao selecionar uma linha, também podem querer ver
os dados nessas entradas, e nós também
cuidaremos disso. Então, preencheremos
essas entradas com os valores correspondentes quando o usuário clicar em uma
das linhas aqui Tudo bem Isso faz
sentido, eu acredito. E agora vamos dar uma olhada
na função delete no script
de back-end Então, o que Delete faz é esperar por um ID,
a ideia da linha, e então essa instrução
SQL procura por esse ID e exclui toda a
linha da tabela do livro em que D é igual
a esse D dado aqui Então, o que precisamos fazer é quando o usuário seleciona uma
das linhas na caixa de listagem, precisamos pegar o ID
dessa linha e
enviá-lo para a função
de exclusão do script de back-end E então a função delete
cuida da linha. Ah, bom. E, novamente, nesse caso, você também gostaria de
acrescentar algum tipo de função de comando delete aqui, na parte inferior
de exclusão Mas, neste caso,
eu realmente gostaria fazer uma abordagem de baixo para cima. Então, vamos primeiro pensar
em como vamos
obter a função selecionada
pelo usuário. Então, vamos pensar sobre isso primeiro. E você não sabe o problema, mas existe um método chamado
bind da biblioteca Kinder,
e o bind é usado para vincular uma
função a um evento Então, deixe-me escrever esse método de vinculação para que você entenda melhor
as coisas Portanto, estamos vinculando um método
aqui ao widget da caixa de listagem. Portanto, faz sentido
escrever esse método depois de definirmos
a lista. Widget Então, definimos o widget de
lista aqui, o configuramos
e, em
seguida, listamos um vínculo E o método de ligação
usa dois argumentos. Portanto, é necessário o tipo de evento e também uma
função que você deseja vincular ao tipo de evento O tipo de evento aqui, na
verdade , está dentro desses caracteres e é chamado de seleção da caixa de listagem. E então você deseja
especificar aqui uma função que retorne um
objeto de lista com uma seleção. Então, algo assim. Na verdade, esperaremos uma
tupla neste caso, uma tupla com o ID, o título, o autor, o ano
e
o número ISBN Então, vamos chamar essa
função, selecionar Linha. Então vamos em frente e
definimos essa função. Vamos definir isso logo no
começo aqui. Então, definitivamente, obtenha a linha selecionada. E essa função agora, vinculamos um
evento a um evento de widget,
essa função recebe um
parâmetro especial chamado event essa função recebe um
parâmetro especial chamado E o parâmetro event contém informações sobre o
tipo do evento. Então, o Python sabe que quando você passa isso para
o método bind, ele espera que a função
tenha esse parâmetro E depois. Então, novamente, essa função retornará
à tupla selecionada Mas antes de tudo, a forma como isso funciona é que primeiro
precisamos
obter o índice da
lista na caixa de listagem. A lista pode ter, digamos, dez linhas, e a primeira linha
terá um índice de zero, a segunda um índice de um e assim por diante, até nove
se tivermos dez linhas. Portanto, para obter o índice da linha
selecionada da caixa de listagem,
nos referimos à caixa de
listagem e, em seguida,
ao método de seleção cur da caixa de listagem Tudo bem E eu realmente gostaria de
fazer um retorno temporário
do índice aqui para
que você veja o que esse objeto é e
como ele se parece. Então, esperemos que isso funcione. Deveria funcionar. Python.
Front-end, sim. Então, na verdade,
deveríamos ter
impresso o índice aqui. Estamos apenas devolvendo,
então imprima o índice. Vamos tentar isso de novo. Então, espero imprimir
o índice aqui, sim. Então esse é o índice
de uma linha selecionada. Então isso é zero, um, desculpe zero dentro de zero, um, dois e assim por diante. No entanto, como você vê, esse não é um número simples. Na verdade, é uma tupla, uma tupla com um item Então,
o que precisamos fazer
é um truque muito simples pegar o item
com índice zero da tupla, que é o número
dois nesse caso, zero nesse caso e assim por diante E então podemos
tentar isso de novo, ver tudo, e agora obtemos números
únicos. Ótimo. Então, estamos muito perto, mas ainda
não
chegamos lá, porque precisamos obter a tupla real com todos
os valores da linha E para conseguir isso, você precisa
aplicar outro método chamado get, digamos que
a tupla selecionada Portanto, a tupla real
que queremos, a linha real que
queremos é igual a pelo menos uma que obtém o índice Então você pode lê-lo
assim na caixa mínima, pegar a tupla com o índice X. E então podemos experimentar isso Então, o que estamos recebendo aqui? Não se confunda
com essa linha. Isso está sendo impresso
porque, no script de Ben, na verdade, temos uma
função de pesquisa sendo impressa. Então, isso está imprimindo a saída
da função de pesquisa. Então, essa função
está dizendo me dê a linha com John
Smith como nome do autor
e, da próxima vez, isso não
será executado. Então, o que queremos fazer é selecionar uma linha e
imprimir a linha como uma tupla Então, isso é ótimo. Então, o que vem a seguir? Bem, em seguida, precisamos
passar o ID da tupla selecionada para a função de exclusão
do script de
back-end Vamos para o botão selecionado. O comando é igual ao comando delete. É assim que vou
chamar o roteiro, e isso deve ser feito aqui. D delete o comando. E o que temos aqui
é backend dot delete. Novamente, o método delete
recebe como argumento o ID. Portanto, temos uma tupla
chamada get selected row, então precisamos
retornar a tupla selecionada Então, se chamarmos a função agora, obtenha a linha selecionada selecionada. E precisamos do item com índice zero da
linha selecionada. Salve o script e
obtivemos um erro na linha 24. Eu não tenho a coluna
aqui. Experimente novamente. Veja, e vamos tentar
deletar a lua. Excluir. E o Python está dizendo que obter a linha selecionada falta um argumento
posicional necessário Esse é o argumento do evento. E então o Python está certo porque aqui temos
um parâmetro de evento, então precisamos passar
isso como um argumento Mas aqui estamos chamando a função sem
nenhum argumento. Então, estamos recebendo um erro. Por outro lado, não podemos
remover esse evento porque essa função também está sendo
executada pelo método bind Então, nesse caso, o herói
do dia aqui seria
uma variável global. Então, talvez você já saiba
que variáveis locais, como a tupla selecionada, são variáveis locais porque são
definidas dentro de uma função Então, se você imprimir essa tupla, fora da função,
selecione a tupla Você receberá um erro
porque o Python dirá:
Oh, desculpe, eu não
reconheço isso Esse é um objeto indefinido porque as variáveis locais só fazem sentido dentro da função Então, nesse caso, podemos usar variáveis globais. E a maneira de criar
uma variável global é usando a palavra-chave global
e declarando o nome da variável que
você deseja criar Portanto, nesse caso, se você imprimir a tupla selecionada
fora da função, obterá o valor da
tupla selecionada
e, nesse caso, o valor da tupla
selecionada seria a tupla com os valores
da linha Portanto, nesse caso, não
precisamos retornar a tupla
selecionada porque
podemos simplesmente apontar para
a variável da tupla selecionada nesse caso e precisamos corrigir nossa função
atrasada aqui Então, queremos a tupla selecionada e queremos o item com índice zero da tupla
selecionada Então, vamos executar novamente. E veja tudo e vamos
deletar a lua. Excluir selecionado. Veja tudo
e a lua desaparecerá. Então parece estar funcionando. Agora, eu gostaria de preencher as entradas com uma
tupla ou linha selecionada, se você quiser Portanto, precisamos usar
a função
de inserção do widget enter
e, na verdade, podemos escrever esses métodos dentro da função
get selected row Como você sabe que quando o
usuário clica em uma das linhas, quando seleciona
uma das linhas, queremos imediatamente preencher
essas entradas com valores E o primeiro seria
o final do título e
queremos ter certeza de que
a entrada está vazia. Portanto, exclua zero para finalizar. Exclua tudo da
entrada, se houver alguma coisa. E então E um, insira. Então, o que queremos inserir
na entrada do autor. Bem, essa seria a
tupla selecionada com índice de um. Portanto, o ID tem um índice zero. O terceiro título tem
um índice de um, e isso também seria o mesmo para
as outras entradas. Então temos E um, dois, E três e E quatro. E então aqui queremos
pegar o nome do autor. Aqui, queremos o E e
o número ISBN aqui. Ótimo. Então, espero que isso
funcione. Deveria funcionar. Portanto, veja tudo, selecione algo e falta
um argumento obrigatório no método de inserção. Acho que esqueci de colocar onde quero inserir os novos valores Então, precisamos aqui, aqui, aqui e aqui. Então, vamos ver novamente, ver tudo e agora
parece estar funcionando. Então, árvores e grama
e curvas e assim por diante. E deixe-me tentar excluir isso, excluir e a entrada desaparecerá. Ótimo. Então, agora vamos em frente. Sem perder
tempo, vamos implementar a função de
atualização Então, voltando ao nosso script de back-end, a função de atualização obtém um
ID, título do autor e ICBM Portanto, ao contrário da função de exclusão,
que tem apenas um
item, ela obtém quatro itens,
cinco itens, na verdade. Então, na função de
comando delete, passamos a tupla selecionada
com um índice de zero Agora, a função de atualização terá uma estrutura
semelhante, mas teremos
vários argumentos aqui. Portanto, temos o ID do título de
autor e o ISBN. Então, tupla selecionada
com um índice de um, tupla
selecionada, tupla com
índice de dois, selecionada, tupla com
índice de três e tupla selecionada
com índice E então precisamos
adicionar essa função à parte inferior
da atualização. Então, atualize o comando. Tudo bem. E eu esqueci
de mudar isso Comando de atualização.
Isso deve funcionar. Então, vamos ver. Esqueci de passar o
nome do parâmetro aqui. Então, comando é igual ao comando de
atualização, salve e execute novamente Vamos tentar atualizar essa linha. Então, digamos nove. Uma atualização de pressão selecionada. E mais um erro, não
se assuste com os erros. Quanto mais erros você vê, mais familiarizado você
fica com o Python É importante se
concentrar no erro, ver em qual linha você está
recebendo o erro e
tentar entender o tipo de erro e a
mensagem que você está recebendo. Portanto, nesse caso, delete recebe um argumento posicional,
mas cinco foram fornecidos Não executamos uma função de
exclusão aqui. Executamos o botão de atualização , que recebe uma função de
comando de atualização, e você acessa o comando de
atualização. Então, atualize o comando
B e delete. É por isso que estamos
recebendo esse erro. O comando update está, na verdade executando o método delete
do script Bend, então queremos
atualizar em vez de excluir E salve o script e
execute novamente. Exibir tudo. Eu realmente quero atualizar
esse número aqui. Então, nove atualizações selecionadas, veja todas e não está funcionando. E, nesse caso,
nem estamos recebendo um erro aqui, então você pode se sentir
perdido no momento. Então, o que você pode fazer
nesse caso é verificar o que você está retornando na
função de comando de atualização. Então, você sabe que pode isolar problemas
usando instruções impressas Então, digamos que você queira verificar o que está enviando para
a função de atualização. Eu conheço o problema
aqui, mas só para mostrar como você pode
solucionar os problemas. Então, imprima e
execute isso novamente. Todos nós selecionamos as
atualizações das pastagens. E você vê que a capa está
sendo impressa como está. Portanto, esse número não está mudando. Na verdade, eu não mudei isso. Então, deixe-me mudar isso de novo. Digamos que 24 e a
atualização esteja selecionada. E então você vê que o número 24 não está sendo
impresso aqui. Isso significa que estamos
enviando para o banco de dados. Esse registro, novamente,
então não estamos enviando o registro atualizado.
Então, por que isso? Se você já a
encontrou antes, quando escrevi essa função,
isso é muito bom. Se você não tiver, bem, o motivo é que
estamos enviando para o método de atualização,
a tupla selecionada E a tabela seletora é aquela que o
usuário selecionou Portanto, não são as
entradas reais que o usuário está enviando para o comando de
atualização. Então, nesse caso, nós
realmente queremos
enviar esses valores, ou
seja, os valores atuais
das entradas. Então, vou copiar isso
e colar aqui. Ok. E o primeiro topo
selecionado é o ID, então queremos manter o D da linha
selecionada porque o usuário está alterando os outros
valores, não o ID E isso parece bom. O suporte fecha aqui. Seguro. Então exclua este,
seguro, execute novamente. Vamos até isso e,
digamos, três, atualização selecionada, V
e três está lá. Exclua, veja tudo, ele desaparece. Você pode adicioná-lo novamente porque
o tem em suas entradas, na entrada, e foi adicionado novamente, e
você pode vê-lo aqui. Então, tudo está funcionando muito bem. E queremos
fechar esse programa, mas fechamos o botão, ele não está funcionando no momento, então vamos
implementar isso também. E isso é muito simples. Basta ir aqui e
comandar o Eagle 2. Então você quer destruir
a janela, certo? Então, o ponto da janela é
destruído. É isso mesmo. Salve o script. E experimente. Então, eles estão trabalhando normalmente, fecham e a janela se fecha. E
você também pode colocar um título sua janela e usar o método de título WM do objeto
da janela Título. Digamos que livro, loja. E você deve ver esse
nome na barra de título. Então, finalmente,
terminamos esse programa e sei que talvez haja coisas a
serem melhoradas, e agradecerei qualquer
sugestão para
que possamos
melhorar o programa. Os programas têm
versões do que é versão zero, você poderia dizer. E espero que você tenha achado isso muito útil e aprendido
muito com isso. Então eu vou falar com você mais tarde.
173. Criando arquivos executáveis .exe e .app a partir do script Python: Oi de novo. Portanto, temos esse ótimo programa
que funciona muito bem. E consiste em três arquivos. Então, dois arquivos Python
e um arquivo DB de pontos, onde os dados são armazenados Isso é bom. Podemos executar
os scripts assim. Então, usando Python,
obtemos o programa exibido. Mas acho que se você quiser
dar seu programa para outra pessoa , basta dizer a ela
: Ah, instale o Python e execute o programa
indo até o terminal e
invocando o Python e Portanto, isso pode
ser muito difícil para usuários que não têm
experiência com programação Então, nesse caso,
você deseja criar um programa executável autônomo que possa ser
enviado para qualquer pessoa, e eles podem simplesmente clicar
duas vezes nele e inserir dados,
recuperar dados e assim por
diante Então, nesta palestra,
mostrarei como criar um arquivo executável, e você cria esse arquivo, esteja você em um Mac, Windows
ou Linux Portanto, o código é o mesmo. Existe uma ótima biblioteca para criar executáveis autônomos Esse é o instalador do Pi. Assim, você pode instalar o
Pi Installer usando PIP E agora
é muito fácil criar um arquivo executável independente a partir
do seu Tudo o que você precisa fazer é chamar o instalador do
Pi e
apontar para o seu script. Então, nesse caso, nosso
script principal é front and dot py. Então, esse
é um script que contém todo o código e também importa
o script de back-end. Então, queremos apontar
para esse arquivo. E se você deixar assim, obterá um arquivo dot X
se estiver no Windows, arquivo, se estiver em um Mac E junto com esses arquivos, você também obterá vários outros arquivos
associados ao seu programa. A vantagem disso
é que fica mais fácil solucionar quaisquer
erros que você possa obter Então você tem muitos arquivos
e então você pode ir até esses arquivos e encontrar
o erro e assim por diante. Mas se você quiser ser prático, você gostaria de passar
um parâmetro aqui. Chamou um arquivo. Então, isso criará um único arquivo
executável para você. E nesse formulário, você também verá a linha de comando do
terminal exibida no plano de fundo da sua interface gráfica de usuário. Então, se você não quiser isso, você pode especificar
outro parâmetro chamado windowed
desse jeito e executar E você terá que esperar um pouco. E meu executável foi criado. Então, se você estivesse em um Mac,
isso seria um arquivo. Então o meu está aqui
na pasta do disco. Então, nesta pasta, eu posso procurar aqui. Então front-end dot x. Se você executar isso,
você obterá a janela. E, como você pode ver, você também tem os livros que o
arquivo DB gerou. Então, por padrão, isso só
cria um arquivo executável. Então, ao executar o
programa pela primeira vez, lembre-se de que tínhamos
uma função de conexão no script de back-end Então, essa função cria um banco de dados. Então foi isso
que isso fez. E se você visualizar tudo agora, você não tem nenhuma linha, então você não tem nenhum
dado porque isso foi criado do zero. Portanto, caso você queira ter
o banco de dados existente, forneça ao usuário o arquivo executável
e o banco de dados existente que você tem Então, por exemplo,
digamos que isso não exista, e eu possa acessar meu banco de dados
existente
e, se eu colocá-lo aqui, Python saiba onde
pesquisar o Agora, se você visualizar tudo, obterá os dados do banco de dados
existente. E podemos fazer um teste rápido. Vamos adicionar um livro, o ótimo curta D Taylor do ano 1913 e
colocar um número lá Na entrada, e a entrada
é adicionada ao banco de dados. E você pode fechar o
programa e pronto. Espero que você goste disso. Te
vejo na próxima palestra.
174. O que é programação orientada a objetos (POO): Olá, bem-vindo a esta nova seção em que você aprende sobre programação
orientada a objetos, geralmente chamada abreviadamente de OOP Agora, se você tem experiência
com programação, esse provavelmente é um conceito
familiar para você porque o OOP é usado na
maioria das linguagens Mas presumo que você não saiba nada sobre programação
orientada a objetos, então vou explicar o conceito
desde o início. Agora, existem várias
definições de OP, e algumas são muito complicadas Mas acredito que a melhor
coisa a saber é que programação orientada a
objetos é apenas uma forma de
organizar seu código. Isso significa que o OOP não é obrigatório. Portanto, você pode simplesmente usar
funções para criar um aplicativo, como fizemos aqui com nosso aplicativo de
livraria, e muitos programadores
optam por não usar a programação orientada a
objetos
para organizar seu código, então eles não usam a maneira OOP de escrever seu
código, em No entanto, é geralmente aceito que, se você tiver
mais de duas funções, aplique operações
ao mesmo objeto. Por exemplo, um
programa que aplica operações a uma interface do Kiner Então você tem essas funções de
retorno de chamada. Portanto, você deve organizar essas funções em
algo chamado classe. Agora, como a programação
orientada a objetos é um conceito complexo, eu não incluí isso no
início deste curso. Então, eu queria que você primeiro construísse alguns aplicativos
usando funções, o que é mais intuitivo, depois passasse para a programação
orientada a objetos. Então, de volta ao nosso aplicativo de interface gráfica
do usuário. Então, o objeto aqui, eu estou falando sobre objetos, e o objeto aqui
é a janela inteira com botões e outros
widgets também Agora podemos colocar todos
os atributos que definem esse
objeto, ou seja, essa janela, como o título dos
botões, os rótulos
e também as funções de retorno de chamada anexadas a esse
objeto dentro de uma classe Então, em nosso aplicativo,
não usamos classes,
usamos funções. Então, esse script aqui não se aplica à programação
orientada a objetos, e colocar esse
objeto dentro de uma classe significa que estamos organizando
o código em uma classe, que cria um objeto, isso chamamos isso de programação orientada a
objetos. E o uso de classes para
organizar seu código é chamado de programação
orientada a objetos. E o que vou fazer a seguir é no meu script de back-end, onde
tenho as operações do banco de dados. Vou transformar esse script colocando isso dentro de uma classe. E depois disso, você
pode fazer o mesmo com
a
interface de front-end para praticar programação
orientada a objetos. Agora, meu objetivo aqui não é treinar você
a escrever aulas. Primeiro, quero que você
entenda as aulas, e muitos recursos de aprendizado explicam a programação
orientada a objetos dizendo algo como criamos uma classe que
cria um objeto de cachorro, e um cachorro pode aquecer
e latir e assim por diante. Esse é um bom exemplo para treinar para aprender a
sintaxe de uma classe Mas ei, o que é um
cachorro na programação? Quer dizer, você pode coçar a
cabeça o dia inteiro
tentando criar um cenário em que você
teria um cachorro como objeto
em seu aplicativo. Esse ainda é um bom exemplo, mas somente se você tiver alguns anos de experiência em programação e puder
pensar rapidamente em onde e quando usar classes
com base nesses exemplos. Suponho que você não tenha
esses anos de experiência, então usarei objetos de
programação reais
nesta seção para explicar um conceito
tão complicado quanto a programação orientada a
objetos Portanto, a melhor maneira de entender OP é primeiro criar
um programa com uma abordagem conhecida de
programação orientada a objetos ,
usando funções, e uma vez
que você conhece bem esse programa, então você constrói esse
programa novamente, usando OP, e então você
entende automaticamente o que é
OP observando como
as coisas são diferentes. Então, deixe-me organizar esse
código usando classes agora e, posteriormente, criaremos um programa
mais simples do zero, onde criaremos um objeto de
conta bancária com Python e aplicaremos funções
a esse objeto
, como
sacar, depósito e Oh, isso é ótimo. E, sim, isso é sobre essa introdução. E vamos passar para
a próxima palestra e
escrever algumas aulas
175. Usando OOP em um programa, parte 1: Bom. Agora vou
transformar esse script em um estilo de programação
orientado a objetos. Então, em outras palavras, vou organizar essas funções de uma forma
mais eficiente. E só para refrescar sua memória, o que esse script faz, então temos um script de back-end
e front-end, e o front-end, o que ele faz é construir interface gráfica
do usuário, então você sabe disso E temos esses livros, arquivo de banco de dados
DB, e há alguns dados lá. E você pode pesquisar
entradas para linhas no
banco de dados em Novo e assim por diante. E esse front-end dot pi constrói a interface gráfica do
usuário, e esse back-end é responsável pela interação com o
banco de dados Então, a
programação orientada a objetos
trata de encapsular
funções dentro uma classe, então classe e
vamos chamar esse E sim, é isso, basicamente. Ainda temos muitas coisas
a fazer, mas vamos pensar no que
é essa classe de banco de dados. Bem, sempre que você
decide usar a programação
orientada a objetos, primeiro precisa pensar no objeto que deseja usar, que é o objeto ao qual você deseja aplicar esses métodos. E no nosso caso, isso seria o banco de dados. E então inserimos
dados nas tabelas
desse banco de dados e
visualizamos dados e assim por diante. Desse objeto, desse objeto, primeiro
você precisa criar um objeto mínimo ao
chamar a classe. E eu vou te mostrar como você
liga para uma aula em um minuto. Mas, por enquanto, vamos
nos concentrar na criação da planta do objeto Então você cria o blueprint
do objeto, que
é este aqui, e então você cria
instâncias de objeto usando esse blueprint, e você faz isso
chamando a classe Agora, ao chamar a classe, você quer ter
esse objeto mínimo. Então, nesse caso, isso seria estabelecer uma
conexão com esse banco de dados. Em seguida, crie um objeto
cursor e talvez verifique a tabela para garantir
que seu banco de dados tenha uma
tabela para que você possa aplicar métodos posteriormente
a
essa tabela de banco de dados. Caso contrário, o banco de dados
seria inútil. Portanto, ele precisa ter uma tabela e uma conexão estabelecida. Isso significa que você
precisa descobrir uma maneira de que, ao
chamar a classe, essas linhas aqui sejam executadas. E o Python reservou uma sintaxe
especial para isso. Portanto, a primeira função
do seu script é
chamá-la com sublinhado
duplo na
frente e no verso Então essa é uma função init, o que significa
inicializar um objeto Em outras linguagens de programação, isso é chamado de construtor, então ele constrói o objeto. Então, quando você chama uma classe, essa função é executada,
mas não as outras. Os são executados se você se
referir a eles, neste caso, seria
algo
como inserir pontos no banco de dados, e então você passa os
parâmetros, os argumentos para lá. Agora temos
algumas coisas a
acrescentar aqui no script
para que isso funcione. Mas eu preferiria fazer isso
por tentativa e erro. Nós o executamos e
veremos qual erro obtemos para que você entenda como
as coisas estão funcionando lá. O que eu vou fazer, vou chamar
essa classe como está agora. Portanto, não precisamos dessa função. Essa função desapareceu agora
porque eu a substituo por ela. Então você não chama
mais funções como fizemos aqui. Então, por exemplo, aqui estamos chamando funções
do módulo de back-end, que é como um módulo, você está importando
isso como um E neste caso, o que fazemos é a partir do
back-end, importar o banco de dados Então, importamos a
classe de banco de dados do script Becan. Então, isso disponibiliza
a classe de banco de dados para nós. Então, o esquema do banco de dados. Então, isso é apenas um modelo. Agora precisamos criar um
objeto a partir desse modelo. Então, vamos chamar esse banco de dados de
objetos. Isso será igual ao banco de dados. Então, a classe e, por enquanto, não
vamos passar nenhum
argumento para lá. Em seguida, precisamos substituir essas referências para
não fazermos mais back-end. Nós fazemos banco de dados dessa visualização. Portanto, estamos nos referindo
à função
de visualização do objeto do banco de dados, que é uma instância
dessa classe. Ótimo. Então, vou substituir esses outros por banco de dados. Então, volte e substitua
isso, substitua, substitua. Sim, é isso mesmo. Esse é o nome do script, e
deveria ser assim. Fuja aqui. Ótimo. Agora vou
prosseguir e executar isso. Portanto, não espere que isso funcione, mas precisamos examinar
atentamente o erro, tentando entender
o que ele diz. Então, rastreie o arquivo fronten
dot pi Linha quatro. Aqui. Não são necessários
argumentos posicionais, mas um foi dado. E o que está acontecendo aqui agora é que, quando você chama a classe, essa classe cria uma instância de objeto e a
armazena nessa variável. E então ele envia essa
instância de objeto para essa função. Então, deixe-me dividir isso à
direita para que tenhamos
os dois scripts aqui. Então, o front-end
e o back-end. Então, basicamente, essa instância do
objeto de banco de dados está sendo
enviada para esse objeto init Mesmo que seja
um colchete vazio. Então, isso é como uma sintaxe
oculta lá. E para corrigir isso, você precisa executar
um truque aqui. Então, diz que não são necessários argumentos
posicionais porque, na verdade, tem
um colchete vazio aqui. Portanto, é como uma função e
funções
normais se você não
coloca um parâmetro lá, mas passa um
parâmetro ao chamá-lo. A função
dirá: eu não aceito nenhum argumento posicional ou
obrigatório Mas um argumento me
foi dado, então vou dar um erro. Agora, para corrigir isso, você
precisa passar um parâmetro lá. E todo mundo passa sozinho lá. Assim, você pode passar qualquer palavra
que ainda funcione. Mas, como convenção , para que seu código possa
ser lido por outras pessoas, você precisa passar por self Então, agora sua função init
usa um parâmetro
e, quando você chama essa classe, essa classe envia
a instância do objeto, e essa instância do objeto
entra nesse parâmetro Portanto, esse parâmetro
será substituído pelo argumento
da instância do objeto. Ótimo. Se você ainda não
entendeu isso, tenho certeza de que o fará mais tarde,
à medida que escrever mais aulas. Bom. Agora, vou salvar isso
e isso e testar o script
novamente. E ótimo. Isso significa que a classe foi inicializada
com sucesso e criou uma instância de
objeto para nós Agora, deixe-me fechar isso e
talvez adicionar algo lá. Isso não é necessário,
mas apenas para mostrar que se você quiser adicionar mais
parâmetros à sua função init, faça algo como DB
e depois substitua isso por Dib e, em seguida, aqui você passa o argumento que será passado para esse parâmetro DB Então, isso seria books dot dB, o caminho do arquivo
para nosso banco de dados. Ótimo. E se você
executar isso novamente, obterá o mesmo resultado. Então, o que está acontecendo aqui é
que o Python serve para enviar a instância do objeto do banco de dados
para o parâmetro self
e, em seguida, envia o caminho do arquivo para o parâmetro DB,
e esses parâmetros do banco de dados
enviam esse caminho para o parâmetro DB
do método connect Ótimo. Agora vamos ver como
esses métodos funcionarão. Então, temos o botão de visualização, que se pressionarmos, o que acontecerá é
a função
de visualização da classe do banco de dados, na verdade, o método de visualização da classe
do banco de dados
será executado. Então, este aqui, vamos ver se
conseguimos obtê-lo. Bem, um erro,
deixe-me fechar isso. Portanto, diz uma visão de zero argumentos
posicionais, mas um foi dado Então, novamente, isso sugere que quando você chama um método de classe, a classe está enviando a
instância do objeto para esse método também,
assim como fez com a função
init Isso significa que precisamos
fazer o truque novamente. Passe el lá e tente novamente, veja qual erro obtemos dessa vez. Bem, sem erro.
As coisas estão funcionando, obviamente. Então, isso é ótimo. No entanto, se você tentar os outros
métodos agora, como
inserir, provavelmente receberá um
erro. Então, deixe-me tentar isso. Então, se todos vocês,
está funcionando bem, mas se inserirmos algo, digamos olá
e sim, na entrada. Portanto, insert usa quatro argumentos
posicionais, mas cinco foram fornecidos. Então insira. E esses valores estão sendo
passados para esses parâmetros, mas também estamos passando
a instância do objeto. Então, vamos continuar, e eu também farei o mesmo com
a pesquisa. Exclua e atualize. Sim, isso é o que
temos. Parece bom. Vamos tentar novamente. Então, veja tudo e adicione uma entrada. Sim,
parece que está funcionando. Veja tudo e aqui
temos Fechar. Então, pudemos criar uma classe e colocar todas as
funções dentro da classe. Então, temos um programa
organizado agora. Então isso é programação
orientada a objetos, mas a
programação orientada a objetos não é simplesmente colocar algumas
funções dentro da classe. A programação orientada a objetos
tem a ver com um bom design. Portanto, esse script provavelmente não é o melhor design que
podemos criar, por que
não estamos fazendo uso
das vantagens reais que
temos ao usar classes. Então, o que quero dizer é que aqui estamos criando
esses métodos
e, em cada método, estamos executando algumas funções
próximas e também criando uma conexão
em cada um dos métodos Portanto, podemos reduzir
ainda mais esse código removendo
as ações repetidas. Então, em uma aula, o que você
precisa pensar é em uma maneira de construir algo
primeiro, na função init E então você se
refere a esse algo
nas outras funções
nos outros métodos. Então, estamos falando
sobre métodos aqui. Portanto, mesmo que nosso
roteiro esteja funcionando bem, na próxima palestra, iremos aprimorar o design dele.
Então, nos vemos lá.
176. Usando OOP em um programa: Bom. Conseguimos
transformar nosso script, que foi construído usando funções, e criamos uma classe e colocamos essas funções
dentro dessa classe. Então, eles agora são chamados de métodos. E embora esse seja
o uso de uma classe, ainda não
é o melhor uso do paradigma
de
programação orientada a objetos Porque temos um banco de dados aqui, um objeto de banco de dados que
está sendo criado, mas não o estamos
tratando como um objeto sólido, então o estamos abrindo e
fechando em todos os métodos. Então, o que eu estou pensando é que criamos uma conexão
quando ligamos para a turma. Então, quando essa função
é executada, criamos uma conexão lá e mantemos essa conexão aberta. Portanto, não incluo esse método
close lá, mas deixo o método commit
caso não haja uma tabela, e uma tabela será criada e as alterações serão
confirmadas na conexão aberta. Agora, como temos uma
conexão aberta lá, não
precisamos estabelecer
uma nova em cada método. E nem precisamos criar um objeto cursor porque o objeto cursor está
sendo criado aqui. Então, nos livramos dessas duas
linhas em cada método. Então, em vista, temos um
objeto cursor quando vamos aqui
e, em seguida, executamos essa
instrução nesse objeto cursor. Então isso é bom. Então vamos até aqui,
esses dois também. E para o método de exclusão. Uma atualização também. Ótimo.
Agora, vamos ver como isso acontece. Deixe-me aproximar isso. Então, chamamos o script de
front-end em que
estamos criando uma
instância do nosso objeto. Até agora tudo bem. Exibir tudo. E diz que uma curva de nome não
está definida na linha 17. Então, executamos o método view. E o que o método view
faz é tentar encontrar uma variável declarada variável
dentro da função. A variável curva,
ela não a encontra, então ela verifica se
há uma variável fora da função
e ela não a encontra. Na verdade, há
uma variável que
foi declarada
nessa função init, mas essa é uma variável local Isso tem valor somente
dentro dessa função. Você não pode acessar isso
fora da função init. Mas se nos referirmos
ao argumento próprio, que é o objeto do banco de dados e vermos o que obtemos.
Deixe-me fechar isso. Salve isso e veja tudo, e agora temos outro
tipo de erro. E diz erro de atributo.
Então, deixe-me fechar isso. Portanto, observe cuidadosamente
aqui e diz que o objeto do
banco de dados
não tem curva de atributos. Isso está na linha 17,
então esta aqui. O objeto do banco de dados, esse
é esse aqui. Portanto, self foi
substituído pelo banco de dados, que é o objeto
criado por essa classe. Esse é um atributo
desse objeto. E para corrigir isso, precisamos
criar um atributo lá. Então, dizemos
cursor de ponto automático dot cur, conexão
Eagles Portanto, o método do cursor
do objeto
de conexão da biblioteca QSt three Agora, se tentarmos novamente o código, ele diz que a curva do nome não está
definida na linha oito. Agora que criamos
um atributo. Isso está tentando encontrar
a curva variável, a curva variável local, que não está nessa
função porque agora é um
atributo da classe. Isso significa que precisamos nos
referir a si mesmo aqui também,
ao objeto e, em seguida, à execução da
curva e assim por diante. Então, se tentarmos isso agora, obteremos outra curva de linha não
definida na linha 18. Então, aqui, isso significa que você
precisa fazer o mesmo e não temos mais nenhuma variável de
curva. Temos o atributo cur. Então, agora, se eu executar isso novamente, provavelmente
receberei um erro
sobre a conexão desta vez, a variável con. Todos nós não estamos
definidos na linha 19. Então, novamente, essa
função de visualização está
tentando encontrar a variável
con connection, então confirme automaticamente aqui
e aqui também. Então você declara o
atributo ali
e aí você confirma
as alterações aqui embaixo E a autoconexão está próxima. Então, isso parece bom agora. Uma rosa é igual a isso. Portanto, rose é apenas uma
variável local criada aqui
e, em seguida, retornamos a
rosa obtida dessa expressão Então, esse método retorna
isso quando está sendo chamado neste
script, aqui mesmo. Bom. E sim, deixe-me tentar
o que temos neste momento. Mm, linha sete, nome
C, não está definido. Ah, sim, precisamos fazer
o mesmo com esses dois, e tudo parece bem agora. Então, vamos tentar novamente. Sim, veja tudo, e agora
temos os dados lá. Mas quando eu pressiono
pela segunda vez, recebemos mais um erro. E por isso diz que não pode operar em um banco de dados fechado.
Então, por que isso? Bem, eu pressionei o botão de
visualização uma vez e esse método foi executado. Então, o objeto cursor
conseguiu buscar esses dados
e, em seguida, fechamos
a conexão Eu devolvi as fileiras.
Então, conseguimos colocar essas três fileiras lá. Mas então, quando eu pressiono o
botão de visualização pela segunda vez,
o método de visualização enfrenta uma conexão
fechada. É por isso que
você percebe que isso não pode operar em um erro de
banco de dados fechado. Então, veja o que obtemos. Então, veja tudo, está
funcionando bem. Sim. Isso significa que podemos prosseguir
e modificar os outros métodos. Então, use o cursor automático e
a conexão automática e remova o fechamento. Vamos pensar em fechar
a conexão mais tarde. Portanto, não se concentre nisso agora. Apenas tente fazer com que
esses métodos funcionem, eu aqui, eu
ali e ali. Novamente, para o método Dalit, remova o fechamento da conexão E tudo deve
funcionar bem neste momento. Então, vamos ver se
tudo isso está funcionando. Vamos procurar alguma coisa. Vamos ver e pesquisar a entrada. Oh, temos um cursor lá. Portanto, curr não está definido
na pesquisa. Ah, sim. Desculpe. Ok, novamente,
todos nós vamos ver a entrada de pesquisa. E mais um erro de nome. O nome rosa não está definido. Então, por engano, eu converti essa
variável local em um atributo. Então subiu aqui, subiu ali. Ok, mais uma vez. Todos nós e agora
parece estar funcionando. Então, vamos adicionar alguns dados. Adicione uma entrada lá e não pode
operar em um banco de dados fechado. Oh, por quê? Mamãe. Porque no método de pesquisa, temos um banco de dados fechado, então fechamos o banco de dados lá. E eu esqueço isso, então não temos mais métodos
fechados, não Então, vamos tentar mais uma
vez . Desculpe por isso. Adicione a entrada e agora
parece estar funcionando bem. Ótimo. Então, tudo parece bom, exceto que não temos mais
o método fechado
porque não podemos manter esse método nos métodos
de nossa classe, porque você viu isso quando
temos esse método lá e acabamos
com esse erro. Ou você pode deixar o código
sem o método fechado. Mas você acabaria tendo
alguns problemas mais tarde porque se você tiver alguns métodos que não foram confirmados
, quando outro programa
se conectar ao seu banco de dados
, esses dados
serão confirmados. Com a próxima operação. Então, às vezes, isso
bagunça algumas coisas Então, via de regra, você deve
fechar a conexão. E para fazer isso, há outro
método especial que você pode adicionar à sua classe,
como este aqui, mas esse outro é para
destruir seu objeto Isso se chama acordo. Então, para excluir, isso também obtém a instância do objeto
como parâmetro. Então esse método é aplicado, é executado quando você
chama uma instância
da classe, como estamos fazendo
no script de front-end aqui, enquanto este aqui é executado
quando essa instância é excluída do script, o que acontece quando
o script é encerrado Portanto, antes que o script seja encerrado, esse método será executado E o que queremos fazer aqui é conexão
automática dot dot Close. Então, isso deve resolver o problema. Agora, se tentarmos isso, devemos obter os mesmos resultados. Então eu adicionei isso por
engano, mas de qualquer forma, veremos que você pode
pesquisar isso e obter a rosa com esse valor
específico. Então, essa é a minha solução, e não há uma
maneira padrão de escrever um script. Portanto, pode haver outras
alternativas para resolver esse problema e
criar esse aplicativo. Portanto, você também pode
optar por adicionar um método lá ou aqui na interface
gráfica do usuário. Então, você pode fazer algo
como adicionar um botão, como o botão Confirmar
, e aqui você adiciona outro
método chamado Confirmar. E então você provavelmente remove todos esses métodos de confirmação desses métodos
dos métodos de suas operações de escultura E então você coloca esse método. Então, um método commit dentro desse método
de commit da sua classe. Então, quando a
pressão do usuário é confirmada
, você confirma as
alterações no banco de dados. Então essa seria
outra solução, mas foi isso que descobrimos neste caso específico. Então, espero que você entenda
algumas coisas agora, e isso raramente é usado. Então, normalmente você só precisa usar nele e depois
os outros métodos. Mas isso é apropriado
quando você deseja aplicar algo pouco antes de sair do programa. Então isso é ótimo. E na próxima palestra, escreverei outra aula Então, vamos pensar em
como modelar um problema, que consiste em
criar algum tipo de objeto de conta
bancária em que
restauramos um saldo de dinheiro. E então retiramos e depositamos
dinheiro nesse saldo. Agora, como exercício, você pode converter esse script, parte
vendida do skiner do programa,
o front-end em uma forma orientada a
objetos Então você coloca isso dentro uma classe e
tenta encontrar uma boa solução. Também fornecerei
uma solução para isso. Mas antes disso, eu gostaria que
você se testasse para praticar um pouco de
programação orientada a objetos. Sim, isso é bom com isso. Te vejo
na próxima palestra.
177. Criando uma página de login de usuário: Oi. Nesta palestra, mostrarei como
criar um aplicativo móvel minimalista usando Python O que vamos criar é esse aplicativo de uma página
que você vê aqui. Como mostrei
no vídeo anterior, este aplicativo é na verdade
um aplicativo de várias telas Então, quando você clica em Login, você vai para outra
tela e depois se
inscreve em outra
tela e assim por diante. Mas nesta palestra,
vou
mostrar apenas o aplicativo mínimo, que é como um
modelo que você pode usar para escrever qualquer outro aplicativo, não importa se eles têm apenas
uma tela ou
várias telas Então, vou manter essa
captura de tela aqui na tela. Porque isso é necessário quando
você cria a interface, a
interface gráfica, para que você codifique observando seu design. Isso também pode estar em um
pedaço de papel em que
você desenhou um esboço
da aparência da interface Então, o que você precisa
é de um arquivo Python. É assim que tudo começa. E vou nomear
meu arquivo como ponto principal pi. Você não precisa
chamá-lo de ponto principal pi, mas é uma boa prática porque mais tarde, quando implantarmos nosso aplicativo, quando você converter seu aplicativo um aplicativo
móvel executável executado em um telefone celular
real, você precisará
nomear seu arquivo como principal ponto pi Portanto, é uma boa ideia nomeá-lo agora,
para que você não precise
renomeá-lo mais tarde, ou talvez você esqueça
mais tarde e receba alguns erros. Então, ponto principal pi. Esse ponto principal pi é
onde a lógica
do programa será escrita
na linguagem Python E também há outro
arquivo que você precisa criar. Você pode chamá-lo do
que quiser, mas vou
chamá-lo de design KV Portanto, você precisa usar
a extensão KV e separar a tela Vou colocar isso aqui. Coloque essa torta aqui, e eu também vou te mostrar essa foto aqui embaixo
para mantê-la lá. E quero dizer que aquela torta
deve ficar aqui. Tudo bem. Então, o que é esse KV Bem, nada com que se preocupar. Na verdade, é uma coisa boa. Há duas maneiras de criar um aplicativo móvel com o Python
e a biblioteca Kivi A primeira maneira é escrever
tudo em Python, que significa a lógica
do programa Portanto, o processamento e
tudo o que acontece em segundo plano com
os dados você processa são os logins do usuário, recuperação de dados de
observação do clima ou onde quer que seu aplicativo E a outra parte
do programa é a interface gráfica do usuário, que é essa coisa aqui. Então, algum tipo de linguagem, você precisa de algum tipo de
linguagem para dizer: Ah, um rótulo com esse tamanho de fonte
e essa família de fontes e
esse livro didático e assim por diante E você pode fazer isso em Python, mas isso não é uma boa prática É uma boa ideia escrever
essa interface gráfica no arquivo dot KV
na linguagem Kiwi Mas a língua kiwi é
muito, muito simples. Você vai
aprender isso em um dia. Então, eu não vou
te mostrar como fazer as duas coisas. Portanto, não vou
mostrar como criar um aplicativo usando os dois métodos, que significa o método de ter tudo no arquivo dot
py e o método de ter a lógica no
arquivo dot py e a interface gráfica
no arquivo KV, vou apenas
mostrar o caminho certo, que é usar Python
para lógica e KV para Isso é o que todo
profissional usa. Então, por favor, aprenda dessa maneira. E começamos com
o arquivo Python. A primeira etapa é importar todos os
objetos necessários do KV Do aplicativo qv dot App Import. Esse é o objetivo principal. Ele simboliza o aplicativo
da KV Lang Import. Se você está se perguntando como conectar o arquivo Python ao
arquivo KV,
a resposta é esse objeto
Builder, que mostrarei em apenas um minuto após importar mais
um objeto do gerenciador de tela qv
dot UIX,
Import, gerenciador de tela Import, E é isso. E então você usa o método builder that
load file, e aí você carrega o
design desse arquivo KV Então é assim que esse script
saberá sobre o arquivo KV. Certifique-se de que esses dois arquivos
estejam no mesmo diretório, ponto
principal pi design ponto KV E então você vai para o seu arquivo KV. A forma como a linguagem KV
funciona está no nível hierárquico. Portanto, é uma hierarquia de objetos. Portanto, esta é uma tela e essa
tela tem widgets dentro. Então, se você tiver apenas uma
tela, você vai escrever. Basta dar um nome
à tela e usar esses símbolos e, em
seguida, uma coluna lá. Então, eu estou chamando essa
tela de tela de login. E então, se você tiver
outra tela, digamos que, ao
clicar nesse botão, a tela de inscrição será exibida. Então você quer
escrever outra tela como a tela de inscrição. Da mesma forma. Mas, por enquanto, teremos apenas uma tela. E se você está se perguntando, como
consegui essa cor roxa bonita? Bem, isso é
destaque de sintaxe para a linguagem Kiwi, e você pode usar uma extensão,
a extensão Então, basta pesquisar por Kiwi
e usar essa extensão. Então,
instale-o e ative-o. E você obterá destaque de
sintaxe no código do
Visual Studio,
o que é bom Então a tela de login
tem widgets, eu disse. E depois de pressionar Enter, você deseja recuar com
uma tabulação ou quatro espaços, assim como em Python Então, o primeiro widget é então
o primeiro widget é um rótulo. Mas, em vez de fazer isso, você deseja adicionar outro
widget na parte superior do rótulo É um widget invisível, mas ainda é um widget É um layout de grade. Você não usa mais esses
símbolos. Você acabou de usá-lo para a tela. Um layout de grade, o que é,
basicamente, é o tipo de área, que terá todos
os outros widgets Então, aqui embaixo, vamos
adicionar os outros widgets, e é uma forma de separar
a área. Então, a tela. E a maneira como
eu acho que estou pensando em separar minha tela
de organizar minha tela é ter um layout de grade principal que
terá tudo, e então esse layout de grade
conterá dois outros layouts de grade Layout da grade para esta área aqui. E esse
layout de grade específico terá uma coluna e um número
indefinido de linhas Assim, você pode adicionar quantas linhas puder nesse layout de grade. Então, o que quero dizer é layout de grade
e, em seguida, outra grade. Layout. Portanto, o primeiro
layout da grade é toda essa grade, que terá apenas uma coluna. E esse layout de grade é
feito de dois layouts de grade. Esse aqui, e
esse aqui. Então esse é e aquilo é aquilo. A razão pela qual eu a coloquei dessa
maneira é porque essa área aqui tem widgets que são
organizados da mesma forma, o que significa que temos
apenas uma coluna E aqui temos duas colunas. Então, neste segundo layout de grade, vou declarar o
culto dois, o atributo E aqui, por padrão, esses layouts de grade
têm apenas uma coluna Então, vou
deixá-lo como uma coluna. E então o que você
adiciona aqui é rotulado. Esse é o primeiro
widget que temos aqui. Enter e depois tab, para que tudo fique recuado O texto do rótulo está
entre aspas, login do usuário. Então, o que temos sob
o rótulo é uma entrada de texto. O texto da entrada de texto. Não é isso que queremos aqui. O que queremos aqui é um texto de dica. Então, esse nome de usuário
que você vê
no livro didático é como
uma dica para Nome de usuário. Então, aqui estamos adicionando widgets como linhas
para esse layout de grade Em seguida, temos outra
entrada de texto com texto de dica. Senha. E então temos
um botão com login de texto. E então vamos para o
outro layout da grade. Temos dois botões aqui. Com o primeiro tem
um texto esqueci a senha, e o outro tem um texto, cadastre-se e pronto E isso é tudo que você
precisa fazer por
enquanto para acessar a tela de login. Agora, também há
outra coisa aqui que você precisa fazer. Então, vá para o primeiro
nível de indentação, o mesmo da tela de login
. Você vê aqui. Só aí, e você
quer adicionar outra regra. Então, na língua kiwi, essas coisas aqui,
nos símbolos dentro desses
símbolos são regras Essa outra regra é
o widget raiz. Então, é basicamente um widget
invisível que mantém um registro de todas
as telas do aplicativo E neste caso,
só temos tela de login. E essa tela de login
tem que ter um nome. Então, digamos que a
tela de login esteja entre aspas. Você verá mais tarde que precisaremos
desse nome
quando
nos referirmos à tela de login de dentro do arquivo Python porque
a lógica será
escrita em Python,
onde você diz que, se o
usuário pressionar esse botão, diremos
algo como screen
that current igual à tela that current Então, vamos dar o
nome da tela que o Python
mostrará quando o usuário
pressionar E isso é tudo o que precisamos
fazer no arquivo KV. Verifique se você não está usando operadores de
atribuição em vez
de colunas. Portanto, use colunas. Eu costumava cometer esse erro
quando estava aprendendo linguagem
QV porque
você está acostumado Python, onde
usa muito operadores de atribuição
, dá uma olhada no seu
arquivo e depois vai para o E o que precisamos
fazer em Python agora criar algumas classes vazias que tenham o mesmo nome
dessas regras O que significa classe. A tela de login usa o mesmo caso. Então eu uso L e S
aqui, o mesmo que aqui. Então, tem que ser a
mesma string, exatamente. E essa string tem que ser herdada
do objeto de tela. Então, será
um objeto de tela. Por enquanto, digamos que basta passar. E então você tem que
criar outra classe, que é, você adivinhou,
o widget raiz Cada regra aqui tem que ser representada por uma
classe dentro do Python O widget raiz deve ser
herdado do gerenciador de tela. Portanto, não se preocupe se esse código
for um pouco rígido por enquanto. Então você tem algumas regras que
parecem uma caixa preta. Mas pense nisso
apenas como um modelo. Você vai usar esse
modelo para todos os aplicativos, então é bom que
eu também aceite isso. E por último, essa é a
última coisa, eu prometo. Você também precisa do aplicativo principal
da classe. Então, isso é sobre o objeto do aplicativo
que ainda não usamos. Então, isso tem que ser herdado do aplicativo. Isso é um e isso precisa
de um método chamado build. Eu. Portanto, todo método
precisa de um parâmetro próprio. Portanto, esse método de construção é
, na verdade, um método de aplicativo. Você pode ver isso
se usar aqui. Então eu executei essa
linha e querido aplicativo. Você verá que build está
entre esses objetos, aqueles métodos existentes,
build. Tudo bem. E então esse método
construído retornará
o widget raiz Mas certifique-se de que esse seja o
objeto e não a classe. Então, estamos inicializando
o widget raiz aqui. Você pode ver que estou usando
os colchetes redondos. E a última coisa é que, se e depois de fazermos
isso, esse é o aplicativo agora. Estamos prontos para executar. Mas, como você vê aqui
no arquivo Python, não
estamos chamando nenhuma classe Então, a última coisa que
precisamos fazer é, obviamente, chamar a classe
principal do aplicativo. Uma boa prática a se fazer é
usar if name for igual a dois. Principal. Em seguida, você cria uma instância
do aplicativo principal e usa o método de
execução do aplicativo principal, que
é, aliás, um método de aplicativo. Então você pode ver uma corrida também
aqui, logo ali. Salve esse script e
eu vou executar agora o arquivo e
ver o que obtemos. Espero, é claro,
cometer alguns erros porque acho que não
fiz tudo 100%. Sim, não recebi um erro. Está tudo bem
no terminal, mas a interface não está
como eu esperava. Então, eu cometi alguns
erros lá. Portanto, às vezes você não recebe
um erro no terminal, o que dificulta
a solução do problema E se você não receber um erro, ele deve aparecer
no código em seu arquivo Q. Portanto, nesse caso específico, parece que o layout da grade não
está funcionando como deveria. E a razão para isso
é que eu não especifiquei quantas colunas o layout da
grade deveria ter, o layout da grade principal, mas também a
outra, a filha desse layout de grade principal. Portanto, antes de fazer uma alteração, você precisa fechar essa
janela. Eu vou aqui. Então, vou passar um atributo de culto, assim como
fiz com esse layout de grade. Então, deixe-me testá-lo primeiro com o layout da grade principal. Então é isso que obtemos. Como você pode ver,
em comparação com isso, não
estamos vendo os primeiros elementos do layout da
grade, que são um rótulo, o nome de usuário, senha e a parte inferior. Porque esses
widgets estão, na verdade, escondidos dentro dessa parte inferior da senha
esquecida Então, eles estão
em algum lugar aqui. No canto. Então, quando você não especifica essas colunas,
quantas colunas você tem, Kiwi simplesmente coloca
todos os widgets no canto
inferior esquerdo Então, se fecharmos isso
agora e também adicionarmos um atributo de chamadas
igual a um, e se eu não salvá-lo
e executá-lo novamente, verei a mesma saída. Então eu preciso salvar o script, Control S, e
depois executá-lo novamente. E desta vez vemos o que
esperávamos mais ou menos. Bem, ainda precisamos
adicionar um pouco de preenchimento e algum espaçamento entre os widgets para que pareça aqui Mas isso é o que temos
até agora, e eu acho que é bom. Então, vou fechar isso agora e considerar esse código como concluído. Mas antes de fechar o vídeo, vou me certificar de
que você entende o que está acontecendo aqui. Então, esse arquivo Kiv, todas essas coisas que você
vê aqui, layout de grade, tela de
login, botão de entrada de texto, esses são na verdade objetos
Python Alguns deles, como a
tela de login e os widgets raiz são objetos representados por classes que criamos
no arquivo Python
, na tela de login
e no As outras são classes
que você importa do Kiv. Portanto, se
codificássemos apenas em Python,
não na linguagem Kiv, teríamos que fazer
algo como, a partir Kv dot UixGridayOut Então essa é a
mesma classe que esta aqui. Mas o arquivo KV importará
esses objetos implicitamente. Portanto, ele os importará
do seu arquivo Python, como tela de login e widget
raiz, ou
da Nesse caso,
não estamos importando nenhum layout de
grade aqui Ou a mesma coisa
seria com o botão. Então, a partir de KV, UIX esse
botão Importar. O mesmo vale para o widget de texto. Portanto, não estamos importando
esses objetos aqui. Então, isso é sobre os objetos. Todos esses são objetos, e então você tem esses
atributos desses objetos. Então, se você abrir um
shell Python e importar esse objeto de layout de grade,
como mostrei aqui, e depois fizer o
layout da grade dentro de colchetes, verá que o CLS é um dos atributos
do objeto de layout de E isso é sobre os objetos. Agora, sobre a hierarquia de um aplicativo
KV, funciona assim. O mais alto na
hierarquia é o aplicativo. Então, esse objeto de aplicativo está aqui. Em seguida, vem o gerenciador de tela, que na verdade é representado
pelo widget raiz Então, o widget raiz
vem depois do aplicativo
e, em seguida, temos a tela que é representada
pela tela de login Portanto, essa tela de login é
apenas uma filha da tela. Ele se comporta da mesma
forma que uma tela. E, a propósito, nós
também poderíamos ter feito outra
coisa aqui, que eu vou
mostrar agora. Você poderia simplesmente passar a tela de
login dessa forma. E aqui, o que
você pode fazer é adicionar o Tidget raiz
que está na hierarquia, acima da
tela de login E então, na tela de login, você pode passar o nome de login. Tela exatamente como essa. E
você pode excluir isso. Então, esse seria o mesmo código, e você obteria a mesma saída, como você pode ver aqui. Então, isso indica
o que acabei de dizer: widget
raiz é pai e , em seguida, vem uma tela de login
e, dentro da tela de login, você tem um layout de grade, outro layout de grade, entrada de
texto e assim por diante No entanto, para manter o
código mais organizado, porque aqui no widget
raiz, mais tarde, teríamos que adicionar
outra tela, como a tela inscrição, e assim ela
teria seus próprios filhos E então teria
outra tela, como a tela erro de
login, para
a qual o usuário seria
enviado se houvesse um erro nas credenciais de
login Então, o código
se tornaria muito complexo. Portanto, o que
temos em vez disso
é a tela de login como regra e também o widget
raiz como regra Em seguida, especificamos que a tela de
login é, na verdade filha do
widget raiz usado aqui E assim, da mesma forma, adicionamos outras
telas da mesma forma. Então, isso é algo
a ter em mente ,
pois ajuda você a
entender melhor como o Kiwi funciona E isso é o que eu disse
sobre esse vídeo, e espero ver você
no próximo vídeo.
178. Criando um curso sobre conta bancária: Bem, nas palestras anteriores, mencionei que
criarei um programa e um
aplicativo em que
administraremos uma espécie de conta
bancária para que
tenhamos um saldo
e, em seguida, aplicaremos algumas operações, como sacar dinheiro do objeto da
conta bancária e depositar dinheiro também Vou armazenar o valor
do saldo em um arquivo de texto
simples. Então esse não é um
dos dez programas que estamos
criando no curso. Isso é apenas para
você se familiarizar com as aulas e
explicá-las um pouco mais. Então, eu vou fazer algumas
tarefas domésticas aqui. Então, deixe-me criar uma pasta aqui. E coloque todos esses
arquivos existentes nessa pasta. Então, temos os
arquivos anteriores aqui, e eu vou criar uma
nova pasta agora. Vamos chamar essa conta. E nessa pasta, eu
terei meu script Python. Então, vamos chamá-lo assim. Então, considerando,
temos esse arquivo Python e também precisamos desse arquivo de texto Estaremos salvando o
saldo atual de nossa conta bancária. Portanto, esse será um aplicativo
trivial porque, na vida real, você não deseja salvar as informações da conta
bancária, o saldo em um arquivo de texto Na vida real, você quer
salvar isso em um banco de dados real, como post gras
well, por exemplo. Mas para praticar o objeto ou aquela programação, vamos apenas salvar o valor do
saldo neste arquivo Então, esse é o nosso armazenamento. E também por
uma questão de simplicidade, trabalharemos apenas
em uma única conta. Portanto, nosso programa
poderá processar um objeto de conta porque, se
você tiver várias contas, a solução poderá
ser diferente dessa. Então, você provavelmente
teria que pensar ter uma tabela e talvez um banco de dados
seja necessário aqui. Então, vamos pensar em
nossa conta pessoal. Você pode usar este programa
para suas anotações pessoais, então talvez queira acompanhar
seu saldo e
usar este programa em Python E agora o objeto aqui
é a conta bancária. E esse objeto, devemos começar a pensar sobre quais atributos esse objeto de conta bancária deve
ter como estado inicial. Então, conversamos sobre
esse objeto mínimo, e uma conta bancária teria, é
claro, um saldo inicial. Então, vamos começar a criar esse objeto de conta
e chamá-lo de conta. Você pode chamá-lo do
que quiser, mas eu vou chamá-lo de conta. Então, nela está a primeira
função que queremos
definir e passamos
self para lá. E vamos continuar
assim por um momento. E dissemos que nosso objeto de conta
bancária terá um atributo de saldo. E no nosso caso, temos esse ponto de equilíbrio TXT, e vamos criar um valor
inicial lá Agora, para criar uma instância de
objeto, precisamos pegar esse
valor e passá-lo para nossa função init para que possamos construir esse objeto mínimo Como temos um arquivo, o que precisamos fazer é ler esse número
desse arquivo. E, naturalmente, o que você
gostaria de passar aqui é algum parâmetro como caminho do arquivo. Então é assim
que vou chamar isso e agora, se você se lembra, no aplicativo
da livraria no script de back-end, aqui também passamos um parâmetro
para a função init E então criamos
um objeto de conexão partir desse arquivo de banco de dados. Nesse caso específico, o que queremos
criar é um número inteiro,
portanto, um número desse
arquivo fora desse caminho de arquivo Então você poderia fazer algo
como abrir. Então, estamos manipulando arquivos com métodos com caminho de arquivo
aberto, e esse é um arquivo de texto, então precisamos seguir nosso
modo, que significa ler. Então, estamos abrindo o caminho do arquivo, esse arquivo no modo de leitura. Como um arquivo. Portanto, essa é apenas uma variável temporária que existe
com uma declaração. E então precisamos
ler esse arquivo. Então, algo como file dot RED. Sim, é isso mesmo. Isso
lerá o arquivo, mas você não o
armazenará em nenhum lugar. Então, o que você quer fazer é dizer que “ eu” e “equilíbrio” são iguais
ao ponto de leitura do arquivo Então, o que isso fará é salvar o valor dentro do arquivo de texto nessa variável de
instância. Portanto, essa é uma variável de instância. É assim que é chamado. Na verdade, essa é a variável de
instância e esse é o objeto, então o objeto da conta. Bom. Isso é quase bom. E também precisamos adicionar
a função inteira lá porque ela será lida
como uma string por padrão Então, precisamos converter
esse valor em um número inteiro. Sim, isso deve funcionar e deve construir
o objeto para nós, o objeto do ato com uma
balança ligada a ele. E antes de criar o método de saque semelhante, aqui
e depois o método de depósito. Eu prefiro chamar uma
instância dessa classe primeiro. Eu vou fazer isso aqui. Digamos que classifique isso
na variável da conta. Então, esse será o objeto, o objeto que
será criado a partir desse blueprint, o blueprint da
conta, onde você precisará
passar esse argumento,
o argumento para esse parâmetro, o argumento para esse parâmetro, que é balance Ótimo. E, por si só, o Python passará
automaticamente a instância do objeto da
conta Bom. Agora, isso
criará uma instância de objeto. E deixe-me imprimir
esse objeto aqui. Então, vemos alguns resultados em ação. Python, e isso está dentro da pasta da
conta e do act pi. Recebemos um erro, esse arquivo ou
diretório não existe para balance dot TXT E a razão para isso
é que também precisamos passar o diretório da conta para
lá. Então, e desta vez, está funcionando. Tivemos que passar o
diretório para lá porque estamos nessa
pasta na pasta demo, e você precisa passar
primeiro a pasta
da conta e depois apontar
para o saldo do TXT E essa é a saída. Então, diz objeto principal
da conta de pontos. Então, o objeto
da conta do módulo principal. E o que Min é é quando você executa um
script, como fizemos aqui, então você aponta para o
script com Python, o
Python atribuirá esse
nome Então, esse módulo receberá
esse nome e o script, na verdade, mas será
tratado como um módulo. Mas se você importar esse módulo. Então, se eu executei, abro um shell
interativo agora. Então, da
pasta da conta, importe. AC, o que acontece é que você também executa a
função de impressão. Mas desta vez, quando
você importa o arquivo, então quando você não o
executa como
fizemos anteriormente com a conta
Python, AC that Pi, quando você
importa o módulo, o módulo recebe o nome do
script no qual foi gravado Então, neste caso, é AC
sem a extensão. E aqui você também obtém o nome do pacote do módulo. Portanto, os pacotes são feitos de módulos, e um pacote é como uma pasta, e aí você tem vários
módulos ou um módulo, como temos neste caso. Nosso pacote aqui é
conta, então conta, e então ele tem esse módulo, e então esse módulo tem essa
classe, a classe conta. Então, isso era algo que
eu queria
mostrar pacotes,
módulos e classes. Ótimo. Agora, vou sair desse shell do Python e brincar um pouco com esse
script E o que fizemos aqui, imprimimos o espaço do nome do
objeto e não obtivemos o saldo
real como saída porque não estamos
retornando o saldo aqui. Mas se você quiser
obter o equilíbrio, você deve apontar
para o equilíbrio, e isso usa uma
notação de ponto para apontar para o objeto que contém
o atributo de equilíbrio Então, vamos ver o que
temos dessa vez. E sim, 1.000. Então esse é
o saldo atual. Como você pode ver,
você pode acessar os atributos da instância do seu
objeto
usando a notação de pontos Bom. Agora vamos adicionar esses
outros métodos lá. E o que podemos
fazer com uma conta bancária? Bem, podemos sacar dinheiro. E você sempre precisa passar
self em todos os seus métodos
e, em seguida, o parâmetro que se aplica a esse método
específico. Nesse caso, quando você
retira algum dinheiro, bem, você tem uma quantia em mente
que deseja sacar. Então você passa o valor
lá como um parâmetro. Não, só para deixar claro que você
entende o que estou fazendo. O que eu estou fazendo aqui é que eu tenho um saldo inicial que está
sendo lido desse arquivo, então esse arquivo de texto, e então eu quero permitir que o
usuário aplique operações, então
retire dinheiro desse saldo. E depois que o usuário
executa o método de saque, quero atualizar
o número do saldo dentro da instância do objeto E ainda não quero gravar esse saldo no meu arquivo de saldo. Então, eu só quero calcular
algo aqui, como equilíbrio
próprio é igual
a equilíbrio próprio Bem, isso é um saque, então menos o valor que
eu quero sacar Isso significa que isso
fará com que o autoequilíbrio seja
igual a 100 -100, digamos, e eu acabarei com
um
saldo atualizado de 900 nesse caso Que, se eu quiser, posso
abrir esse arquivo novamente aqui e depois escrever esse
saldo atualizado nesse arquivo. Então essa seria uma solução. Mas uma solução mais construtiva provavelmente
seria ter um método específico que confirme
as alterações no arquivo Portanto, talvez você queira sacar
algum dinheiro e depois depositar algum
dinheiro na mesma sessão
e, em seguida, aplicar o
método commit para salvar as alterações. Então essa é a solução que
eu quero escolher. Sim, terminamos
com o método de retirada. Agora deposite a si mesmo
e o valor novamente. Portanto, essa é uma variável local.
Essa é uma variável local. Acontece que eles têm
o mesmo nome, mas não precisam
fazer muito um com o outro. E o equilíbrio próprio é igual ao equilíbrio
próprio mais o
valor neste caso Vamos ver para que temos isso. E vou manter aqui esse
objeto de instância que está
sendo gerado. Então, estamos insaciando
uma instância de objeto, em outras palavras, e imprimindo o
saldo atual E então eu quero
sacar algum dinheiro. Do objeto da minha conta. Isso significa que eu aplico
a retirada ao objeto da conta, e a retirada exige
dois argumentos. Então, a instância do objeto, que é passada automaticamente, e depois o valor, que pode ser 100. E depois de fazer isso,
quero
imprimir o saldo atualizado. Vamos ver o que ele vai fazer. Sim, 1.000. Então, uma
instância de objeto é criada e você tem 1.000 impressos
porque aqui você tem
100, e então você tira 100 disso e acaba com 900. Ótimo. Portanto, se você executar isso novamente, notará que
uma nova instância de objeto está sendo criada novamente. Então você não tem
mais 900
como saldo atual. Você tem 1.000. Isso significa que você
precisa gravar as
alterações no arquivo se quiser
salvar esse saldo. E podemos fazer isso
usando métodos. Vamos chamar isso de commit. E passe El lá. E não penso nenhum parâmetro que eu
precise passar por esse método de confirmação
porque tudo
com o que trabalharemos são as
variáveis existentes lá. Então, isso seria
algo como abrir, bem, precisamos
abrir o caminho do arquivo, mas temos um pequeno
problema aqui porque uma variável de caminho de arquivo agora é apenas uma variável local
nesse método init Então, se passarmos aqui, essa função, esse método,
não o reconhecerá. Então, isso é um pouco diferente
do outro
script de back-end que escrevemos, porque aqui tínhamos esse
parâmetro como temos aqui Mas, neste caso,
esse parâmetro só
foi usado dentro
do método init Então, não o usamos
em nenhum outro lugar. Portanto, há uma solução para isso. Uma solução seria seguir em frente e passar por outro,
vamos chamar esse caminho aqui. Então, outro parâmetro
para o método commit. Então, quando chamamos
o método de confirmação como estávamos fazendo
com a retirada, teríamos que passar
o ponto de saldo TXT Na verdade, esse caminho
para o método commit. Embora isso funcione, ainda não
é a melhor prática
do paradigma orientado a objetos Portanto, precisamos
buscar outra solução. E isso seria tornar essa variável local
e variável de instância. E para fazer isso, você
faria algo como self e file path são
iguais ao file E o que isso faz
é fazer com que o caminho do arquivo, não confunda isso com isso Acontece que é o mesmo, mas você também pode escrever outra
coisa aqui, como qualquer coisa. Então esse é o parâmetro
da função unitária. Então, o saldo do TXC
vai para esse parâmetro. Então, o caminho desse arquivo
irá para esse parâmetro. E então você cria
essa variável de instância, e essa variável de instância
será igual a esse caminho. Mas você pode usar essa coisa aqui. Você pode usá-lo onde
quiser dentro da sua classe. E no nosso caso, gostaríamos de usá-lo aqui. Dessa
vez, abrimos o caminho do arquivo próprio no método correto, pois dessa vez precisamos escrever ou
sobrescrever com mais precisão para sobrescrever o saldo
atual, que deveria ser esse
, por exemplo Queremos substituir
isso neste arquivo. Então, como arquivo, este é apenas um
arquivo de variável temporário, gravação de pontos e equilíbrio automático de pontos. Bom, vamos tentar isso. E não recebemos nenhuma atualização
no arquivo aqui porque eu
esqueci de realmente chamar
o método commit Então, quando retirarmos o dinheiro, vamos imprimi-lo no console. E então
contabilize dot Commit sem passar nenhum argumento explicitamente porque implicitamente estamos
passando a instância do objeto Bom. E temos um erro literal inválido para
inteiro com Então, esse seria o
número inteiro na linha seis. Aqui, então, o valor que está sendo lido por esse método não
está sendo convertido em um número inteiro E o motivo é
que esse valor
desapareceu do
saldo desse txty, e isso é ler
uma string vazia Então, essa é uma
string vazia que está sendo lida desse arquivo, então você tenta
convertê-la e não funciona. Agora, a razão pela qual temos
esse arquivo vazio de string vazia aqui é quando obtivemos
o erro anterior, então aqui nosso argumento deve
ser string, não inteiro Então, o que o Python fez foi abrir o arquivo com o método, mas não conseguiu
realmente escrever um valor
dentro desse Então, o arquivo acabou vazio. Então, deixe-me escrever o valor
inicial lá, e agora devemos ser
capazes de executá-lo novamente. E sim, agora temos
o valor atualizado. Então, novamente, o que fizemos foi
criar a instância do objeto e depois imprimir
o saldo atual, que foi lido desse arquivo, que era 1.000
no início, e depois retiramos 1.000,
então o saldo foi atualizado
e, em seguida, confirmamos essas
alterações nesse arquivo, então obtemos 900 lá Agora, a mesma coisa se
você quiser adicionar, digamos, 200 e depositar. Vamos ver se isso vai funcionar. Sim, isso foi
impresso. Vamos verificar o arquivo. Sim. Então esse é o
nosso novo equilíbrio. E sim, espero que isso esclareça alguns conceitos sobre programação
orientada a objetos Se você for criativo, poderá
expandir esse script, para poder adicionar mais
métodos e talvez torná-lo mais uma aplicação da vida
real. Tão bom. E isso é
sobre essa palestra, e na próxima palestra, falarei sobre herança, e
expandiremos esse script aplicando Então, fale com você
na próxima palestra.
179. Como criar cursos por herança: Incrível. Estamos quase
terminando as aulas. Mas há um último conceito
que preciso que você saiba, que é herança Herança é o
processo de criar uma nova classe a partir de uma classe base Portanto, uma nova classe que tem todas as propriedades e os
métodos de uma classe base, mas também tem
alguns outros métodos. Então, por que fazemos isso? Bem, vou explicar isso para
você por meio do nosso exemplo. Então, aqui temos essa
planta, então essa classe. E deixe-me deletar isso para
não confundir você. Então, lá estávamos apenas
chamando as instâncias da classe. Então, temos essa classe que cria um
objeto de conta bancária para nós. Então, podemos sacar e depositar dinheiro
da conta bancária. Agora, e se quisermos transferir dinheiro
dessa conta bancária? Então, da nossa conta bancária, transfira dinheiro para
outra conta bancária. Bem, teríamos que adicionar
um método de transferência aqui. E então faça algo
simples, como equilíbrio
automático igual ao
equilíbrio automático menos a quantidade Então, passamos um
valor de transferência para lá, e isso é subtraído
do nosso saldo aqui Mas, até onde eu sei, você não pode transferir dinheiro
da sua conta poupança. Você pode transferir dinheiro da
sua conta corrente, mas não de uma conta poupança. Portanto, esse método não faria sentido para uma conta corrente. E essa conta é uma conta bancária
geral. Então, o que poderíamos fazer é talvez criar outra classe, como se pudéssemos copiar isso e criar outra classe e
chamá-la de outra coisa. E então temos todos
esses métodos lá. Então essa é uma solução. A outra solução é
usar a herança. Então é aqui que a
herança é útil. Você deriva uma classe
de uma classe base, que é uma classe mais geral como essa classe de conta aqui Então, vamos criar uma nova classe. Essa nova classe é chamada
de subclasse e será a classe base Então, novamente, você precisa usar a mesma sintaxe usada na classe Q ou lá
para criar uma Vamos chamar isso de cheque
por conta corrente. A primeira coisa que queremos fazer é criar um método init Com esse método init,
criaremos
esse objeto mínimo sobre o qual
venho falando Como em nossa classe base, também
precisamos aqui, precisamos de um equilíbrio do nosso arquivo, então precisamos desse caminho de arquivo. Mas em vez de escrever
esse código novamente, como eu disse, o que você
pode fazer é, bem ,
primeiro, criar
um método de função init
e, claro,
passar self para lá Você sempre passa o parâmetro
self, seja ele uma
classe base ou uma subclasse Então, neste método init, você deseja chamar o
método init da sua classe de conta, que significa que quando você cria uma instância de objeto de
sua classe de verificação, esse método será executado quando esse método for executado, esse método executa
a função init do
seu método de conta para que você crie esse objeto mínimo, que é o mesmo
que mas então teremos alguns métodos
extras aqui embaixo. Então, uma conta corrente é
isso mais algumas outras coisas. E aqui você
precisa passar self e o outro parâmetro necessário para
essa função init Então, aqui estamos passando
dois parâmetros, e devemos fazer
o mesmo aqui. E se eu executar isso
agora, receberei um erro. Então, por intenção,
quero que você veja qual erro obtemos. Então, deixe-me criar uma
instância dessa função. Então, verificando Ah, sim,
vamos experimentar isso. Hum, aqui. Sim. Isso está
dentro da pasta da conta, então aqui e depois ponto pi. Vamos ver. Então, a primeira coisa que isso quer dizer
é que o caminho do arquivo
não está definido na linha 21,
que é essa aqui. E a razão para isso
é que não
definimos nenhum caminho de arquivo
dentro dessa função. Assim, você pode passar isso dentro dos
colchetes iniciais como um parâmetro E então você precisa
passar isso aqui também. Então, digamos que conte o ponto de
equilíbrio TXT. Bom. E não vemos nenhuma saída porque não
estamos imprimindo nada. Mas o que aconteceu basicamente
é que uma instância de objeto foi criada e isso foi
chamado, esse método foi chamado. E essa classe também foi
inicializada. Agora, se tentarmos fazer isso o objetivo principal da herança
é fazer algo como verificar o
acesso aos métodos
da classe base sem escrever esses métodos
na sua Então, digamos
que verifique esse depósito e coloque uma
quantia lá. Então, dez. Agora, se executarmos isso, obteremos esse
erro de atributo que diz que o objeto de
verificação
não tem depósito de atributo,
portanto, isso não está
reconhecendo esse método E a razão para isso
é que
ainda não satisfizemos a
sintaxe da herança Portanto, a chave aqui é passar um argumento para nossa subclasse de
verificação E esse argumento
é uma classe base, então o nome da classe base. Digamos que, se você fizer o mesmo
agora e talvez imprimir
a saída para ver o que
está acontecendo, faça o equilíbrio automático de pontos. Desculpe, eu quis dizer
verificar esse saldo. Desculpe por isso. E sim,
agora parece estar funcionando. Então esse método foi reconhecido, e o que isso fez foi de 1.100, que era o saldo inicial
, subiu para 1.110 Então, isso imprimiu a variável de equilíbrio
da classe base Então é assim que depositamos algum dinheiro em nossa conta
corrente. Agora, queremos transferir dinheiro, então precisamos definir
um novo método aqui, vamos chamar essa transferência. Transfira a si mesmo para lá e também
um valor variável local, como parâmetro. Então, isso é apenas uma variável
local. Não tem a ver
com isso uma vez aqui. E então queremos
atualizar o saldo. Então, queremos transferir algum
dinheiro para alguma conta. Esse valor será
subtraído do nosso saldo. Então, isso significa
equilíbrio automático igual ao equilíbrio
automático menos a quantidade Agora, se tentarmos o novo método lá. Então, estamos neste momento. Vamos transferir 110. Sim. E eu esperava ter 1.100 aqui, mas consegui esse número E a razão para isso
é porque não
cometemos as alterações antes,
quando depositamos algum dinheiro Então, quando executamos
o script agora, uma instância de objeto
foi criada desde o início e ela
recebeu esse número aqui, que não foi atualizado para
isso porque não
confirmamos as alterações anteriormente,
mas você entendeu. Então, a partir desse equilíbrio, subtraindo este
aqui, obtemos Isso significa que o
método de transferência está funcionando, mas só precisamos aplicar
o método commit lá. Novamente, podemos confirmar
essas mudanças. Sim, vamos ver o que temos agora. Então, de 1.100, eu
quero transferir 100, e agora espero ter
isso atualizado para 1.000 Vamos ver. Sim, 1.000 impressos aqui e
1.000 aqui também. Então, isso está funcionando muito bem. Além disso, outra coisa que eu quero que você saiba sobre a herança é que você pode adicionar suas próprias variáveis de instância
para sua , nesse caso, nossa única
variável de instância é o saldo, que foi herdado
da classe base da conta Mas podemos adicionar nossas próprias variáveis de
instância. Então, vamos supor que essa transferência
também venha com alguma taxa. Então, quando você faz uma transferência, seu banco
cobra algum dinheiro. E você quer dar
essa taxa como parâmetro. Então, vamos
simplificar as coisas e dizer que, ao transferir dinheiro
, saldo menos
valor menos a taxa Então, não vamos aplicar
porcentagens lá. Digamos que tenhamos uma taxa de $1 por transferência. Agora, se aplicarmos o método de
transferência novamente, provavelmente
receberemos
um erro porque essa taxa é apenas uma variável
local aqui. Então, o que você precisa
aplicar agora é
transformar essa taxa em
uma variável de instância, que é
taxa própria igual a Isso significa que se você passar agora
uma taxa aqui, digamos, $1 ou qualquer outra moeda, e você a passar aqui, então isso vai para aqui, e isso vai para aqui, e isso será igual à taxa que
você está passando aqui. E então podemos usar
essa variável de instância e
usá-la nesse método de transferência. Ótimo. Agora estamos
com 1.000 lá, e deixe-me executar isso. Sim. Então 899, e eles
são os mesmos aqui, que significa 100
-100 menos a taxa, você obtém esse número E sim, espero que
você consiga ver como herança é útil para
criar subclasses a partir É isso para esta palestra, e temos
mais uma palestra E na próxima palestra,
o que vou fazer é esclarecer alguns termos da programação
orientada a objetos Então, essa será uma breve palestra, que o ajudará
mais tarde, quando você se referir à documentação, porque existem alguns conceitos
no OOP, e eu não quero que você
se confunda com Então eu acho que é uma palestra
importante. Sim, falarei com você mais tarde.
180. Glossário de OP+++: Olá de novo. E
nesta palestra, eu gostaria de ter
certeza de que você conhece a terminologia
da programação
orientada a objetos em Python Agora temos a classe, que é esse modelo aqui, ou você pode chamá-la
de protótipo que define as características de um objeto que está
prestes a ser criado Então essa é a classe,
e então temos a instância do objeto
ou simplesmente o objeto. Então, este ano é um objeto. Portanto, um objeto de
conta corrente que armazena dados nesse caminho de arquivo
específico e tem esse atributo. Então, tem essa taxa. Então, temos variáveis de instância, e essas são variáveis
definidas dentro dos métodos
da classe,
como o caminho da falha aqui. E eles são acessíveis
pela instância
pela instância do objeto que
é criada por essa classe. Então, também temos algo
chamado variável de classe. Então, variável de instância
e variáveis de classe. Agora, não criamos
uma variável de classe em nenhuma das aulas anteriores Então, vou seguir em frente
e criar um agora. Vamos criar uma para
nossa conta corrente. Então, isso seria algo como digamos que tipo seja igual Agitando. Portanto, uma variável de classe
é declarada fora dos métodos dessa classe, e as variáveis de classe são compartilhadas por todas as instâncias da classe. Portanto, as variáveis de instância são compartilhadas somente
pela instância do objeto. Por exemplo,
deixe-me explicar isso. Aqui, essa é uma de
nossas instâncias de objeto, então só temos uma instância de
objeto aqui, mas poderíamos ter mais. Então, vou copiar isso e criar outra instância de
objeto aqui. E eu vou chamar isso, digamos que esta é a conta corrente de Jack. Então, vou substituir
isso e aquilo. E esta é a conta
corrente de John. E eles também têm seu armazenamento
pessoal lá. Então, digamos Jack dot
TXT e Joan dot TXT. Então Jack tem $100
e Joan tem $200. Bom. Então, precisamos mudar
isso Jack Jack e Joan E se executarmos
esse script agora, obteremos dois
valores impressos. Então, menos um para
esta declaração aqui porque Jack tinha, então
ele tinha $100 lá, mas depois ele transferiu 100
e depois menos a taxa E então ele acabou
com menos $1 lá. Ele é dono de algum dinheiro no banco. E então John tinha 200, então ele tem 99 agora. Então, o que estou
tentando dizer é que essas variáveis pertencem
apenas ao seu objeto. Mas se você tentar agora, Jack está verificando o tipo de ponto. Então, você deseja imprimir esse tipo de ponto de
verificação Print Jones . Você verá que essa variável de
classe é compartilhada por todas as
instâncias dessa classe. Então, qual é a diferença entre variáveis de
classe e instância. Variáveis de classe raramente são usadas , então você realmente terá que
passá-las aqui. Outro conceito agora doc strings. E uma string doc geralmente é passada assim que você
escreve a palavra-chave clas, então basta clicar na palavra-chave class Isso fornece a
explicação de sua aula. Digamos que essa classe gere objetos de conta
corrente. Então você fecha isso
com três aspas. Então, o que isso faz é, você sabe, se imprimirmos
isso, então pegamos uma de nossas instâncias de
objeto, digamos, o ponto de verificação de Jo. Sublinhado duplo, Doc, e sublinhado
duplo novamente
. Então imprima isso. Então, como você pode ver, uma string
doc é usada para fornecer algumas informações
sobre essa classe. Portanto, é bom
definir a string quando você está escrevendo
classes para que outras pessoas, se usarem sua classe, possam aplicar essa
operação aqui, elas possam ver
do que se trata a classe. Isso é particularmente útil quando você está importando
classes de módulos Então, quando você realmente não
vê o código da sua classe, você pode fazer isso e tem acesso à string de
documentos da classe. E então temos um
conceito de membros do dota, que na verdade se refere a variáveis de classe ou variáveis de
instância Portanto, esse é um membro de dados e também é um
membro de dados. Então temos o construtor, que era essa função init E, como você sabe,
a função init, então o construtor
constrói sua classe. Em seguida, você tem
métodos de classe que você aplica à sua instância de objeto. Portanto, a transferência é um método de classe. Então isso também é um método, mas é um método especial,
então é um construtor E instanciação, se você
ouvir falar sobre instanciação, é um processo de criação de instâncias de
objetos Então, instâncias de uma classe. Como se fosse uma instanciação
da classe. E esse aqui também. E, você sabe, herança
agora é quando você cria uma subclasse a partir de uma classe base
. E essa subclasse compartilha os
métodos da classe base, além de ter seus próprios métodos específicos
para
essa subclasse Às vezes, você também
ouve falar sobre atributos, e os atributos são
esses aqui. Então, quando você acessa essas variáveis de instância ou mesmo variáveis de classe ou
mesmo variáveis de instância, você pode dizer que está
acessando atributos da sua instância de classe,
do seu objeto. E sim, isso é
sobre o vocabulário da
programação orientada a objetos em Python E eu realmente acredito que lhe
dei uma sólida compreensão da programação orientada a
objetos e da criação classes e objetos e assim por diante. Se você ainda achar
algo confuso, pode
assistir novamente aos vídeos
porque sei que a programação orientada a objetos é um pouco complicada, mas você pode até fazer perguntas, e eu farei o possível para explicar coisas que
ainda não estão claras para Sim, espero que você
ache isso útil. E falarei com você
na próxima palestra, então terminamos esta seção
e nos vemos mais tarde
181. Aplicativo 7: demonstração de aplicativo móvel para se sentir bem +: Olá, e bem-vindo a uma
nova seção, é claro. Esta seção é muito
especial porque aqui vamos
criar um aplicativo móvel. Até agora, trabalhamos com aplicativos de
desktop ou aplicativos da web. Mas nesta seção, o
aplicativo que vamos
criar pode ser executado em dispositivos Android
e IOS e também
em dispositivos desktop. Então, vamos
criar um único aplicativo com uma interface gráfica de usuário, e os usuários podem usá-lo no desktop, no Android e no IOS. Este aplicativo terá uma interface de
login na
qual o usuário pode fazer login e também se inscrever para
se registrar como usuário do aplicativo. E então eles podem apertar
alguns botões para obter algumas cotações. Do aplicativo. Então, eles dirão como
se sentem se se
sentem felizes, tristes ou amados, para que tenham uma sensação. E o aplicativo tentará fazer
isso, se o usuário estiver triste, tentará
deixá-lo feliz fazendo uma citação que seja relevante para
seu estado de emoções. Certo? Então esse é o aplicativo. Tenho certeza que vai
ser interessante. Vamos usar
a biblioteca KeV. É uma
biblioteca terceirizada para Python, que permite criar aplicativos,
assim como aplicativos para desktop e dispositivos móveis Uh, então vamos mergulhar e eu falarei com você na
próxima palestra. Te vejo.
182. Criando uma página de inscrição de usuário: Anteriormente, criamos esse código
Python e esse código Kiv. Portanto, é um aplicativo Kiv, que você executa executando Python,
não o código Então, aqui, aperte o botão redondo, e isso é o que temos. Vamos admitir, é uma interface
bonita, mas está um pouco fria por enquanto porque quando pressionamos esses
botões, nada acontece. Então, vamos
implementar o botão de inscrição. Então, o que queremos fazer é quando o usuário pressiona
um botão de inscrição, queremos mudar a página,
a tela para outra tela
com outro conjunto de widgets Para isso, precisamos atribuir uma chamada de função
ao botão de inscrição. Então,
vamos até o código QV,
localize o botão cadastrar-se, que está aqui Assim, o botão obtém esse atributo,
o atributo de texto, mas também pode obter outro atributo chamado ao pressionar ao
pressionar o sublinhado O que esse atributo faz é quando o usuário
pressiona o botão, que,
quando o usuário
pressiona o botão,
você chama a função de inscrição com pontos
raiz Não esqueça o
parêntese do código. Então, o que é root e
o que é inscrever-se? Root é um nome especial que você
pode usar dentro de um arquivo QV, e root se refere à
classe do widget de regra O widget de regras
aqui onde estamos
é a tela de login Então, a classe da tela de login, que é a tela de login. Então, na verdade, root se refere
à classe da tela de login. E agora estamos usando
essa notação de ponto. Em seguida, estamos usando o
método da tela de login. Então, inscreva-se na tela de login onde não há método de
inscrição, mas podemos criar
um. Defina o sinal. Acima, use o parâmetro self
para métodos de classe. E então vamos fazer
algo simples por enquanto. Vamos apenas imprimir. Pressionar o botão de inscrição
é apenas uma sequência de caracteres, o
que significa que ela será
impressa no terminal.
Vamos tentar isso. Salve o arquivo Kiwi e
execute o arquivo Python. Em seguida, pressione a inscrição e, como
você pode ver no terminal, a string de pressão do botão de
inscrição é impressa sempre
que eu uso
o Então, é tão simples quanto isso. Use o atributo ao pressionar
e, sempre que o
botão for pressionado, inscrição será
chamada. Essa função. Então, agora o que queremos fazer de verdade é mudar a tela. Mas primeiro, precisamos
criar uma tela. A forma como você cria telas
está no arquivo Kiwi. Então, temos a tela de
login aqui. Agora queremos criar, vamos chamar essa tela de inscrição. Depois da regra, você
usa a coluna, um toque para recuar. E aqui está a
aparência dessa nova tela. Então, temos um rótulo. Temos duas
caixas de entrada de texto e temos um botão. E tudo está
dentro de um layout de grade. Com uma coluna. E
essa coluna simplesmente terá um nível com texto. Inscreva-se para uma
viagem espacial. Por que não? Sinta-se à vontade para usar
sua imaginação, mas certifique-se de que ela
esteja entre aspas. Então é uma corda. Em seguida, vem uma entrada de texto. É usado como texto de dica. A string do nome de usuário. Então, o que será mostrado
na caixa de texto como uma dica? Outra entrada de texto com dica. Texto. Você adivinhou. Senha. E, por fim, um botão. Com texto, envie. Ou você pode escrever,
inscrever-se o que quiser. Então, essas são apenas cordas. Você pode usar o que quiser. Portanto, a ideia é que,
quando o usuário pressionar o botão enviar, os dados, ou
seja, o nome de usuário e a
senha sejam enviados para o banco de dados em que estamos salvando os
nomes de usuário e as senhas Portanto, esse banco de dados será
legível, para que possamos escrevê-lo. Podemos adicionar mais
nomes de usuário a esse banco de dados, e ele também será legível, que significa que quando um
usuário tentar fazer login, leremos esse banco de dados
para ver se o
nome de usuário e a senha o usuário está tentando enviar com um botão de login estão ou
não nesse banco E esse banco de dados será um arquivo JSON, que é uma maneira simples de
lidar com dados de nome de usuário
e senha Certo. Agora, se você salvar esse arquivo Kiwi e
executar o script Python , nada acontecerá
porque o botão de inscrição
ainda está porque o botão de inscrição
ainda está imprimindo essa sequência
de símbolos e a tela que acabamos de criar
não está sendo enviada para
todos os lugares para ser Portanto, não estamos dando nenhuma ordem para exibir a tela de inscrição Então, a próxima coisa a
fazer é listar a tela de
inscrição entre os widgets do widget
raiz, por assim dizer, nome de inscrição Ecrã. Portanto, as telas precisam
ter um nome. E a razão para isso é porque aqui agora,
no botão de inscrição, o que podemos fazer é
a mágica de fazer o self dot manager dot current igual à tela de inscrição Então, a tela de inscrição é essa string aqui que
acabamos de criar Salve o arquivo Kiwi e execute o arquivo Python
para ver o que está acontecendo Portanto, você pode receber esse
erro de tempos em tempos , exceção de
fábrica do fator KV, tela de inscrição de classe
desconhecida, o que significa que é um erro que
ocorreu em seu arquivo KV A tela de inscrição da classe,
que é esta aqui, é desconhecida porque
não há classe KV na biblioteca Kiv, como é para rótulos de layout de
grade Todas essas são aulas
na biblioteca Kiwi. Portanto, a tela de inscrição não é uma
classe na Biblioteca KV e não é uma classe
declarada no arquivo Python Então, o que você precisa fazer é criar uma aula na tela de inscrição. Herdando da tela e,
por enquanto, basta passar, executar novamente e se inscrever E esta é a nossa nova tela. Então, recebemos o rótulo de
duas caixas de entrada de texto e um botão de envio, o que não faz
nada por enquanto, porque essa tela de inscrição está conectada à classe que
acabamos de criar, a classe da tela de
inscrição Portanto, quaisquer ações
realizadas nesta página, nesta tela pelo usuário, corresponderão a algumas funções que
adicionaremos à tela de inscrição E deixe-me explicar
essa linha aqui, self dot manager dot current. Então self está se referindo
à instância
dessa classe atual, da classe em que self está. Então, objeto da tela de login. tela de login é a classe e self é o
objeto que foi instanciado a partir dessa classe que foi criada a
partir dessa E então o gerente gerente
é uma propriedade da tela. Portanto, como essa classe é
herdada da tela, tela é mãe e a tela de
login é filha E o pai está dando à
criança todos os seus métodos, todas as suas propriedades,
todos os seus atributos, incluindo o gerente, é claro. Portanto, self é capaz de
acessar o gerenciador
e, em seguida, o gerenciador tem seu próprio
atributo, que é atual. Então, atual gerente e
gerente da tela de login. E esse atributo atual
receberá o nome de uma tela para a
qual
você deseja mudar, que é tela de inscrição, essa tela de inscrição aqui, que é um widget que
criamos aqui E essa é a ideia. É assim que você alterna entre as
telas usando o QV. Obrigada.
183. Como capturar as informações do usuário: Oi, de novo. O que
temos até agora em nosso aplicativo KV é a
primeira página do aplicativo, que escolhi
chamá-la de tela de login Então é aqui que os
usuários fazem login e se inscrevem. E o botão de login
não foi implementado, então esqueci a senha e o botão de
inscrição funciona Agora, há algumas
coisas que você pode querer fazer a seguir,
como, por exemplo, fazer
algum trabalho de design para ter
alguns espaços entre
esses botões,
essas entradas de texto
e esse botão, ou talvez tornar esses
dois botões menores e mostrá-los apenas como links em vez de
botões com quadrados Mas você pode fazer isso, mas o que eu prefiro
fazer sozinho é primeiro fazer um design mínimo, o que significa que quero
fazer o design funcionar. Eu só quero que seja o suficiente para eu ver os botões por enquanto. Eu não me importo se eles são
muito grandes ou muito pequenos. Eu quero que eles trabalhem. Então
eu pressiono um botão de inscrição, então eu quero ser
capaz aqui, certo? Eu uso um nome e uma senha. E quando clico em Enviar, quero armazenar esses
dados no banco de dados. Então, eu quero criar um novo
usuário com esses dados. E, no final, depois concluir todas as
funcionalidades do programa, quero brincar com um design para
torná-lo mais bonito Então, nesta palestra,
vamos implementar
o botão de envio
para que esses dados sejam armazenados em um arquivo JSON Certo, então vamos localizar o botão de
envio que está aqui e adicionar o atributo
press, que
executará o ponto raiz. Portanto, a raiz é uma aula
na tela de inscrição. Esse aqui. Vamos executar
o método dessa classe. Vamos chamar esse método de adicionar usuário. Ok, então vamos continuar e adicionar essa função a esse método. Adicione o self do usuário, vamos
passar por enquanto. Portanto, esse método obterá
os valores, ou seja,
os valores do nome de usuário e
da senha, os enviará e
armazenará no arquivo adjacente. Então, onde estão os valores? Bem, podemos acessar o
nome de usuário usando IDs raiz, ponto, e aqui inserimos o ID do widget em que o
nome de usuário será inserido Então, o widget de entrada de texto. Ele não tem um ID,
mas podemos dar um ID. ID. Nome de usuário. Eu não
deveria estar entre aspas, então é apenas uma variável. Então aqui você
escreverá o nome de usuário. Agora, se você deixar assim, e também obter o root, isso
identifica essa senha. Então, vamos dar um ID
para a senha também. Coluna de identificação, senha, sem
mais nem menos. E então, na função de usuário do anúncio,
crie alguns parâmetros. Pode estar usando uma senha. Então, assim como esses Ds, mas não está relacionado. Você pode ter
os nomes de parâmetros que quiser aqui. E por esse motivo,
eu gostaria de escrever a palavra Nome P, para não confundir
com esses IDs. E, por enquanto, deixe-me
imprimir o nome U e a palavra P, só para ver o que temos até agora. Tudo bem, inscreva-se. Digamos que u1p1, algum nome de usuário e senha.
Por que não? Envie e se você
não receber nada, talvez não tenhamos
salvo o arquivo QB O arquivo Python é
salvo automaticamente e inscreva-se novamente, U one,
P one, submit Sim, envie, envie. Então, o que estamos recebendo
em troca é isso, que corresponde a Nome, e isso é P palavras. Então, esses são os objetos de entrada de
texto. Agora, se você quiser o texto que o usuário insere
nessas caixas de entrada de texto, precisará acessar
a propriedade de texto. mesmo vale para a senha,
salve, execute e feche a
janela anterior para obter a nova. Um P one, envie, e agora obtemos o
texto real que o usuário digitou. É assim que
obtemos valores das caixas de entrada de texto e
os enviamos para o Python para processamento
posterior Então root se refere a
uma tela de inscrição. Adicionar usuário é um método
na tela de inscrição. Uma raiz novamente é a tela de inscrição. Os IDs de classe são uma propriedade
do objeto da tela de inscrição, que na verdade
vem da tela Portanto, a tela a herda para a inscrição e a tela de inscrição tem esses IDs,
o que na verdade fornece uma
espécie de dicionário com
todos os IDs contidos na regra
da
tela o que na verdade fornece uma
espécie de dicionário com de inscrição Portanto, neste caso, ele fornece acesso ao nome de usuário e à senha. ID raiz dessa senha fornece texto para o objeto de entrada de
texto que tem uma senha de ID
e, com o texto, você
acessa o valor
real dela. Na próxima aula, vamos continuar trabalhando com arquivo
JSON para armazenar
esses dados no arquivo JSON
184. Processando inscrições de usuários +: Olá, novamente, nesta palestra, vamos implementar
a tela de inscrição para
que , quando o usuário
inserir o nome de usuário e a senha e
clicar em Enviar, esses dados sejam
armazenados no arquivo JSON do usuário,
que eu tenho aqui que eu tenho Assim, você pode criar um arquivo vazio e
chamá-lo como se os usuários colocassem JSON, ou você pode obter meu arquivo, que pode ser encontrado
em anexo nos recursos da aula E nesse arquivo, eu
já tenho dois usuários. Esses são dados JSON. Para melhorar a aparência, você pode formatá-lo usando,
se estiver no Windows, use Shift Alt F.
Se estiver no Mac, use Shift Option F.
Se estiver no Linux, use Control Shift I. Quando você fizer essa combinação,
o que vai acontecer
é que você terá o código JSON
formatado A ideia aqui é que o aplicativo
adicione mais usuários aqui quando o usuário pressionar
o botão de envio
na página de inscrição Isso é basicamente um
grande dicionário de Python. Começa aqui e termina aqui. Este dicionário tem valores
como essa chave aqui. E o valor dessa primeira chave, então essa é a chave
do grande dicionário. O valor dessa chave
é esse dicionário. Portanto, é outro
dicionário dentro do grande dicionário, mas
isso é outro problema. Isso pode acontecer como neste caso. E então esse dicionário
tem os dados. Então, o nome de usuário, novamente, é usuário um como este. A senha é passover one. Portanto, esse é um usuário existente. Eu criei esse arquivo manualmente, mas o programa
também poderá criar esse arquivo
e adicionar mais usuários. E aqui é onde o valor dessa chave termina e, em seguida,
inicia a outra chave, o outro usuário usuário dois. Esse é o nome de usuário. Você
também pode ver aqui, passo dois, e esta é a data em
que esse nome de usuário foi inserido no arquivo JSON Vamos manter esse arquivo
aberto aqui embaixo. Esprema o espaço do terminal. Assim, o usuário pressiona o botão enviar,
o botão enviar, chama a função de usuário do anúncio e esses dois argumentos são
passados para a chamada da função Então, adicionar usuário é este aqui. Então você nomeia a palavra P. O que vamos fazer
com esses dois valores que o usuário inseriu
nas caixas de texto? Bem, o que vou fazer
é, primeiro de tudo, abrir o arquivo
Json do usuário como arquivo
e fazer com que os usuários o carreguem em um dicionário, para
que os usuários
sejam iguais ao json dot load os usuários
sejam iguais ao json dot Precisamos inserir Jason aqui. Então, JSON é uma biblioteca. E agora, apenas como uma etapa
intermediária, vamos imprimir os usuários para
ver o que temos até agora. Inscreva-se U one, P one, envie, e é isso que obtemos. Então é isso que
temos atualmente no arquivo JSON. E isso é, na verdade, para que os usuários
sejam um dicionário Python. Agora, o que podemos
fazer com esse dicionário é adicionar outro valor. Então, outro par
de chave e valor, o que é bem fácil de fazer. Então, dizemos usuários. Qual chave precisamos adicionar? Bem, obtemos isso do Name. Então, vamos adicionar o nome de usuário U one que
eu inseri como usuário. Então, teremos
um terceiro nome de usuário lá, e esse será seu valor
, será um dicionário. Então, assim como temos para o
usuário um, esse dicionário, teremos para U um esse dicionário
também, e então o nome de usuário. Para Key, o nome de usuário
será, novamente, U Name. E então a senha
será a palavra P. Palavra P. Então, estamos aqui. Palavra P, que
obterá o valor P um. E então, como não
temos muito mais espaço aqui, vou colocar uma vírgula para continuar a expressão
em uma linha diferente Se achar que
uma linha é muito longa, você pode dividi-la em várias linhas somente se a linha estiver entre
parênteses, como no caso de uma definição de
função ou colchetes, como no caso
de uma lista ou colchetes, como no caso Nos três casos, o código funcionará perfeitamente. Você não pode dividir uma linha que não tenha parênteses,
colchetes Se você tentar fazer isso,
receberá um erro de sintaxe, a menos
que use uma barra BC. Uma barra invertida permite que você divida uma expressão
em várias linhas, mesmo quando essa expressão não
está parênteses Dividir uma expressão em várias linhas torna o código
mais legível É recomendável dividir uma expressão quando ela
atingir 79 caracteres. No entanto, isso é apenas
uma recomendação. Isso não tem nenhum
efeito no código. Então, a seguir, o que vem a seguir? Bem, criei a chave criada. O valor disso
será a data e hora, agora, vamos importar a data e a hora primeiro De data, hora,
importação, data e hora. Portanto, a classe diurna
do módulo datetime. Então essa é a classe de data e hora
que eu inseri aqui. Daytime dot, agora eu posso te mostrar o que estou
tentando conseguir aqui Então, a partir de data e hora, importação, data, hora, ponto diurno agora, forneceremos esse objeto de
data e hora E o que queremos disso é extrair uma string. Queremos obter o
aqui, o mês, o dia, as horas, os
minutos e os segundos. Então, isso nos dará
a data e hora
nesse formato de string. Então, isso vai entrar aqui. Certo. E é isso. Agora, deixe-me imprimir os usuários
novamente aqui embaixo. Feche a janela anterior, inscreva-se U one, P one, envie. E você pode ver agora que temos outro par de chave e valor. Então, o nome de
usuário UO com o nome de usuário UO password P one e crie-o neste
exato momento. Então, o que podemos fazer com esse novo dicionário agora?
Bem, nada extravagante. Só precisamos abrir
os pontos JSON dos usuários, mas desta vez no modo de
gravação como arquivo, e acessamos o JSON,
o módulo JSON,
despejamos o dicionário
do usuário no arquivo. E é isso. Então, o que estou fazendo neste momento é sobrescrever os usuários,
os usuários existentes,
aquele arquivo JSON Então, um
arquivo completamente novo será criado neste
momento, arquivo vazio. E nesse arquivo vazio, vou escrever o dicionário de
novos usuários, que será esse aqui. Portanto, o novo dicionário
incluirá os usuários existentes, como você viu aqui, o
usuário um e o usuário dois, e também adicionará
o usuário atual. Então, espero que isso esteja claro. Você sabe, se testarmos isso agora, interrompermos a
sessão atual com o Control C, executarmos o código, nos inscrevermos, U one, P one, enviaremos Então eu pressiono o botão enviar, nada acontece agora porque tudo está
acontecendo em segundo plano, então o usuário tem o
arquivo atualizado. Agora, se você observar esse arquivo JSON para os
usuários, verá que atualmente
há um bug com o código do Visual Studio que ele não serve para atualizar os arquivos quando
eles são Espero que isso seja resolvido em breve pelos desenvolvedores de código do Visual
Studio. Esse problema foi relatado. De qualquer forma, o que
podemos fazer é acessar o Explorador de Arquivos em
seu sistema operacional, onde você tem esses arquivos, e
usar um editor de texto alternativo, como o Not Pat Eu tenho átomo aqui, edição de texto. Portanto, escolha qualquer um deles e você verá que,
no outro editor, as alterações foram registradas
no arquivo JSON do usuário Então você pode ver que
U one está lá. Então, usando um U, passe ou P e a
data em que foi criado. É assim que você adiciona um novo
usuário ao arquivo JSON. E por último, o que precisamos
adicionar aqui porque você vê que quando pressiona
enviar e nada acontece, você não percebe se foi
registrado com sucesso como usuário ou não Então, na outra palestra,
vamos criar outra tela que será exibida quando o usuário pressionar um botão de envio
. Te vejo.
185. Criando uma página de inscrição de sucesso: Então, neste momento, podemos adicionar
usuários ao banco de dados
escrevendo-os nessas caixas de texto e pressionando o botão enviar. Agora, vamos mostrar outra página quando o usuário pressiona enviar Bem, podemos fazer isso
da mesma forma que fizemos quando mudamos da tela de
login para a tela de inscrição Então, a forma como fizemos
isso foi escrevendo na função de inscrição da classe de
tela de login, escrevemos essa
corrente de autogerenciamento igual à tela de inscrição Podemos fazer a mesma
coisa aqui. Portanto, a função do usuário do anúncio é chamada quando o usuário
pressiona um botão de envio Assim, podemos fazer o self
dot manager dot current igual a. Vamos chamar isso de sucesso na tela de
inscrição. Então essa vai ser
outra tela que
vamos listar aqui, cadastre-se. Sucesso na tela. O nome disso deve ser o
mesmo que você usou lá. E, claro, precisamos
criar essa tela. Sucesso na tela de inscrição, uma coluna. E o que eu gostaria que esta página
parecesse é que eu gostaria que ela tivesse um rótulo onde diz: “
Cadastre-se com sucesso”. E então deveria ter um
botão abaixo desse rótulo, que diria página de login. Assim, o usuário pode pressionar
esse botão e
voltar para a página de login
onde pode fazer o login. Então, para a tela de login. Portanto, antes de tudo,
precisamos de um layout de grade. Só precisamos de uma coluna
e, em seguida, precisamos de um rótulo A. O texto disso seria. Inscreva-se com sucesso em códigos
e, em seguida, você precisará de um botão. O texto do botão
seria a página de login. E vamos deixar
assim por enquanto. Vou
executar tudo para ver por que temos isso. Então, temos uma exceção de
fábrica de erros. Obviamente, não temos sucesso
na tela de inscrição. Portanto, precisamos adicionar uma tela de
inscrição de classe bem-sucedida, que herda da tela, e vamos passar por aí Execute novamente. A
tela de nomes não está definida. Sim, eu digitei aqui, tela Inscreva-se três P três,
envie, cadastre-se com sucesso, a etiqueta e a página de login, que não fazem nada por
enquanto porque não temos um atributo de pressão
para esse botão. Então, sim, para finalizar, isso é o que fizemos para implementar essa tela e mudar
para a próxima tela. Então, primeiro, adicionamos uma tela de autogerenciamento
na função de usuário do anúncio. Isso mudará
a tela atual para esta tela aqui. E essa tela
foi definida aqui e é representada por
essa classe em Python E é isso. Então, ,
três e quatro pontos tivemos que somar 12,
três e quatro pontos. Agora, tente como um exercício
implementar o botão de login. Então, quando o usuário pressiona o botão de
login na página, você quer se
inscrever, quatro Pi quatro Quando o usuário pressionar login, volte para a página principal, então para a página de login, que é esta
aqui. Tente fazer isso.
186. Alternar entre páginas: Então, deixe-me implementar rapidamente
o botão da página de login. Certo. O
botão da página de login está aqui. Então, ao pressionar o
ponto raiz, vá para Login. É assim que eu chamo a função. Então, estamos na regra de sucesso da
tela de inscrição, que significa que precisamos ir para
a classe de sucesso da tela de inscrição e definir ir para a função de login
self e, claro ,
self, que é manager,
que é atual, igual à tela de login, que é essa aqui Então, já temos essa tela. Não precisamos criar
uma nova tela agora. Salve o arquivo QV e
execute, cadastre-se. Nossa, seis, não
importa o nome de usuário
e a senha que você enviar. Cadastre-se com sucesso,
rotulada como página de login, e isso o levará de volta
à tela de login Agora, algo a ter em
mente é a direção da
transição das telas. Portanto, atualmente, por padrão, a transição é chamada de esquerda. Então você vai se inscrever. Então, o movimento é que a próxima tela
vá para a esquerda. Então você oito pH. Agora, a próxima tela vai
para a esquerda desse jeito. E quando você for fazer o login, talvez queira
ir para a direita. Então, mudar a
transição para a direita, que faz mais sentido. Então, se você quiser fazer isso, vá até onde você está configurando
a tela atual. Por isso, queremos mudar a transição
da tela de login. Então, quando definimos a tela
atual como login, queremos que o gerente faça a transição
na direção certa. Execute isso, inscreva-se. Vou apenas enviar algumas strings
vazias para lá só para ser rápido com esse
teste na interface Então, envie que é um novo usuário com strings vazias.
Isso não importa. Você pode colocar algumas restrições
mais tarde, se quiser. Então vá para a página de login. E desta vez,
a próxima tela está vindo da esquerda
para a direita. Então, se é isso que você quer, que eu acho que
faz algum sentido, então você precisa usar essa propriedade
de transição da propriedade manager, que tem uma
propriedade de direção e configurá-la como correta. Essa é a ideia.
187. Processando as credenciais de login do usuário: O que fizemos até agora com
nosso programa foi criar a primeira página em que o
usuário pode fazer login e também criar a
página de inscrição na qual novos usuários podem se inscrever e ser membros
do nosso banco de dados JSON Nesta palestra, vamos
implementar a funcionalidade de login Deixe-me mostrar como a versão final
do programa funciona. Não vou te mostrar o código. Ainda não, apenas como
o login funcionará. Ignore a interface
bonita, ou agora faremos isso mais tarde. Agora temos que
pensar na funcionalidade. Então, quando o usuário faz
login, ele insere os dados. Eles pressionam login e acessam essa
página interna do programa. Então, aqui temos um botão
que, se passarmos o
mouse, ele ficará vermelho
e, se clicarmos, ele
nos desconectará e nos levará de
volta à página de login Se o Delta estiver errado, ele dirá nome de
usuário ou senha incorretos. Então, novamente, quando os
dados estiverem corretos, isso nos levará a esta página. Então, nesta palestra, vamos
continuar e construir essa tela. Eu fiz uma captura de tela disso, então a temos aqui
para referência Portanto, precisamos adicionar mais
uma tela na lista de telas aqui. Vamos chamar a tela de sucesso da tela de
login. E diga, vamos ficar
na mesma linha, tela de
login bem-sucedida e, em seguida, criar uma regra para essa tela. Vou apenas
copiar e colar. E então, o que temos aqui? Bem, começamos com
o layout da grade, que tem uma coluna. Por enquanto, vou
fornecer apenas um botão simples. Posteriormente, implementaremos a funcionalidade que você
acabou de mostrar com essa animação. Quando você coloca o
mouse sobre o botão, o botão fica vermelho. Então, por enquanto, vamos
usar apenas um botão simples. Com texto. Cuidado com a imprensa. Então, teremos que criar uma classe de sucesso na tela de login
no código Python e
criar uma função lá para desconectar o Então, cuidado. Sim, é assim que eu
gostaria de chamar a função
na classe de sucesso da tela de login que vamos criar. Vamos deixar o
botão assim, e então temos uma etiqueta. Como você acha
que esse é o rótulo? Texto Então,
perguntamos ao usuário como ele se sente para que ele possa inserir um sentimento, e então
damos algumas citações, dependendo de como ele se
sente para que
se sinta melhor ou para
melhorar seu sentimento. As citações são uma coisa boa. Pessoas muito inteligentes
pensaram bem sobre elas, então vamos usá-las.
Vamos fazer uso deles. Entrada de texto. Com uma dica? Texto. Então, aqui você pode escrever
o que quiser, mas eu gostaria de dar uma dica para que eles saibam
o que podem inserir aqui Portanto, sem precisar incluir nenhuma grande descrição aqui
no corpo da
interface da página, vamos manter a interface limpa e fazer uso dessa
área aqui no livro didático Então, coisas para experimentar. Feliz, triste, não amado. Sim, isso deve estar bem. E então temos outro
botão com o texto Enlighten me. Sinta-se à vontade para usar qualquer nome. É até onde minha
imaginação vai. E agora, ao pressionar, o que faremos quando o usuário pressionar esse botão Bem, quando o usuário
pressiona esse botão, exibiremos
algum texto abaixo do botão Portanto,
precisaremos de um rótulo. E seu texto, por enquanto, é
apenas uma string vazia. Então, vamos incluir
um atributo de pressão para o botão mais tarde. Por enquanto, deixe-me escrever uma
tela de login de classe bem-sucedida, que herda, é claro, da tela e tem um método Saia. Saia para
desconectar o usuário. E aqui eu gostaria de primeiro definir uma direção para a
transição dessa tela. Vamos corrigir isso. O logout está voltando para
a página anterior Faz sentido ter
a direção certa
para a transição Então, é claro, gerente, isso é igual a. Para onde queremos levar
o usuário após o logout? Queremos levar o usuário
para a tela de login. Novamente, isso faz
algum sentido, certo? Então, tela de login. Tudo bem, então temos a página. Construímos a página de sucesso da tela de
login de login, que era essa aqui. Então, deixe-me fechar isso para ter
mais espaço para o código. No entanto, ainda não
implementamos a funcionalidade
do botão de login. Portanto, o login u1p1 não funciona. Então, vamos localizar
o botão de login. Que está na tela de login. Sim. A tela de login. Sim. Então, isso é um login com
botão de botão. Então, o que queremos fazer
em um evento na imprensa. Bem, queremos executar uma
rota que registre a função de login, que precisamos ter na classe
da tela de login aqui. Então, é basicamente a
mesma ideia do usuário de anúncios. Uma função em que atribuímos
à função de usuário do anúncio, fornecemos o
nome de usuário e a senha. Então, novamente, fazemos a mesma
coisa com definir login. Eu e, portanto, aqui precisamos
apresentar dois argumentos. O primeiro
seria raízes, esses IDs,
esse nome de usuário, esse texto. E o segundo seria
IDs raiz, ponto, senha, texto. Então, estamos falando aqui, desculpe
pelo tipo de aqui. Estamos falando sobre o
nome de usuário que o usuário insere
na caixa de entrada de texto
e a senha que o usuário insere
na caixa de entrada de texto na tela de login. Portanto, root se refere
à tela de login da regra atual em que você
está escrevendo o código aqui. E não temos um
ID para entrada de texto, então vamos prosseguir e fazer o ID, usar o nome, o mesmo para a senha. E então pegamos esse nome de usuário e senha
na função de login. Vamos usar Nome e
palavra P como parâmetros. Você pode usar o
nome que quiser. Você também pode usar
nome de usuário e senha. Então, como fazemos login de um usuário? Bem, a ideia é que precisamos abrir
para ler o arquivo
JSON onde temos os dados do usuário e verificar
se esse nome de usuário e
senha estão nesse arquivo Ou, mais precisamente, se esse nome de usuário estiver no arquivo
e tiver uma senha, a senha que o usuário está fornecendo na interface
gráfica do usuário. Se for esse o caso, trocamos a tela usando a propriedade manager dot
current. Mudamos a tela para a
tela que acabei de mostrar que acabamos de construir e que
ainda não vimos como é. Então, deixe-me
implementar isso rapidamente com usuários
abertos. O arquivo JSON tem Então, no modo de leitura, quando não definimos
o R dessa forma, isso significa implicitamente que
estamos lendo o arquivo Usuários iguais ao JSON
que carregam. O arquivo. Então, isso
nos dará um dicionário. Os usuários serão o dicionário contendo todos os dados desse arquivo JSON do usuário E então, se você nomear usuários. Então, o que estamos fazendo aqui
é, deixe-me mostrar a você. Então, precisamos dessa biblioteca JSON e os usuários serão o
dicionário, certo Muitos dados estão lá. E
se dissermos, por exemplo, se 77 em usuários, vamos
passar porque U sete está na verdade, entre as chaves do
dicionário. Então aqui, U seven, você pode ignorar o usuário. Eles são apenas um prefixo para indicar que são dados Unicode,
mas
são as cadeias
de caracteres dentro dos Então U seven está entre as chaves
do dicionário. Você também pode obter uma lista
clara das chaves. Com isso. Então, usuários que se beijam, você vê que nós sete
estamos entre esses dados. É por isso que entendemos a verdade, e podemos fazer uso disso e dizer,
eu nome
de usuário nos usuários, então primeiro verificamos se o
nome de usuário está no banco de dados. Mas também precisamos
verificar se os usuários nomeiam a senha igual a
PWord, nomeiam a senha igual a então essa é a nossa
condição, na verdade Então, a primeira é que o nome de
usuário tem que existir. E a segunda é que você sabe, os usuários, você nomeia, digamos, sete, então os usuários U
sete são equivalentes a isso. Então, isso nos dará o dicionário que
a chave u seven tem. É como o valor
que o ku sete tem. Então é um dicionário.
E se continuarmos nossa cadeia de acesso,
usaremos a senha. Então, estamos acessando o
valor da senha chave. Cada um desses dicionários
tem essa senha como chave, e o valor dessa senha
é a senha real Então P sete neste caso. Então, estamos verificando
se a senha
desse usuário é uma senha que
o usuário está fornecendo aqui. Então, a senha desse
texto entra aqui. Isso tem que ser igual, não um operador de atribuição. Então, se for esse o caso, então o sul gerencia essa corrente igual à página de sucesso de
login, sucesso da tela de login
que criamos. Certo. E também precisamos adicionar
uma condicional s, mas deixe-me tentar ver o que temos até agora e depurar o código se tivermos
alguns Então sete P sete login, e aqui está uma tela. Portanto, este é um botão Logout. Como você se sente? A caixa de texto
que criamos me esclarece, e essa é a área em que
o texto Por enquanto, não funciona
porque não anexamos uma função ao botão
Enlighten me. Deixe-me agora experimentar o botão
Logout. Portanto, a saída não está definida, como você pode ver aqui o erro. Então, nosso botão de logout,
que está aqui pressionado, está apontando para
que, na verdade devemos escrever
root, isso é Logout Então, está apontando para o sucesso da
tela de login . Função de logout Então isso foi um problema. Não especificamos a classe
que tinha esse botão de saída. Então, deixe-me tentar novamente. P seven login, Lou e nós voltamos à
página de login quando terminamos o logout E se inserirmos alguns
dados errados, nada acontecerá. Então, aqui está o que vamos
fazer. Vamos adicionar
uma etiqueta logo abaixo do botão de login, entre esses dois botões e
o botão de login. Então, vamos seguir em frente e fazer isso. Estamos falando sobre
a tela de login. Esse é o botão de login. Então, vamos adicionar o
rótulo com texto
, está vazio por enquanto. Então salve isso, feche a
janela e execute novamente. Agora temos um espaço
aqui. Então isso é um rótulo. E nesse rótulo agora, quando os dados estão corretos, vamos para as páginas
de sucesso da
tela de login . Então, agora precisamos ter
acesso ao ID do rótulo. Então, vamos primeiro colocar um ID
na etiqueta, login errado. Então, aqui, agora precisamos
acessar esse rótulo. A maneira como você faz isso
é usando a si mesmo. Self aponta para o objeto da tela de
login. Em seguida, procuramos
as identidades de nós mesmos. Login, ID errado. Então esse é o objeto do rótulo. Agora precisamos acessar o texto do objeto
do rótulo e atribuir texto nome
de
usuário ou senha incorretos. Portanto, certifique-se de salvar o arquivo
QV e executar o código. Apenas alguns dados aleatórios que não
estão no banco de dados, faça o login e obteremos o rótulo
conforme esperado. Seven P seven, faça o login e vamos para a página de login. Então é assim que você acessa
os elementos do arquivo Ki. Então, quando você estiver no KIVFle, root apontará para a classe
associada dessa regra Então, tela de
login, classe de tela de login, esses nomes devem ser os mesmos. E quando você está
no arquivo Python, self está apontando para a classe da tela de login
da classe E como a tela de login aqui e tela de
login ali
se comunicam entre si, elas recebem e recebem dados. Isso significa que o
objeto próprio conhece os IDs e todos os widgets que a tela de login contém Portanto, você
procura o ID
errado de login para rotular esse objeto
da tela de login
e, em seguida, acessa o texto. Então, a selfie está
aí, e pronto. Vamos começar a próxima
palestra agora e fazer mais
algumas coisas legais
sobre a interface.
188. Exibindo saída para o usuário +: Para esta palestra, gostaria que
você acessasse os recursos
desta palestra e baixasse
os três arquivos de texto Em seguida, no Explorer
aqui no seu IDE, crie uma nova pasta. Dê a ele um nome como aspas
e, em seguida, coloque esses três
arquivos na pasta des. Você pode usar o recurso de arrastar e
soltar, se quiser. Por exemplo, eu tenho
esses arquivos em algum lugar e vou apenas arrastá-los
e soltá-los nessa pasta. Então você vê que agora os arquivos
estão na pasta de aspas. Então, o que vamos
fazer nesta palestra é que, no programa que
temos , vamos escrever um desses três preenchimentos
suportados por enquanto Você pode adicionar mais arquivos posteriormente
se tiver alguns dados. Mas isso é o que temos até agora. Então, quando o usuário
pressiona o botão Enlighten me, queremos mostrar
uma das aspas
que estão dentro do arquivo TXT
feliz Então, uma dessas linhas. Alguns são longos, outros são mais curtos. Portanto, se o usuário digitar SAD, você deseja exibir aqui
nesta área uma das linhas
do SAD, esse arquivo TxD Essas também são nossas citações. E então você entendeu. E se o usuário inserir
um preenchimento desconhecido, como, digamos, animado. E quando eles pressionam um botão, você quer mostrar que experimente
outro recheio, porque você não pode ter todos os
recheios possíveis cobertos Então é isso que vamos
fazer nesta palestra. Pi de pontos principais. Então, vamos
começar pelo botão. Tente localizar o botão
Enlighten me. Ou pelo menos é assim que
meu botão é chamado. Então, aperte esse botão faz parte da página de sucesso
da tela de login. E ainda não temos um atributo de
imprensa. Então, pressionando, o que você
quer fazer é executar um método da classe de sucesso da
tela de login, que eu tenho aqui. Para que a tela de login
seja bem-sucedida, ela já tem um método, Logout, que é executado quando esse botão é
pressionado no botão Logout Agora queremos implementar
o método Gute. Codifique a si mesmo como de costume. Portanto, esse método agora precisa comunicar o valor que o usuário inseriu
na entrada de texto. Então, qual é a raiz que identifica o ponto. Não temos um
ID para entrada de texto, então vamos colocar um ID. Portanto, essa é uma entrada de texto em que o usuário
inseriu o preenchimento. E então vamos colocar o recheio lá. identificarmos esse preenchimento,
queremos obter o texto
dessa entrada de texto. Então esse recheio vai ficar aqui. Vamos chamá-la apenas de preenchimento, para
não confundir
com a palavra de preenchimento. E a primeira coisa que
talvez queiramos fazer é ver se estamos acessando
o texto de preenchimento corretamente. Então, imprima o preenchimento. E certifique-se de salvar o design para que o
arquivo KV execute o Login Consegui fazer o login
porque tenho esse nome de usuário que criei anteriormente. Quando me inscrevi,
criei um nome de usuário que é uma string vazia e uma string vazia
para a senha. Então, basicamente, é um
usuário com uma string vazia, string
vazia como
nome de usuário e senha, o que funciona porque
eu não coloquei nenhuma restrição no
nome de usuário e na senha. Portanto, isso é apenas para
simplificar quando você tenta testar
o aplicativo. A felicidade me ilumina, e
assim a gente fica feliz. Cadeia aí. E se
isso for com uma grande idade, você vai ficar feliz. A primeira coisa que
talvez queiramos
fazer é transformar o campo
em minúsculas Mesmo
que o usuário entre
satisfeito com a maiúscula,
vamos convertê-la para todas as minúsculas para que
possamos comparar
agora os nomes
nos arquivos de que o usuário entre
satisfeito com a maiúscula,
vamos convertê-la para todas as minúsculas que
possamos comparar
agora os nomes texto
com os nomes dos arquivos Vamos agora ver quais sentimentos
disponíveis temos. Então, estou atribuindo uma variável de sentimentos
disponíveis e vou usar
o módulo globo para obter uma lista de nomes de arquivos Isso é o que isso
vai me dar. Um erro, é claro, porque
eu não importei o glob. Portanto, ele fornece uma lista
com todos os arquivos. Aqui estão disponíveis todos
os recheios disponíveis. Estamos aqui no método de obtenção
de cotação. Agora, a lista de preenchimentos disponíveis agora se parece com uma
lista de caminhos de arquivo O que eu quero fazer é
extrair todos os nomes desses
arquivos, somente a parte definida. Uma forma de fazer isso é
usando o objeto path
da biblioteca Path leap, você não precisa
instalar essa biblioteca Ele vem com Python.
É uma biblioteca padrão. Usando Path, se você
fornecer um caminho ao path, como códigos, defina TXT e extraia
o STEM dele Eu lhe darei o nome
do arquivo sem a extensão sem a
outra parte do caminho. Na verdade, você tem
muitos métodos de caminho, e o STEM é um deles. Assim, você pode obter o sufixo,
o nome do arquivo, incluindo a extensão
como essa e assim por diante Então, o que podemos fazer aqui agora é usar
essa propriedade STEM e aplicar isso
a todos os nomes de arquivos Para fazer isso, você pode usar o
mínimo de compreensão. Portanto, os sentimentos disponíveis
são iguais ao caminho. Digamos nome de arquivo por nome de arquivo nos sentimentos disponíveis
. E aqui eu gostaria de dividir
a linha em várias linhas. Como isso está dentro de
colchetes, posso dividir a linha Então, queremos tirar
proveito disso. Então, talvez queiramos tentar imprimir aqui os recheios
disponíveis Além disso, certifique-se de importar do path lip Import Path
e, em seguida, executar o aplicativo. E recebi um erro
ao pressionar o botão. O objeto String
não tem atributo STEM. Sim, claro,
porque eu fiz isso aqui. Em vez de colocar STEM
após o objeto do caminho, coloquei-o logo
ao lado do nome do arquivo. O nome do arquivo é string. É por isso que você
obtém que STR não tem STEM. Então, vamos colocá-lo aqui e
tentar novamente. Me esclareça Então, feliz set e Loaf.
É isso que queremos. Agora temos os
sentimentos disponíveis em uma lista. O que eu posso fazer agora? Posso dizer que sinto os sentimentos
disponíveis. Então, se esse sentimento está
nos sentimentos disponíveis, o que queremos fazer a
seguir é abrir aquele arquivo que tem esse sentimento uma citação
para esse sentimento. Então, vamos usar uma abertura. Vou usar a
formatação de string aqui. F. Então, aspas, vou
abrir esse caminho de arquivo,
que tem esse ponto de preenchimento
TXT em um Então, o que estou fazendo aqui? Bem, aquela coisa, o que isso
vai me dar é, digamos que a sensação de que o usuário entrou foi feliz, certo? Então, obtemos essa variável.
Tem um valor. E se obtivermos agora essa string, vamos nos dar o caminho do
arquivo para esse preenchimento. Então, essa expressão aqui entre chaves será substituída pelo valor dessa variável
da variável de
campo Então, espero que esteja claro. E então queremos
obter todos os des, todo esse arquivo usando
o método de leitura de linhas. Então, isso nos dará uma
lista de todos os códigos. Então, deixe-me desenrolar e imprimir os códigos para ver por que
temos isso Feliz, as citações estavam felizes, e isso é uma lista. Então, como eu disse, felicidade é quando você
pensa e diz, e assim por diante. E então foi contada
por Mahatma Gandhi, e então você tem uma vírgula, e aí é onde E então, primeiro, temos uma
lista de várias sequências, cada cadeia
representando uma citação Então, o que podemos fazer
com essa citação agora? Hmm. O que podemos fazer é fazer que eu tenha ideias sobre isso. A ideia dessa etiqueta em que
queremos mostrar a citação, que está logo abaixo do botão “Eu me
iluminei Então, a ideia, citação, citação. Citação, esse texto. Portanto, o texto
desse rótulo será uma escolha aleatória
da lista de aspas. Então, o que esse método faz
é obter uma lista como entrada. Então, um, dois, três, e ele retorna um item
aleatório dessa lista
sempre que você o executa Então, simplesmente aleatório. Portanto,
obteremos uma dessas cadeias de caracteres, uma dessas aspas, e essa citação será definida
como um texto do rótulo Então é assim que
funciona. E vamos garantir que importemos aleatoriamente. E estamos prontos para
executar o aplicativo. Um login feliz em Enlighten me. E temos esse erro que é um erro de atributos
bastante comum. Super não tem atributo
get attribute. Isso acontece quando o
arquivo Python não encontra esse ID,
o ID da citação nesse Então você pode ver que o
erro aconteceu na linha 61. Então essa linha não
está funcionando bem. Acho que é porque não
salvei o arquivo QV quando entrei quando atualizei
o ID da etiqueta aqui Então eu escrevi um ID
, mas não salvei o arquivo QV. Então,
deixe-me tentar novamente. Fico feliz que esses erros surjam porque você
aprende como corrigi-los. Me esclareça. E sim, então temos a etiqueta
exibida aqui. Quando você pressiona novamente, essa função
aleatória de escolha obterá outra
escolha aleatória da lista. Às vezes, acho que pode exibir a mesma citação, o
que é bom, eu acho, mas existem maneiras de fazer com que exiba uma citação
diferente da anterior, mas acho que está funcionando
muito bem. Espere o caso em que
há uma citação longa e ela está fora das
bordas da janela do aplicativo. Portanto, isso é um problema, mas
não se preocupe porque implementaremos
uma visualização de rolagem posteriormente, que comprimirá esse rótulo e o tornará flexível Ao redimensionar o rótulo acordo com o widget
no tamanho do aplicativo Por enquanto, deixe-me fechar isso
e terminar o bloco Ils, mesmo que esse código de identificação, esse texto seja igual para
tentar outro Então, deixe-me tentar mais uma vez, e terminamos este vídeo. Então isso está funcionando.
Isso também está funcionando. E eu me sinto bonita. Oh, experimente outro recheio.
Não apoiamos isso. E é assim que criamos um aplicativo. Isso escolhe uma citação aleatoriamente. Portanto, a funcionalidade do
programa está praticamente concluída. O que resta a fazer é deixar
a interface, os botões e
os espaços entre
os botões um pouco mais bonitos interface, os botões e
os espaços entre
os botões e adicionar alguma animação. Então, essas são coisas
que ajudarão você a criar alguns aplicativos do mundo real, que sejam modernos e agradáveis de
usar pelos usuários e que
você possa realmente vender. Então, vamos fazer isso
nas próximas palestras.
189. Estilizando a página de login: Agora que a funcionalidade do aplicativo
está funcionando bem, começaremos com o estilo Então, todos os botões estão fazendo o que
deveriam fazer. Bem, exceto pelo botão de
esquecimento da senha, que deveria ser um
exercício para você resolver Então, agora no próximo vídeo, o que
vamos fazer é trabalhar
no estilo Então, este é um programa que
construímos juntos, e este é o produto
estilizado final Então, neste vídeo,
neste mesmo vídeo, vamos trabalhar
na tela de login. Na verdade, você pode
redimensioná-los dessa forma para ver exatamente
como
ficarão em um telefone real,
porque esse é mais ou menos o tamanho de
um telefone, a proporção do tamanho Então, vamos fechar essas
duas interfaces, e vou manter essa
interface aberta aqui para usá-la como referência. Portanto, não estamos fazendo nenhum trabalho
no arquivo Python aqui
no arquivo KV Isso é sobre o design. Certo, então a primeira coisa
que você quer adicionar é um pouco de preenchimento e algum
espaçamento nesse layout de grade 15, vou explicar
o que isso significa, é
claro, espaçando 2020. Então, esse layout de grade, o que é, é que temos o layout da grade principal, que é o widget inteiro, e esse layout de grade
tem o login do usuário, rotula essas duas
entradas de texto e esse botão E também uma
etiqueta invisível aqui. Então, queremos adicionar um pouco de preenchimento, o que significa 15 horizontalmente, que significa a distância
do layout de grade
desse layout de grade até as bordas
externas do aplicativo Então você vê que temos
cerca de 15 de distância aqui, e também há uma
distância que você não pode ver, mas há um preenchimento aqui verticalmente entre esta
etiqueta e a moldura principal Então isso é preenchimento, o espaço externo
desse layout de grade E então o espaçamento é 2020 significa espaçamento entre os
widgets desses layouts de grade Portanto, o espaçamento é interno
e o preenchimento é externo Você pode pensar nisso dessa forma. Então, 20 pixels entre esses
dois e 20 aqui também, entre essa caixa de texto
e esse botão Bem, você pode ver que há
mais espaço, na verdade, do que 20 pixels entre o
botão e essa entrada de texto. Mas isso é porque também
aplicamos essa interface
neste produto final. Também apliquei alguns
tamanhos no próprio botão. Portanto, há um preenchimento mais a redução no
tamanho do botão É por isso que você vê
mais espaço aqui. Então, vamos mantê-lo assim em segurança. E então você precisa executar
o arquivo Python como sempre. E agora temos um
pouco de preenchimento e algum espaçamento entre
esses Que tal aumentar
o tamanho
da fonte do login do usuário nessa etiqueta? Então, você precisa ir
até o rótulo e definir o tamanho da fonte para 20. Tem que ser uma
string como essa SP. Então, agora o tamanho do telefone é maior. Agora, vamos trabalhar no
tamanho do botão de login. Você vê que isso
parece um pouco largo demais. Então, que tal
torná-lo um pouco mais curto? Bem, no QV, existe um
atributo chamado dica de tamanho, que você pode atribuir a um widget,
por exemplo, a um Dica de tamanho. Agora, a forma como o QV funciona
é que, por padrão, a área é
dividida proporcionalmente entre o widget, que significa que, por exemplo, aqui temos o layout da
grade principal que ocupa todo
o espaço porque
é um layout de Então, é como uma criança solteira,
ela vai ter tudo. Então, esse layout de grade
tem dois filhos. Tem esse layout de grade aqui e tem esse
layout de grade aqui. E a área entre essas duas crianças
será dividida igualmente. Portanto, esse layout de grade, o segundo tem dois botões, o botão de esquecimento da senha
e o botão de inscrição Portanto, você pode ver
que esse layout de grade aqui tem metade do layout da grade
principal. E o outro layout de grade, que é o primeiro
layout de grade, tem a outra metade. O mesmo acontece com
os filhos de cada um desses
dois layouts de grade Então, os filhos do
primeiro layout da grade. O rótulo e as entradas de texto, cada um deles
receberá novamente o
espaço que merece Então, aqui tínhamos um
rótulo, dois, três, quatro e um rótulo invisível,
então cinco widgets, e então cada widget
temos 20% desse espaço No entanto, há um atributo de dica de
tamanho que acabei de apresentar a você, que permite
alterar o quanto um widget recebe de seu pai,
portanto, a dica de tamanho Então, vamos dar um valor
de 0,3 e 0,5. Para o botão de login. O que vai acontecer é que o botão de login
será pressionado Veja, porque
demos um valor de 0,5. Portanto, tem metade da altura. E também atribuímos um valor de 0,3 para comprimi-lo horizontalmente, mas isso não
funciona porque não
há outros widgets
aqui De qualquer forma, o botão de
login obterá, novamente, todo o espaço. Não está dividindo
nenhum espaço com outros widgets nessa direção
na direção horizontal Para poder alterar o botão, o que precisamos fazer, na verdade,
é recuar esse botão e torná-lo filho de
um widget de layout relativo Se você salvar isso e executar, agora verá que o
botão mudou de posição. Na verdade, eu tenho 0,3, 30% desse espaço horizontal, como você pode ver, é um terço. Desse espaço horizontal, e também 0,5, 50% da altura. Mas se você fizer
0,5 menos do que isso, se fizer 0,1, por exemplo, você não obterá
um botão com uma altura
muito, muito pequena
porque há uma etiqueta que
tem um tamanho fixo. Portanto, o mínimo que você pode obter é a altura da
etiqueta do botão. Agora, como podemos colocar esse
botão no centro? Precisamos usar uma dica de pausa, que obtém um Centro X 0.5. E centro Y 0.6. Eu experimentei
alguns valores diferentes, e isso é o que eu
achei melhor No entanto, ainda não porque
esses caras aqui, esses botões estão
ocupando muito espaço. Então, o que podemos fazer é ir para o layout da grade que
tem esses botões. Esse aqui, e dizemos tamanho. Dica, 0,20 0,2. Guarde isso e veja o que acontece. Hm. Portanto, está
muito melhor, então dica de
tamanho é muito
mágica
porque permite que você torne
os tamanhos relativos Você não quer definir
um tamanho fixo porque há
tamanhos diferentes em dispositivos móveis, e é melhor manter
tudo em tamanho relativo. Então, o que acabei de fazer
aqui foi dar esse layout de grade um espaço de 20%. Então 20% aqui, e isso aqui é 80% para o
outro layout de grade. Então, o botão estava apertando
porque tentou fazer melhor possível usando esses valores que eu dei aqui
para o botão, esse botão de login,
mas não conseguiu
porque esse layout de grade
estava ocupando muito espaço Portanto, 20% é bom. E se você quiser agora, você
pode dar um pouco de preenchimento de dez e dez e
espaçamento de dez e zero Esse era o antigo. Esse
é um novo. Então, nada mal. Acabei de dar um pouco de espaçamento entre
os botões e um pouco de acolchoamento
em relação à Então, o espaço horizontal, este, e o
espaçamento vertical vertical E não há outros botões
verticais em cima disso, então isso não faz muito sentido. Então, zero está bem. E deixe-me fechar isso. E, por fim, vamos fazer com que esses
dois botões pareçam links. Então, essas são as
senhas esquecidas e cadastre-se. Vamos mudar a cor de
fundo, que atualmente é cinza, para
um formato RGB e opacidade Então, Alpha para opacidade, e assume um valor Então, são valores decimais. Você pode colocar 0,1 e assim por diante. Vou colocar um, um,
um e zero. Zero significa que a cor do fundo é completamente transparente. Vou guardar isso e executar. Você pode ver agora que esqueci
a senha é assim. No entanto, quando
clico no botão, ele não parece estar fazendo nada parecido com o botão de
inscrição. Então, o que podemos fazer é brincar com a
opacidade do texto Vamos colocar o valor
de um se o estado próprio
for normal, veja 0,5. Então, essa é uma boa mágica que vou explicar para
você como funciona. Veja, você sabe, quando
eu clico no botão, eu entendo que estou
clicando no botão. Então, o que está acontecendo é
que a opacidade é uma. Se o estado de si mesmo se referir ao
widget atual, que é o botão Portanto, lembre-se de que root
se referiu à regra, que seria como uma tela de
login aqui. Mas eu me referia a
esse mesmo botão. E se você quiser acessar uma
propriedade do layout da grade, você pode fazer o pai dessa forma. Então, esse eu, esse pai,
estaria apontando para o pai do botão,
que é o layout da grade. Mas não precisamos
disso
agora, caso contrário, se o
estado não for normal, esse é o estado normal
do botão não ser pressionado. Existem outros estados,
como Pressed Release, mas esse estado é normal. Caso contrário, se o
estado não for normal, como esse estado aqui, eu apertei o botão. Nesse caso, queremos dar
um valor de 0,5 à opacidade. Então, tudo isso
aqui é código Python. Na verdade, tudo está do lado direito desses atributos
aqui, aqui, ali. Tudo lá é código Python. E por fim, vamos mudar
a cor da parte inferior. Você pode usar um
atributo de cor para isso. Vamos fazer 0,1. Isso significa 10% de
vermelho, 70% de verde e 100% de azul com transparência de
um,
portanto, não transparente. Guarde isso. E vou copiar esses três atributos e entregá-los também ao
outro botão, ao botão de inscrição,
salvar o arquivo e executar E sim, isso é
o que eu pretendia fazer. Então, cadastre-se para obter uma
senha. Eu pressiono. Eu vou para a outra página,
para a página de inscrição. Então, novamente, essa é a
interface que temos até agora para os logins. Uma última coisa que eu
gostaria de acrescentar é que, atualmente, quando inserimos um nome de usuário, a senha fica visível Queremos mostrar estrelas
em vez disso. Então, vá até a entrada de texto da senha, acesse o atributo da senha
e defina-o como verdadeiro. Então, quando você define esse
atributo como verdadeiro, o
que acontece é que a entrada de texto é tratada como entrada de senha, então não mostra a senha. E obrigado por
acompanhar este vídeo, e vamos estilizar as outras páginas do aplicativo
nos próximos vídeos. Te vejo.
190. Estilizando a página de inscrição: Oi O que você está
vendo é a página de inscrição. Aqui neste lado está o
programa que criamos até agora, e é assim que esse programa deve ficar
depois deste vídeo. Então, vamos adicionar um
pouco de preenchimento e espaçamento à nossa página de inscrição Isso é um código. Então, estamos falando sobre a tela de
inscrição. Acho que um preenchimento de 2020 e um espaçamento de 2020
novamente devem ser suficientes Então, deixe-me executar a inscrição. Então eu acho que está
tudo bem, mas se você quiser, você pode brincar com esse preenchimento e
espaçamento e talvez com os outros atributos de dica de tamanho
que eu mostrei anteriormente Então, dar dicas sobre o layout da
grade para esta e depois outras dicas
para as caixas de entrada de texto, depende de você De qualquer forma, acho que
está bom, para o tamanho de uma tela de celular.
191. Tornando os botões interativos: Olá, estou muito empolgado em
mostrar agora como estilizar a
página principal do aplicativo,
que é a página em que o usuário
passará a maior parte do Então, a página em que eles
acessam essas citações. E aqui à esquerda está o que
temos até agora, como é a aparência da nossa página
principal. Então essa é a página de sucesso
da tela de login. Foi assim que o
chamamos. E é assim que a página ficará
depois desses dois vídeos. Então, primeiro, o que
vamos fazer é adicionar um pouco de
preenchimento e algum espaçamento para
separar esses botões um do outro.
Então essa é a primeira coisa. Então, a segunda coisa
é que vamos fazer esse botão grande parecer
esse botão chique aqui, que muda de cor quando
passamos o mouse, quando colocamos o mouse
em cima do E então também
vamos adicionar um pouco rolagem a essa área do rótulo aqui para que o texto inteiro
seja mostrado em uma pequena área, e o usuário possa rolar
e ver o texto inteiro Então, vamos trabalhar
em um pouco de preenchimento e espaçamento e, em seguida,
na parte inferior Antes de começarmos, gostaria que
você acessasse os recursos
e baixasse o arquivo
hoverbl dot py, o arquivo Logout, o arquivo PNG com ponto flutuante
e o arquivo PNG Logout not hover dot e o arquivo PNG Logout Vou explicar daqui a
pouco o que são. Então, o preenchimento agora, sucesso na tela de
login Hmm Vamos adicionar também o preenchimento de 30, 30 e o espaçamento de 30, 30. Veja o que recebemos. Ah, sim, parece melhor. Então, agora, o botão, a biblioteca Kiv, não tem
nativamente um objeto para implementar comportamentos de foco, de modo que algo mude
quando você passa o mouse, ou não há uma maneira
fácil Mas alguém desenvolveu um submódulo
muito pequeno chamado hoverbl e você pode
pegar esse arquivo e colocá-lo no mesmo diretório
com seu arquivo dot py principal Então, eles estão na mesma pasta. E então o que você faz
é não precisar
alterar o arquivo HoverBLTPI,
então vou fechá-lo alterar o arquivo HoverBLTPI, então vou fechá-lo E então o que podemos fazer é
importar do hoverbl, importamos o objeto de comportamento do
hover Então essa é uma classe, o comportamento de passar o mouse da classe dentro
do arquivo hoverbel dot py Então é isso que
vamos usar. E a forma como
vamos usar isso é vamos até aqui. E vou criar uma classe
e chamá-la de botão de imagem. Então, esse será um botão
especial. Não será mais um botão
simples, mas
será um botão de imagem. E esse botão de imagem herdará
da classe de comportamento foco e também de algumas outras
classes, que vou
importar Então, a maneira como
vamos implementar esse botão é ter
duas imagens diferentes. Eu criei essas imagens
em Power Points. Você pode criá-los facilmente.
Você tem esses símbolos. E você adiciona um pouco de texto e depois torna o
fundo transparente. E então você tem um
azul e um vermelho. Portanto, os dois estados diferentes que
você deseja que o botão
tenha são uma imagem PNG. E então a ideia é que esse botão não tenha
texto. Eu terei uma imagem. Portanto, precisamos
importar de qv dot x dot image,
import, image E, por fim, a partir do qv dot, os comportamentos de
UX importam. Comportamento do botão, e pronto. Agora, obtemos o comportamento da imagem
e do
botão e os colocamos como pais
do botão de imagem. Objeto. E tudo o que precisamos
fazer aqui é passar. É apenas uma classe que
reúne esses três objetos. Para criar uma classe, use a classe do botão de
imagem que tem atributos que se comportam
como esses três objetos Então, o que fazemos é
ir até o botão de imagem, e eu coloco isso errado aqui. Desculpe. Então isso deveria estar
aqui, na verdade, botão de imagem. Estamos falando sobre
o botão de logout,
não sobre o botão Enlighten Me E não precisamos mais desse texto
de desconexão. Portanto, não precisamos
desse texto de logout porque estamos
usando nossa própria imagem que contém o texto. Portanto, remova isso ao pressionar root Lookout.
Sim, está correto. E a fonte desse botão de imagem, será
Logout Hover I self
dot Hovert Lookout, No, hover Ah, ponto PNG, é claro. Então esse é o
caminho da imagem. Então Overt, esse self
hovert, o que é,
é esse atributo da classe de comportamento
Hort Portanto, é uma propriedade de boliche. Pode ser
verdadeiro ou falso. Então, esse é o código Python. Eu lhe disse que tudo à
direita desses atributos
é código Python Então, vamos definir como fonte a imagem flutuante
do logout
para esse botão de imagem Se isso for verdade, se passar o
mouse é verdadeiro. Portanto, o HoverLPIFle está detectando se um mouse Caso contrário, colocamos o
logout e não o mouse. Então, esse caminho até lá. Então, deixe-me ver o que está acontecendo. Sim, então está funcionando
bem tão fácil quanto isso. Mas o botão
obviamente está ocupando
muito espaço aqui. Então, basicamente, precisamos de um, dois, três, quatro, cinco, 20%, então temos cinco widgets Cada um deles está recebendo
20% do espaço. Então, vamos dar algumas
dicas de tamanho. Dica de tamanho. Acho que uma boa quantidade
seria 0,35,
0,35 . Então, vamos ver. Sim, eu acho que isso é bom. E agora isso está no centro. Então, se você quiser
colocá-lo à direita, você quer mudar a posição. E, novamente, há o atributo
position hint, que obtém um
dicionário, centro X. Acho que um bom número
seria 0,93 e centro Y. 0,8 que obtém um
dicionário, centro X.
Acho que um bom número
seria 0,93 e centro Y. 0,8.
Agora, se tentarmos isso, ver o que temos,
nada acontecerá. Como o botão, quando
usamos essa dica de posição, o widget precisa estar dentro outro widget chamado Se você salvar o arquivo Kiwi
agora e executar o arquivo, isso fará a mágica Se eu pressionar o botão,
ele não funcionará. E a razão pela qual isso
não funciona está escondida aqui na forma como ordenamos esses padrões dessa classe de botão de
imagem. O comportamento inferior deve
ser o primeiro porque essa ordem pode ocultar os métodos
desse comportamento inferior. Agora, deixe-me tentar novamente.
Cuidado. Então, agora funciona. Faça login novamente. E isso é sobre a implementação desse
botão de imagem. E na próxima palestra,
vamos implementar
essa visualização em rolagem aqui
do rótulo. Veja aqui.
192. Criando uma área para rolagem: Olá, então vamos continuar trabalhando
na página principal do nosso aplicativo. E então o usuário
insere alguns códigos. E como você sabe,
essa etiqueta aqui, a tela não está otimizada. Então, o que precisamos
fazer é, como você pode ver, colocar o texto
dentro das bordas
do aplicativo para que, se o dispositivo em que o aplicativo
está sendo executado for assim, o texto seja exibido normalmente
como mostrado agora. Mas o celular, se o
dispositivo for celular, ficará assim. E então você quer colocar
o texto dentro dessa área aqui para que o
usuário possa ver a citação inteira. Então, estamos na página de sucesso da
tela de login e estamos falando sobre
o atributo tamanho do texto. Então, vamos alterar o tamanho do texto para largura de ponto
próprio e altura de ponto próprio. O que é largura do ponto próprio e
o que é altura do ponto próprio? Self dot width, self se refere
ao widget atual. Então self é na verdade a etiqueta, e a largura é a largura
da etiqueta, a
altura é a altura da etiqueta. Assim, o texto
terá a largura e a altura da etiqueta em que
reside, o
que significa, deixe-me
salvar o arquivo Kiwi Portanto, cada widget aqui tem um tamanho. Portanto, o rótulo é um
dos cinco widgets. Rótulo, você tem botão, você tem entrada de texto, rótulo e você tem esse layout
relativo, e o rótulo está
ocupando 20% aqui. É invisível, mas se tivesse um plano de fundo
como esse botão, seria parecido com o tamanho
da entrada de texto e esse tamanho do botão. Então está em algum lugar aqui. Então essa é a largura e essa é a altura, mais ou menos da etiqueta. Então, se eu disser SD, vamos tentar obter uma citação longa. Então é isso que temos agora. Então, está parecendo melhor. Se apertarmos, você
verá que o texto está dentro da
altura e largura da etiqueta Então você pode ver que agora, quando eu aperto a janela, eu a
redimensiono, o rótulo é redimensionado
dinamicamente, assim como o botão
e a entrada Portanto, o tamanho do texto também
refletirá o tamanho da etiqueta,
como você pode ver aqui. Mas isso ainda não é suficiente. Então, que tal dar
ao texto mais área para
esticar verticalmente Se você quiser fazer
isso,
defina a altura do tamanho do texto como nenhuma. Então você não quer que
seja relacionado ao rótulo. Então, se você salvar
isso, experimente o código. Agora você vê que a altura
do texto é maior que
a altura da etiqueta. O rótulo está em algum lugar aqui. Então, deixe-me redimensioná-lo novamente. Então, a altura do rótulo
é tão alta, então está em algum lugar aqui,
e a altura do texto é maior que a
altura do rótulo. Isso é melhor. Podemos ver o texto, mas
obviamente o texto está sobreposto. Ele está acima de outros widgets, então isso
ainda não é o ideal, é claro Então, o que podemos fazer aqui? Bem, o que estou pensando é precisamos encontrar uma maneira de alterar
a altura do rótulo para
corresponder à altura do texto. Então, neste caso,
seria como ter mais dessa área preta
aqui do rótulo. Então, ter a etiqueta
até aqui e ter os outros widgets
pressionados acima Então, vamos alterar a altura
do rótulo para caber na altura
do texto. Como podemos fazer isso? Bem, primeiro de tudo,
precisamos do rótulo Y. Então, da altura do rótulo, precisamos ignorar a dica de tamanho,
o
que significa, deixe-me mostrar o que isso Deixe-me tentar outra citação. Então, isso significa
que a altura do rótulo não
é mais 20%
do layout da grade, mas tem um tamanho fixo
de 100 pixels por padrão. Então, por padrão, a altura
do rótulo agora é de 100 pixels. E isso é o
mesmo que altura 100. Se eu executar isso agora, obteremos exatamente a mesma saída. Mas se você alterar isso para 400, então a altura do rótulo, esse é o
atributo de altura do rótulo, não do texto. Então, se você ver agora, o rótulo é bem
maior. Digamos que esteja pronto. Então, agora isso
ocupa muito espaço. Então você aperta e
pode ver o texto. Mas não é isso que queremos. Dissemos que queremos que a
altura seja dinâmica. Queremos que a altura
reflita a altura
do texto para que, quando
tivermos a janela
esticada dessa forma, queiramos que esses botões
estejam aqui embaixo e que o
rótulo seja menor Então, a maneira de fazer isso é, em vez de ter um
tamanho fixo para a altura, queremos definir
esse tamanho de textura. E obtemos o segundo elemento dessa
tupla de texto orciso. Portanto, texto ou tamanho é uma tupla
que contém dois itens. O primeiro item é a
largura do texto. Portanto, é um valor dinâmico. Isso mudará quando
você redimensionar a janela. Então, o primeiro valor é a largura e o
segundo é a altura. Então, com esse índice, acessamos o segundo
elemento da queda. Se quiséssemos o primeiro elemento, usaríamos zero aqui. Queremos o segundo,
que é a altura. Então salve isso.
Então, veja, agora, o
rótulo é dinâmico, então ele está mudando de tamanho dependendo do
tamanho do texto. E podemos ver o texto inteiro. E quando esticamos
a janela dessa forma, não
temos nenhuma área em branco
excessiva aqui, que seria o corpo da etiqueta. No entanto, isso não é o
ideal, é claro, e ainda
resta mais uma coisa que podemos fazer aqui. O que precisamos fazer é
ter algum espaço para o widget de visualização em
rolagem E o rótulo, junto
com seus atributos, eu tenho que indentá-lo com tab para tê-lo como filho
da visualização de rolagem Portanto, a visualização de rolagem agora está
no mesmo nível
do outro widget, entrada de texto do
botão, do
outro rótulo e assim por diante Então salve esse Kivfle
agora, execute. Feliz. E então você pode
ver um pergaminho lá Triste. Me esclareça Então, está funcionando com
todo tipo de texto. Quando o texto é curto, não
há rolagem
e, quando o texto é mais longo,
ocorre uma rolagem automática Então você pode ir
até o final do texto. E é assim que você
cria uma visualização de rolagem, que tem um rótulo e o
rótulo tem algum texto dentro. Espero que tenham gostado e
nos vemos no próximo vídeo.
193. Preparando o ambiente para implantar o aplicativo móvel: Higen. Nos próximos vídeos, ficarei muito feliz em mostrar
como criar um arquivo APK a
partir do arquivo Python
que já
temos e que já criamos
nas palestras anteriores Agora, um arquivo APK é um arquivo
que pode ser instalado no telefone
Android para que o
aplicativo possa ser usado no celular Atualmente,
temos apenas um arquivo dot py. Portanto, temos o arquivo dot py principal
e o arquivo KV de design dot E também temos vários
arquivos extras, como esse OverltPyFle e
esses arquivos PNG,
e o banco de dados, que é armazenado no arquivo Json
dot do usuário Então, todos esses arquivos serão
agrupados em um arquivo APK. Para criar um arquivo APK, precisamos usar uma biblioteca
chamada Bildozer É uma
biblioteca Python com a qual podemos instalar. PIP ou Conda O problema é que criar
arquivos APK nos sistemas operacionais Windows ou
Mac é muito difícil,
para não dizer impossível. A melhor coisa que
podemos fazer é usar um
sistema operacional Linux como o Ubuntu. Mas não vou
pedir que você limpe o sistema
operacional Windows ou macOS e instale um
Linux no seu computador Agora, vamos
usar uma máquina virtual, que é um software que você pode instalar no macOS ou no Windows E dentro desse software, esse software
se comportará como um computador. Mas é um
computador virtual. É um software. Então, dentro desse software, você pode instalar sistemas
operacionais como Linux, Windows ou Mac. Então, nesta palestra,
vou mostrar
como instalar o Virtual Box Essa instalação é fácil se
você estiver no Windows ou no macOS Então, basta acessar virtualbox.org. E clique no botão
Download e, em
seguida, clique em
um dos links. Portanto, se você estiver no Windows, isso significa que o sistema
operacional host é o Windows. Portanto, o Windows hospedará o sistema
Ubuntu Linux. Atualmente, estou em uma máquina
Windows, então vou clicar
em Windows Hosts. Então, isso me dará o arquivo
executável do Virtual Box. Depois que o arquivo for baixado. Vá em frente e
clique duas vezes para instalar. Não quero um atalho na área de trabalho ou na barra de início
rápido, mas fique à vontade para deixar
essas opções marcadas Sim, precisamos de Internet
nessa caixa virtual
nessa máquina virtual, computador
virtual. Então instale. Eu
escolheria instalar novamente. Finalize e o Oracle Virtual
Box será lançado agora, espere que demore um
pouco, e aqui está. Portanto, a interface
é bem simples. Temos alguns botões aqui. Estamos interessados
no novo botão. Mas primeiro, antes de fazer isso, você precisa acessar o ubuntu.com E baixe um sistema
operacional Ubuntu. Então vá para o botão Download, vá para a área de trabalho do Ubuntu. Existem duas versões agora, mas esta é uma versão estável, aquela com botão verde. Então, eu vou baixar isso. Espere que isso demore um pouco porque tem
cerca de 2 gigabytes Sim, são
muitos dados. Depois de baixar esse arquivo, vá novamente para o Oracle Virtual
Box e vá para Novo. Dado o nome, vou
chamá-lo de Ubuntu e você verá que essas listas suspensas
são atualizadas automaticamente. Então você quer
selecionar Linux aqui. Estamos instalando um sistema operacional
Linux e o Ubuntu de 64 bits. Isso é pelo menos o que eu
baixei do ubunto.com, mas seu sistema
detectará automaticamente a arquitetura
do programa Então, vou clicar em seguida
agora, no tamanho da memória, eles dizem que o tamanho
recomendado é de um gigabyte para RAM, mas eu diria que você
deveria escolher um tamanho maior, que é de pelo menos 4 Se você não tem muita memória RAM em seu computador
físico, talvez você deva usar menos e ver como Ubuntu funcionará com
essa quantidade de memória. Mas essa é a ideia. Isso é 3.000 megabytes é o tamanho da RAM neste
computador Windows que estou usando,
e estou dando 4 megabytes para Então esse seria
o tamanho máximo 4 gigabytes de RAM para Linux Clique em Avançar. Crie um disco rígido
virtual agora. Criar. Você quer uma VDI, então clique em Avançar. A alocação dinâmica é boa. Novamente, isso depende de você. Eu recomendo 20 gigabytes,
se você os tiver. Portanto, cerca de 20 gigabytes, mas espere pelo menos dez, ou se você não tiver muito espaço no disco rígido do computador, opte por
menos de 5 gigabytes
e veja como e veja Normalmente, se você ficar sem
espaço ou sem RAM, você deve obter algumas janelas
pop-up de uma caixa virtual informando
que o espaço não é suficiente, mas quanto mais espaço, melhor. Clique em Criar. E agora
criamos uma camada aqui. Você quer começar E isso solicitará que você
selecione um disco de inicialização. Então, você quer ir para esta
pasta aqui e localizar o arquivo ISO que você
baixou do ubuntu.com Então, essa está aí.
Clique em Iniciar. Agora, essa janela aqui é meio pequena, mas você pode ir para a máquina e as configurações,
ir para a tela. E aqui no fator de escala, você pode querer aumentar
isso para 300%. Clique em OK. E agora você vê que a
tela é um pouco maior. Então essa é a próxima
tela que temos. Você quer ir para
Instalar o Ubuntu. Vai para inglês aqui e inglês ali para
o layout do teclado. Essas configurações estão corretas. Em seguida, você deseja
selecionar como disco e instalar o Buntu, que simplesmente
excluirá todos os
seus programas, suas fotos e seu computador, tudo o que você
já teve. Só estou brincando. Trata-se apenas
dos programas que você tem dentro da caixa virtual,
que não temos. Portanto, esse seria o caso
se você estivesse sobrescrevendo um
sistema operacional existente que você já tinha dentro
dessa caixa virtual Portanto, não tem nada a ver com os programas do sistema operacional
principal, que seria o Windows ou o macOS Então, basta acessar Instalar agora. Continuar. Selecione seu fuso horário. Selecione um nome para o computador. Vou fazer o login automaticamente sem
fornecer uma senha, mas você precisa escolher
uma senha. Clique em Continuar. E isso vai demorar um pouco até que os arquivos
sejam instalados. Então, até que o Ubuntu seja instalado
nesta máquina virtual
neste software de caixa virtual. Minha instalação foi concluída e o prompt
pede que eu reinicie, então vou clicar
em Reiniciar agora. Isso reiniciará o sistema operacional
Linux, não o sistema operacional host, que é o Windows no meu caso. Então, basta reiniciar o Ubuntu
dentro da caixa virtual. Parece haver um erro, acabei de pressionar Enter e
as coisas parecem estar funcionando. Então, isso é o Ubuntu. Se você quiser ver
o guia de inicialização. Basta clicar em Avançar. E pronto. Agora, talvez você queira acessar o Oracle Virtual Box,
então
a interface do Virtual Box e, em seguida, ir para a máquina e as configurações e
, em seguida, ir para General Advanced. E talvez você queira ativar
as opções de prancheta compartilhada e soltar
dragões Eu os defino como bidirecionais, o que significa que você pode copiar arquivos do sistema operacional do seu
host, ou
seja, do Windows ou Mac para o Linux
para o Ubuntu e vice-versa No entanto, notei
que isso não funciona. Se você receber esse aviso, significa que há
algumas atualizações para o Ubuntu. Mas eu vou
fechar essa janela. Portanto, presumo que a opção de copiar e colar arquivos entre
os sistemas não funciona É por isso que vou
mostrar o que você pode fazer para transferir arquivos do sistema
operacional host para
o Linux e para o sistema operacional
Ubuntu. Portanto, esta é a pasta onde
tenho todos os arquivos necessários para esse arquivo APK para a versão
móvel do programa. Então, é tudo o que
passamos, além desse
arquivo dot SH do instalador Kv Build Dozer Este é um arquivo que você pode
baixar dos recursos, e eu vou te mostrar para
que serve esse arquivo. Mas, por enquanto,
vou usar o Dropbox. Então, eu
já tenho os arquivos do projeto no meu
Dropbox no Windows Então, a pasta é essa aqui. O ensino tem todos os arquivos. Tudo bem, então vou botão
direito do mouse e
copiar o link do Dropbox Então, isso está no Windows. Não está no Linux. Está
fora da caixa virtual. Outra forma de fazer isso seria usar esse serviço,
gofle dot IO Isso permite que você
faça o upload de um arquivo e fornecerá um link. E então esse link que você
pode usar, você pode colocar esse link dentro do Linux porque
há um navegador lá. Você tem o Firefox dentro do Linux. Mas como não podemos
copiar e colar, teremos que digitar esse link
manualmente. Então, no meu caso, vou usar o Drawbox e vou
usar
usebtle.com para encurtar
a URL que criei Então, essa é a URL aqui. E insira esse URL
no navegador do seu sistema operacional
Linux. Se você não quiser
passar por esse compartilhamento de arquivos, basta usar esse URL para obter meus arquivos e fazer
o download dos arquivos diretamente do seu sistema Linux
usando o navegador. Vá para um download mais direto. Salvar arquivo. OK. Os arquivos já devem ter sido baixados e você pode
encontrá-los nos arquivos. Baixar. Com o botão direito, clique
no arquivo Zip baixado. Vá extrair dois. Você deseja selecionar a área de trabalho. Mas clique no ícone
dessa
nova pasta para criar uma pasta. Digamos que o Projeto 1,
crie e selecione. Agora vemos esse
projeto, uma pasta aqui, e lá está a pasta de
ensino dentro, e esses são os arquivos. E então vamos terminar
esse vídeo aqui. Isso foi como instalar o
Visual Box e como configurar Linux dentro do Virtual Box e como obter os arquivos dentro desse sistema
operacional Linux. Então, agora estamos prontos para criar um arquivo executável móvel
que será executado no Android Então, vamos fazer isso
no próximo vídeo.
194. Criando um arquivo APK para Android: Olá de novo. No vídeo
anterior, o que eu mostrei foi como
instalar o Virtual Box, como instalar o Ubuntu
dentro do Virtual Box e depois transportamos os arquivos do projeto para esse sistema operacional
Ubuntu Agora eles estão no
sistema de arquivos dentro do Ubuntu. O que vamos fazer agora
é usar
a biblioteca Bill Dozer Python para criar um Mas antes de fazer
isso, precisamos
instalar algumas dependências no sistema operacional Ubuntu porque
o Bulldoser precisa delas
para poder criar esse Para fazer isso, enquanto estiver na pasta onde estão os arquivos do
projeto, clique com o botão
direito do mouse e vá
para abrir o terminal. Então, isso abrirá
o terminal Linux. Você verá esse diretório
atual. Então é aí que estão seus arquivos. Se você fizer LS, verá
que esses são os arquivos. Então, o ponto principal pi está lá. Certifique-se de que seja chamado exatamente de ponto principal pi porque Bill Dozer
precisa ver esse arquivo E esse arquivo deve
ter o programa principal. Eu não preciso desse arquivo de
captura de tela, então vou
removê-lo, como você pode ver, o arquivo de captura de tela não
está mais lá Para localizar as
janelas abertas no Ubuntu, acesse atividades
e você verá que o terminal está aberto e o explorador de arquivos
também está aberto. Clique no terminal. Isso trará de volta a janela do terminal. Agora, entre esses arquivos, você vê este instalador do Kiv Bulldozer Você pode ver o
conteúdo desse arquivo usando CAT e escrever
o nome do arquivo. Então é isso que esse
arquivo tem dentro. Basicamente, essas
são instruções sobre como instalar muitas dependências, incluindo Python
, Belser e Kiwi
, porque esse
sistema Linux também não tem Então, desça até aqui. Estamos aqui novamente, clique em Bash, pressione a
tecla tab para
completar automaticamente o nome Então esse é o nome
do arquivo SH. Clique em Enter. Digite a senha
do seu sistema Ubuntu. Essa é uma senha que você criou quando estava
instalando o Ubuntu. Ubuntu
pediu um nome de usuário e uma senha e espera que
isso demore um pouco. O Ubuntu agora está baixando esses pacotes
da Internet e a Internet foi
ativada automaticamente quando você instalou o Ubuntu, então eu não precisei fazer nenhuma configuração manual da conexão com
a Internet. Às vezes, você
recebe alguns avisos, mas pode ignorá-los. Esse não é um
processo estável porque há muitas
dependências envolvidas e às vezes, você recebe alguns
erros ao criarmos esse arquivo APK, de modo que ele não
seja criado algumas vezes Não é um processo fácil, mas você pode ler os erros, o que eles estão dizendo e
talvez pesquisar no Google para ver o que os outros estão falando sobre esse erro
específico. Não há garantia de
que funcionará. Dito isso,
o Linux é o melhor
sistema operacional
para criar esses pacotes APK. Finalmente, a instalação
terminou meu computador no meu computador
virtual Linux. A próxima etapa é opcional. Talvez você queira experimentar
o aplicativo que você tem. Para fazer isso, use Python, o comando
Python three, Minda's Pi, que é o arquivo
que O aplicativo está funcionando bem com o
Python. Vamos experimentá-lo. Sim, está funcionando bem. Então feche essa janela. E a próxima coisa que
queremos fazer é
criar um arquivo de especificação do Bull Dozer Para fazer isso, usamos o Bull Dozer, então o comando Bull Dozer está nele Ok, isso criou esse arquivo de especificação de pontos do
Bilozer. Você pode minimizar essa janela e encontrar esse arquivo
no sistema de arquivos. Você pode ignorar esse arquivo.
Nós não precisamos disso. Eram apenas algumas
notas que eu estava usando. Portanto, na especificação bulloser dot, você pode clicar duas vezes
nela e ela será aberta com o aplicativo editor de texto Então, aqui, o que temos
aqui é que podemos alterar alguns parâmetros do aplicativo
que vamos criar. Vamos colocar o título, como você se sente? Você pode escolher um nome
para o pacote, mas não use espaços nele. Vou deixar meu aplicativo. E você quer parar por aqui, quais extensões você quer que
o pacote inclua? Portanto, temos arquivos Pi. Também temos alguns arquivos PNG e também temos arquivos JSON Então é isso que
queremos incluir. Arquivo KV também, mas já está lá Então, KV já está lá e depois desça mais. Então, essa será
a versão 0.1. É nossa primeira implantação, e então você
quer parar aqui. Então, qual é
o requisito do seu pacote? Bem, vamos ver quais bibliotecas. Quais
bibliotecas de terceiros temos em nosso arquivo pi principal? Então, temos o arquivo QV. Hoerbl é um arquivo local. Não é uma biblioteca terceirizada. Esse arquivo local está incluído
no arquivo do projeto, então você não precisa declarar isso nos requisitos,
e isso é tudo o que temos JSON e Globe são bibliotecas Python
padrão , então elas também vêm com
Python random e também , então elas também vêm com
Python random e também
com Path leap. Portanto, no arquivo Builders
Dot Spec, não
precisamos adicionar
nada além do
Python Desça até aqui, você deseja
habilitar todas as orientações, não apenas retratos
no celular Isso é bom. E essa versão aqui deve ser alterada para oito. E isso é tudo.
Certifique-se de salvar o arquivo, clique em Salvar ou Control S, feche e volte para
a janela do terminal. E agora o que resta a fazer é executar o comando
que criará,
esperançosamente, o arquivo APK Ou seja, construa o Saucer Android, depure Em algum momento perguntaremos se
você deseja aceitar
a licença para
aceitar a licença, pressione Y e depois Isso
falhou inicialmente no meu sistema. Portanto, se for esse o caso, talvez
você queira
voltar e
examinar o erro porque essas
são apenas mensagens genéricas. Você deseja localizar
depois dessas cores, você deseja localizar aqui
o topo da mensagem vermelha. Esse comando falhou. Acho que é porque
especificamos a versão oito. Vamos tentar acessar o arquivo Blows
ou Spec e alterar esse valor,
excluir esse valor e substituí-lo por arm 64
V eTA, colá-lo Além disso, também
esquecemos,
acho que esquecemos de adicionar
a extensão dot TXT entre
as extensões aceitas Dot TXT porque dot TXT é o arquivo em que
temos essas aspas Portanto, certifique-se de salvá-lo, fechá-lo e ir para
o terminal novamente. Desta vez, vamos
tentar criar novamente arquivo APK usando
o
Bulldozer Mas desta vez vamos adicionar
a bandeira limpa. E depois depure Portanto, a bandeira limpa
garantirá que você não
atrapalhe os esforços anteriores de
tentar criar o pacote APK Apresentador, novamente,
teremos que esperar
um pouco para que o processo de
embalagem seja concluído Mas desta vez, você
não precisará aceitar a licença,
e o processo pode ser mais rápido do que antes.
Então, vamos esperar um pouco. Então, os segundos esforços construídos
foram concluídos no meu Linux, vá para a pasta. Ben criou a pasta. Então, dentro disso, você
deve conseguir encontrar o arquivo
APK. Isso é
sobre esse vídeo. No próximo vídeo, vou
comprar um dispositivo Android e vou
mostrar como instalar esse arquivo APK no
dispositivo Android. Te vejo.
195. Instalando o arquivo APK no Android: Então, o próximo passo é
pegar esse arquivo APK, colocá-lo em um dispositivo Android e instalá-lo para
que possamos jogar com o aplicativo no dispositivo
móvel real. Agora, você pode ser
criativo aqui como
transferir esse arquivo para o
seu dispositivo móvel. Seria mais fácil
se esse sistema Linux fosse instalado em seu computador
físico, não em uma caixa virtual. Então, na vida real, se você
quiser levar as coisas a sério criando
aplicativos móveis com Python, talvez
queira instalar
o Ubuntu em seu computador para
ter um computador Linux Você pode fazer isso
com inicialização dupla, se tiver um laptop
ou PC
com Windows e, nesse caso, conectar
seu telefone celular conectar
seu telefone celular a um cabo USB para colocar facilmente os arquivos
em seu dispositivo móvel. Nesse caso, quero ter uma solução geral que
funcione para todos. Então, vou fazer o
upload desse arquivo para este serviço go file dot IO. Então clique aqui e vá para o Bin. Esse é o arquivo. Carregar. E agora você pode obter esse link
aqui, o link para download, e você pode colocá-lo
no navegador do seu dispositivo
móvel. Oi. Então, deixe-me mostrar
agora como instalar o arquivo APG em um dispositivo
Android Então, essa é a página da web go file dot IO, onde eu fiz o
upload do arquivo APK para poder compartilhá-lo no
meu dispositivo móvel. Essa é uma das formas. Então, meu navegador está apontando
para esse serviço. Eu vou fazer o download. Pressione o botão de download. Então diz que está baixando. Quando o arquivo APK for baixado, ele perguntará se você
deseja instalá-lo. E então pressione Instalar. O Android está perguntando se você deseja instalar este aplicativo ou não porque normalmente você não
deseja instalar aplicativos que não sabe de onde
vieram por motivos de segurança Então, este aplicativo, nós construímos esse aplicativo, então queremos ir para
Instalar de qualquer maneira. Eu tenho o aplicativo de mensagens instalado. Se você quiser enviar
o aplicativo
para digitalização ao Google, não
quero fazer isso. Portanto, não envie. Então pressione Concluído e vá em frente e localize
o aplicativo. Então aqui está o aplicativo. Vou clicar
nele. Está carregando. E dois U um, P um, faça o login. Feliz. Clique em Enlighten me e você verá que as
mensagens estão sendo exibidas Então está funcionando. Espero que isso funcione bem para você. Espero que você goste do processo. Se a compilação não foi
bem-sucedida em seu caso, consulte as perguntas
mais frequentes para ver se sua pergunta foi
respondida lá e você pode tentar fazer o processo de construção novamente
com o Bildoser Android Sempre use a opção limpa, então te vejo
nos próximos vídeos.
196. Scraping na web com Python e Beautiful Soup: Olá, bem-vindo a esta seção
interessante. Você aprenderá web scraping com Python nesta seção Nesta palestra, eu queria explicar o
que significa web
scraping Portanto, a raspagem da web significa vasculhar
a web em busca de informações
ou, em outras palavras, extrair Digamos que você queira extrair informações sobre imóveis. Talvez você queira
saber a tendência dos preços ao longo do tempo e do local. E eu não acho que
existam alguns bons arquivos do Excel com dados
bem estruturados que
você possa
baixar e fazer
análises de dados imediatamente. Na realidade, esses
dados estão espalhados pelas páginas da Web em
HTML de sites
imobiliários Em nosso exemplo. Então, você terá que
descartá-los e
colocá-los em um formato estruturado em um formato bem estruturado ,
como Excel e arquivo Excel,
CSV, Pandas DataFrames E colocar isso em um formato
bem estruturado é conhecido como web scrapping, Python é Especificamente, vamos usar uma biblioteca Python
chamada Beautiful Portanto, nesta seção,
apresentarei a Beautiful Soup e extrairemos
algumas informações de
uma página da web simples enquanto mostro como uma sopa
bonita funciona. Em seguida, na próxima
seção, depois
de lermos as palestras desta seção, extrairemos algumas
informações imobiliárias,
como endereços
e preços da propriedade, a área e outras
características das propriedades Vamos extrair
essas informações de um grande site imobiliário. Então, sim, isso é mais ou menos o
que é raspagem. Sim, falarei com você
na próxima palestra.
197. Como funciona o web scraping +: Então, como funciona o web
scrapping, afinal? Como o Python consegue pegar as informações
de uma página da web e armazená-las como texto para que você possa analisá-las da maneira mais conveniente Bem, esse texto
que você vê aqui. Portanto, este é um exemplo de site
e, na verdade, esse domínio
é reservado para exemplos. Mas é uma
página web normal construída com HTML e CSS e outras ferramentas de desenvolvimento
web Então, o HTML é o que renderiza os elementos,
o texto e tudo No navegador. Agora, felizmente, você pode ver o código de
cada página da web acessando a fonte da página,
como eu fiz Então esse é o código,
o código HTML, como você vê, ele abre aqui com tags HTML e
fecha E então isso tem o título
da página da web, que é esta aqui,
exemplo de domínio, e assim por diante E o mais importante,
você deve saber se o script SML é feito
de elementos SDML Então essa linha aqui
é um elemento SML, então é um meta-elemento, e então temos elementos de
divisão, que é esse aqui Temos
elementos de parágrafos este ano. E eles são chamados de tags. Então, a tag Div e a tag de fechamento
da divisão. Então, abrindo
etiqueta de divisão, etiqueta de divisão. E então temos a etiqueta corporal. Então, aqui é onde
a parte visível
da página HTML da página da
web é colocada Então, tudo o que você colocar dentro das etiquetas corporais,
você verá lá. Então, se você tem um
exemplo de domínio aqui, esse domínio está
estabelecido para ser usado, etc., aqui é onde
você vê esse texto Este domínio foi estabelecido
para ser usado para, etc. Portanto, os elementos HTML
são essenciais para o scrabbing na web. Então, basicamente, o que
você faz é isso, digamos que você queira
extrair o texto
das tags de primeira idade de todas as
DIF de todas as divisões Então, o que você diz ao Python para fazer
é dizer ao Python que vá até todas as tags do primeiro ano e
extraia o texto dessas tags Python fará isso. Mas
antes de tudo, porém, você precisa carregar
todo esse script em Python, e a maneira de fazer isso é
usando a biblioteca de solicitações Portanto, as solicitações permitem que você
forneça o URL do Python, assim como example.com, e o Python Depois de ter esse texto, você usará a
bela biblioteca de sabonetes para extrair todos os
elementos do texto. Então, por exemplo, o exame, o texto dentro das etiquetas HD h one. E então você pode armazenar
o texto extraído em
variáveis em dicionários Python ou quadros de dados do Pandas , e sempre que achar Então esse é o conceito e você pode ver o
mesmo código-fonte, como você já deve
saber, na inspeção. Então, clique com o botão direito do mouse em Inspecionar
e você verá isso. Então aqui está
esse código-fonte, mas você o vê mais organizado. Então, por exemplo, se você estiver passando o mouse
sobre as tags do corpo, o elemento correspondente na página
da web será
destacado conforme você Então, se você expandir isso, agora você está
no limite das etiquetas e assim por diante. Então, isso permite que você realmente veja os nomes
do imposto para os elementos
que você deseja extrair. Portanto, usaremos a janela de
inspeção
para entender o
código-fonte de nossas páginas da web Então, isso é sobre o
conceito de web scrapping. E nos vemos
na próxima palestra, onde carregarei uma
página da web em Python
e, em seguida, extrairemos alguns dados
simples Então, só para começar com a biblioteca de
solicitações e também com a
bela biblioteca de novelas. Então, vamos seguir em frente.
198. Exemplo de web scraping em Python: Então, como você vê, é
bem simples. E, intencionalmente, tentei encontrar uma página
web simples para você Então, vamos lá. Eu não queria distraí-lo com muito conteúdo por enquanto Posteriormente, você poderá obter informações de um grande
site com muitos dados. Então, por enquanto, vamos tentar pegar. Digamos que queremos extrair os nomes das
cidades desta página. Então, se você quiser seguir o MIP, digite esse endereço na barra de
endereço com um
ponto HTML no final Portanto, temos apenas três cidades aqui que
vamos extrair. Mas o código que
escreveremos funcionará com qualquer número de linhas aqui. Vou usar o notebook
iPython
ou o notebook Jupiter,
como é chamado agora,
então ele foi renomeado Então, mude para a direita, clique e abra
sua linha de comando. Livro JPter Node. E vou criar um e-book gratuito em
Python. Ótimo. Então, a primeira coisa
que você quer fazer é carregar esse código-fonte em Python A maneira de fazer isso é
usando a biblioteca de solicitações. Então, se você não tiver
isso instalado, você pode simplesmente ir em frente
e instalá-lo com instalação do
PIP ou solicitações
semelhantes Eu já o tenho, então
já estou satisfeito. Mas o processo é muito fácil, então você já sabe como
instalar pacotes com o PIP. E você também precisa da
bela biblioteca de sopas. Então, para instalar isso, você precisa dizer PIP install
again e não beautiful soup, mas Bs significa
beautiful soap four Então essa é a versão mais recente
do lindo sabonete. E depois. Então você quer importar solicitações, então
a primeira coisa que você quer fazer é carregar
o código-fonte. E então começamos a procurar tags
HDML e a extrair
elementos dessas Mas deixe-me importar um
lindo sabonete também. Então, do BC BC four,
importe. Sopa linda. Então essa é a sintaxe.
Você está importando a linda
aula de sopa do BC Four. Se você estiver usando o Python 2, isso deve ser
um pouco diferente Então você quer importar um lindo
sabonete diretamente assim. Ok, pressione Alt Enter e
vá para a próxima linha. Então, para carregar uma página da web. É bom criar uma variável, para que você possa carregar o
código-fonte da página da web nessa variável Então, igual às solicitações dot
Get, então o método G. Então você aponta para a biblioteca
e depois para o método Get. E tudo o que você precisa passar aqui é o URL da página da web
que você deseja carregar. Então, neste caso, pythonhw.com. Exemplo de HTML com pontos. Portanto, não esqueça o HTML. Esta é apenas uma página da web estática, então você deve passar
o ICML para lá Agora, isso deve criar
um objeto de solicitação. Então, ainda não estamos lá. E o que você quer fazer
é pegar o conteúdo
desse tipo de dados de solicitação e talvez armazená-lo
em outra variável. Então, o conteúdo armazenado em
uma variável C como essa. E se você quiser verificar agora, o que isso vê, você verá
que esse é um tipo de dados de byte E você pode
imprimi-lo se quiser. Mesmo que isso
não pareça muito bom,
esse é, na verdade, o
código-fonte que você vê aqui. Então, temos a tag
de cabeçalho as tags HTML e
tudo mais. E agora, é aqui que a bela sopa
entra em cena. Então, tudo o que a solicitação faz
é carregar o
código-fonte da página da web, mas de uma
forma muito embaralhada, como você pode ver aqui Agora, se você quiser
deixar isso bonito e extrair os elementos
, o texto e tudo mais
desse código-fonte, use um sabonete bonito. Então, tudo o que o Beautiful
Soup faz é analisar esse código-fonte e
fornecer o que você deseja Então, fornecendo os elementos do texto HTML nos quais você está
interessado. Então você já
carregou esse conteúdo, e agora o que você quer fazer é talvez criar uma variável
e chamá-la de sopa. E isso seria igual
à sopa linda e adivinhe o que você
quer passar aqui. Bem, esse seria o conteúdo. E talvez outra discussão. Portanto, você deseja especificar o analisador que deseja usar
para analisar esses dados Normalmente, esse é
o analisador HDML. Então é isso que você
quer usar quase sempre. Se você não especificar isso, receberá um aviso, mas ainda assim as coisas funcionarão. Então eu normalmente passo para lá. E uma vez que você tenha feito
isso, então execute aquele L. Se você sabe, imprima soup prettify com
colchetes vazios lá. Você verá o código-fonte
da página da web de forma
organizada. sabonete tão bonito é treinado
para realmente reconhecer essas etiquetas e depois
renderizá-las de uma forma visual
para o olho humano. No entanto, isso é apenas
para demonstração. Normalmente, você não precisará usar muito o método pretty phi porque um
método melhor para ver esse código, como já mencionei antes, é permitir que eu exclua a célula Nós não precisamos disso. Portanto,
a melhor maneira de ver esse código-fonte é
acessar sua página da web e
inspecionar . Aqui você vê uma sintaxe
melhor do Então, aqui você verá isso. Temos três divisões aqui. Com uma aula de cidades. Temos mais algumas
divisões aqui, mas é nisso que estamos
interessados Então, o corpo é tudo. E se você expandir uma
dessas divisões, verá que
temos uma tag H two, ou
seja, uma tag de título
e também uma tag de parágrafo Então, etiqueta P e duas etiquetas H. E também a outra divisão, que é essa aqui, tem essa tag H dois e
a tag de parágrafo. E Tóquio também tem
a mesma coisa. Portanto, nosso dever agora é
extrair os nomes
desses elementos. Então esse seria o H dois, o texto das tags H dois
dentro das tags da cidade. Então, naturalmente, você
começa a pensar em percorrer essas caixas que, na verdade, são divisões Então você quer passar por aqui,
aqui e aqui e extrair
o que deseja extrair. Então, voltamos ao código, e o que você quer fazer é executar um método chamado find A. E o que você quer
encontrar é Divs Devs, mas pode haver muitos divs na
página da Então, por exemplo,
temos mais duas divs aqui. E não queremos que eles
sejam encontrados. Só
queremos esses três. Mas esses três, como
você vê, eles têm um atributo de classe comum
que é igual às cidades. Então, queremos fazer uso disso. E passamos aqui um dicionário, que seria classe
igual a cidades. Ok, deixe-me criar
uma variável aqui, chamar tudo e executá-la. Agora, se você imprimir tudo, verá que as divisões foram
extraídas do código-fonte Então, da sopa, que era todo
o código-fonte. E eu gostaria que você
realmente visse de perto aqui. Você pode ver que
a primeira divisão é dividida por vírgula aqui E então a segunda
divisão começa. Então, para Paris, Paris é a segunda e termina aqui e
depois Tóquio começa aqui. Então, temos uma lista
com três elementos, um para cada divisão. Agora, se você quiser encontrar somente o primeiro elemento
com esse atributo de classe, self cities, use o método find. Então, nesse caso,
você não recebe uma lista,
mas obtém a divisão de código apenas
para a primeira divisão, que por acaso um elemento de tag de uma bela sopa. Portanto, não é uma corda simples, mas é uma corda de sabonete especial, digamos,
bonita e especial. Para que esse lindo sabonete
conheça sua estrutura, saiba quais elementos ou onde
estão as tags , onde está o
texto e assim por diante. Então, essa linda sopa
é capaz de lhe dar as informações que
você está procurando. Então, novamente, você extrai
o primeiro elemento. Agora, uma forma alternativa extrair o primeiro
elemento é logicamente, então temos todos os elementos aqui usando
a indexação de listas Então, esse objeto que
acabei de mostrar, o objeto tecnológico de Beautiful
Soup, suporta indexação. Então você executa isso. E nesse caso, como você vê, você extrai o primeiro
item do objeto tag, ou você pode fazer assim, então você pega todos eles. Então aqui você tem todos eles, e zero é o primeiro. Você entendeu a ideia. Ok,
mas e se você quiser apenas as tags H to
dessa classe D? Bem, nesse caso, o que
você gostaria de fazer é se referir
ao objeto e depois aplicar
o método fino novamente. E desta vez, você gostaria de
obter o elemento H dois. E nesse caso, você não
tem um atributo de classe, então você terá que
deixá-lo assim. E você recebe um erro porque
o que eu fiz aqui foi não apontar para essa divisão, mas apontei
para a lista. Contendo todas essas divisões. Python está
tentando obter o H dois, mas esse método de conjunto de resultados não tem esse elemento H dois Então, o que você quer
fazer é
apontar para o primeiro
elemento da lista, e isso fornece
o elemento H dois com o texto e o texto, que é como uma lista, então você deseja realizar
uma indexação zero lá E se você quiser apenas Londres, você aplica texto e
obtém Londres. Então é isso que
queríamos, certo? Para extrair as cidades. Então, extraímos Londres. Agora, que tal extrair
Paris e Tóquio? Bem, como você pode imaginar, precisamos usar quatro loops. Mas primeiro, deixe-me resumir
o que fizemos aqui. Então, carregamos o
conteúdo aqui, que é esse aqui,
e depois carregamos esse conteúdo no
lindo método de sopa. E uma sopa bonita
torna essa sopa linda para que ela
reconheça as etiquetas Então, o que fizemos
foi descobrir, extrair desse conteúdo Extraímos todos os elementos de
divisão. Então, junto com as tags e os atributos e
o texto dentro deles. Tudo dentro
dessas divisões com uma classe é igual Então, podemos executar para cada um
desses elementos dessa lista, podemos executar, novamente,
um método find all. Assim, podemos encontrar a subtaxa
dessas etiquetas de divisão. E nesse caso,
encontramos a tag H. E então pegamos o
primeiro item da lista, que nesse caso era uma lista com apenas um item. Portanto, cada uma dessas divisões
tem um H para tributar. Ou, como alternativa,
você pode simplesmente usar find here e sem
usar essa indexação. Mas esse é um método geral. Em seguida, aplicamos o atributo
de texto para extrair o
texto desse elemento. Então, temos Londres. Agora, precisamos fazer o mesmo, mas neste caso, iterando Então, para, digamos, item em
O, você deseja imprimir. Então, o item aqui é esse aqui. Então esse seria o primeiro item. Então, você quer imprimir
o item que encontrar puxar. E você quer encontrar as
duas tags H desse primeiro
item, por exemplo. Então H duas tags, e então você precisa aplicar
esse índice zero lá, e você quer pegar o texto
disso, e pronto. Aqui estão os dados. Como alternativa, você pode simplesmente passar P aqui e
obter os parágrafos. Então esse está aqui, o texto. Então essa é a ideia de carregar páginas da web em
Python e
analisá-las com um belo sabão e extrair textos Desculpe se fui um pouco repetitivo ao
explicar essas coisas, mas eu realmente quero
ter certeza de que você entendeu os conceitos básicos Por outro lado,
se você achou isso muito básico, eu diria, vamos passar para as próximas
palestras, onde
extrairemos algumas informações
de um site mais avançado e extrairemos
links e não apenas texto Então, esse é um
programa do mundo real e muito
interessante. Então eu vou falar com você mais tarde.
199. Aplicativo 8: demonstração do aplicativo de web scrapping ++: Ei, bem-vindo a
esta nova seção. E, como de costume aqui
na primeira palestra, vou apenas dar
uma demonstração do programa que
você estará construindo E, portanto, você
terá esse programa em suas mãos até o
final desta seção. E sim, durante meu
trabalho como freelancer, vi um aumento
na demanda por obter dados da Internet
de vários clientes, e esses dados podem servir
para finalidades diferentes. Por exemplo, você pode
precisar
de dados imobiliários de sites imobiliários
como este aqui, ou pode precisar de empresas, então liste empresas, e talvez queira
procurá-las nas páginas
amarelas ou até mesmo em
informações da Wikipedia. O problema é que esses
sites não fornecem um CSV com os dados que você está
procurando. Então, eles não fazem isso. E o que você quer
fazer nesse caso é extrair dados
desses sites E sim, você pode precisar de dados
para finalidades diferentes. E nós podemos fazer isso. Nós podemos fazer web scrapping. Portanto, o processo é
chamado de Webscrapping. Podemos fazer isso com o Python. Então, o Python é perfeito para isso. Basicamente, o que você faz é obter esses dados e
armazená-los em uma tabela, como um quadro de
dados do Pampas aqui, e você também pode
exportá-los facilmente na saída Sim, nesta seção, o que você vai fazer
é fazer web scrapping neste site
imobiliário Então, com o Python, você
executará uma consulta de pesquisa
em um determinado local Então, o Python pesquisará dados, obterá esses dados
e os armazenará
nesta tabela e, por fim, direi em um arquivo CSV de
saída. Então, tudo é automático. E talvez você
queira obter
atributos diferentes do site. Então, no nosso caso, temos
esse conjunto de atributos. E sim, você pode obter esses dados em uma única
rodada do programa. Mas é claro que, antes de tudo, você precisa criar esse programa, e é isso que faremos
nas próximas palestras Então, isso é muito útil. Além de
aprender a usar web scrapping, isso também aumentará suas habilidades em
Python E sim, vamos começar com isso, e eu falarei com você
na próxima palestra.
200. Carregando a página da web em Python: Fico feliz que
você esteja assistindo
isso, é ótimo que você
tenha chegado até aqui no curso. E nesta palestra, na verdade, ao longo das
próximas palestras, você aprenderá como extrair
dados deste site Portanto, este é um site
imobiliário
e, o que
ele faz, lista propriedades
para venda ou aluguel. Então, basicamente,
digamos que Rock Springs. Na verdade, existem
algumas nascentes rochosas lá, então digamos que Wyoming
Rock Springs, no Wyoming Então, estamos procurando
algumas propriedades lá. A em Wyoming e diz
que encontrou 28 anúncios Portanto, é uma
cidade bem pequena, uma cidade pequena. Portanto, a ideia é que
você aprenda a
extrair dados de cada uma
dessas propriedades Então, o que pode ser
precificado é você ter o endereço e
o número de apostas que a propriedade tem,
banheiros e assim por diante E você também obtém os
metros quadrados das propriedades. Se isso estiver disponível. Portanto, as propriedades não têm isso , então temos que contar com
isso também. Além disso, você retira dados
de várias páginas. Portanto, temos dez propriedades
aqui nesta primeira página. E então, na próxima
página, temos outras dez, e na terceira última página, temos o resto,
que deve ser oito, ou
seja, 28 no total. Não, normalmente, presumo
que você conheça os pedidos e as
lindas bibliotecas de novelas. Portanto, você deveria ter assistido às palestras
anteriores, nas
quais extraímos dados de uma página da web simples, então esse foi um E eu acredito
que depois desse exemplo, você acaba com isso, e agora? Então, por esse motivo, eu gostaria que você aprendesse
a extrair alguns dados reais Portanto, esse é um
dos programas reais que estamos construindo
neste curso. E no script que
estamos prestes a escrever, você enfrentará alguns problemas reais de
programação, que é muito importante para desenvolver suas habilidades,
suas habilidades em Python Só um problema. Antes de
retirar dados de um site, é bom ler as
políticas de dados desse Portanto, eles podem ter algumas políticas contra o uso ou a
obtenção de seus dados. Estou usando isso para fins
educacionais, então acredito que você
fará o mesmo. Então isso não deve ser um problema. Então, vamos continuar e
escrever o programa. E eu vou usar o
Jupiter Notebook. Eu sugiro que você faça o mesmo. Então, isso criará um arquivo de caderno de
Júpiter. Então, eu estou usando o Python três. Chame isso de Century 21. Ótimo. Então, agora você sabe que a
primeira coisa que você quer fazer
ao escrever um programa talvez importar as bibliotecas
que você usará. Então, você usará pedidos
e um lindo sabonete. Então, da By four Import. Ótimo. Agora, vá para a próxima linha. E vamos voltar
ao site. Então, agora, a primeira coisa que você
pode querer pensar é como carregamos o
código-fonte das páginas da web? E agora, na verdade, isso
é um pouco complicado. Quer dizer, não é muito complicado, mas é diferente
da página web estática que
descartamos nas palestras
anteriores Então, aqui está, vamos
descartar três páginas, como eu disse, e o
bom é que cada uma dessas
páginas tem uma URL exclusiva Então, quando você está
na página principal aqui, você vê que o URL é
simplesmente simples. Mas quando você pesquisa um local, veja o URL
agora, quando eu pesquisar, o URL mudará. Então, foi para o setor imobiliário
Rock Springs e Wyoming. Então esta é a string,
então, para o lugar
que você pesquisa, Rock Springs
e WY , e você também tem outra
coisa aqui que precisa conhecer. Então, a ideia é que
agora você obtenha esse URL. Então, primeiro, vamos descartar apenas
a primeira página. E quando pegamos isso
, pensamos
nas próximas páginas. Então, como as próximas
páginas são as mesmas, a estrutura é a mesma, mas vamos escrever um loop para
percorrer as próximas páginas Então, vamos em frente e
descarregue a primeira página. Digamos que request dot
get here seja o URL. E queremos o conteúdo
desse objeto de solicitação. Então, esse conteúdo. E
vamos imprimi-lo. Então, um teste simples aqui. Mamãe, hmm. Mamãe, hmm. Tudo bem, então minha
conexão com a Internet está funcionando. Isso é tudo o que sabemos sobre esse código porque não
podemos lê-lo. Então, o que queremos fazer é ir para
a próxima venda e tornar
esse código mais legível Portanto, precisamos usar o
belo sulibrar aqui. C e o analisador, que é o HTML Parser E talvez sopa impressa. Seja bonita, cinco. Bem, vamos ver. Então esta é a página. Às vezes, você pode ser
expulso da página da web, então você pode querer
ter certeza de que a página
foi carregada corretamente Então, talvez eu pudesse ir aqui
e procurar algo. Então, Winchester, vou
procurar Winchester. Sim, então a página parece
ter sido carregada corretamente. E não precisamos
da beleza lá. Então, deixe-me limpar o
caderno lá. Assim, conseguimos carregar a
página corretamente com as solicitações. E agora, o que vem a seguir?
Bem, a seguir, precisamos entender a
estrutura da página da web Portanto, precisamos usar a
ferramenta de inspeção em nosso navegador, e faremos isso na
próxima aula. Então veja.
201. Extraindo elementos Div: Ótimo. Então, vamos para a nossa página. Então, procuramos por molas de
trabalho lá. E o que queremos fazer agora é entender
a
estrutura da página da web Então, usamos a ferramenta Inspect lá. E a lógica é que você deseja percorrer todas
essas caixas, por assim dizer Então, pegamos o HTML
dessas caixas
e, em seguida,
entramos nesses HTMLs Então, nós iteramos
por meio desses HTMLs. E então encontramos as tags para os dados que
queremos obter. Isso nos leva ao ponto que devemos procurar os elementos que
identificam essas caixas. Então, se eu for inspecionar aqui novamente, verei que essa meia caixa
tem esse div com esse ID E, na verdade, eu quero
um nível superior, então eu quero a caixa inteira lá. Então, se eu for aqui, agora, isso se parece com a caixa
inteira aqui. Portanto, o interior aqui
deve estar os dados. Essa é a foto.
E esse é o preço. Então, aqui está um texto
para o preço, e temos esse preço promocional como uma classe para a etiqueta H four, que cria esse número aqui Portanto, esta é a
primeira divisão div. E então devemos
ter a próxima div em algum lugar lá, aqui Então, linha de
propriedade, linha de propriedade aqui, linha de
propriedade, linha de
propriedade novamente. Então, a
linha de propriedades da classe e novamente aqui. E deixe-me colocar isso aqui. Então, encaixe-o na parte inferior para que possamos ver
a caixa inteira lá Ok, assim. Então, vamos lá. Então, o que eu gostaria de
descartar e salvá-los
em um arquivo CSV ou
Excel com pandas posteriormente é que vou obter o
preço, o endereço,
o número de camas,
o número de banheiros, a área da propriedade
e também o tamanho do lote, se houver Portanto, algumas propriedades não
têm carga lá. Então, temos um truque e você
aprenderá como decifrá-lo. Então, esses são os
dados que vou pegar de cada propriedade. E deixe-me
colocar isso aqui novamente. E você pode
clicar aqui e inspecionar,
para que vá diretamente
para os elementos, ou para que vá diretamente
para os elementos, para o preço, ou manualmente, que provavelmente é melhor
porque ajuda você a entender
melhor o site, estrutura
da página da web Então, isso é um preço,
e aqui embaixo, aqui dentro, devem estar os elementos de endereço, detalhes
primários. Essas são as apostas. Então, se expandirmos isso, você verá que aqui está
o texto do endereço. Portanto, tem um intervalo de
com esse nome de classe. E aqui está o nome
da cidade e o código do estado e o
CEP também. Ótimo. Mas antes
de tudo, como eu disse, preciso passar por essa classe de linha de
propriedades do Div Então, vamos fazer isso aqui. E você sabe que tem
um método chamado final, que se aplica
ao objeto de sopa. Então, por fim, isso
gerará uma lista com
todos os elementos dif que têm uma classe de
was it Property row Sim, é Property Row. Linha de propriedades com R
maiúsculo, só isso. Então eu vou entrar, executar isso. E então o que você pode fazer? Bem, todos imprimem e
talvez vejam o que você ganha. Portanto, começa logo
no início da primeira divisão da linha de
propriedades. Então esse seria
o primeiro preço, que era esse
aqui em cima, aqui. Então, deve haver uma vírgula aqui após o término da primeira
divisão De qualquer forma, se você não quiser
encontrá-los manualmente,
você pode fazer alguma coisa. Você pode encontrar o tamanho de todo
esse objeto, que
é como uma lista, não
é exatamente uma lista. Na verdade, é
um elemento do conjunto de resultados do B four da
bela biblioteca de sopas, mas tem uma função de comprimento,
assim como a lista dois. Então, comprimento, e você ganha dez. E temos exatamente dez
resultados para cada página. Então, primeira página aqui, segunda
página dez resultados e assim por diante. Agora, isso é como uma lista, então não tem um bom
método, mas são elementos. Então, digamos que o primeiro elemento, esse elemento tenha um método final. Então, assim como você faz
com uma sopa bonita, ao aplicar o
método, um método final, uma bela sopa para
encontrar elementos de etiquetas, você pode fazer o mesmo com
os elementos da lista A. Por assim dizer, vamos chamar
o conjunto de resultados de uma lista. E isso significa que você pode aplicar um bom método a
esse código-fonte. Então, vamos procurar o preço. Bem, você pode ir até
a inspeção ou simplesmente dar uma olhada aqui, se estiver, isso não é muito código Então eu encontrei o preço aqui. Então, temos as
quatro tags H, H quatro. E também tem um
preço de propriedade, uma classe de preço. Então, vamos passar isso. Você pode
escolher não aprovar isso. Mas o problema que você pode
encontrar se não passar o nome da classe é
que, se você tiver outras tags H four no código, o Python também
as extrairá Portanto, você precisa especificar
qual H quatro você deseja. Então, coloque o preço aqui, encontre, e aqui está o preço Então, esse é um preço, mas também
com as etiquetas. E isso é na verdade
uma lista, como você vê. Agora, como temos apenas
um preço para cada propriedade, nesse caso, podemos
usar o método find. Então, isso
nos daria não resultados,
pelo menos , mas o elemento
tecnológico real. Isso significa que agora podemos
aplicar um objeto de texto aqui e obter aquela string
divertida lá Então, as coisas não são tão
simples na vida real, como você vê, mas, felizmente, todo esse objeto é
na verdade uma corda Portanto, é uma string Python simples. Isso significa que você pode aplicar métodos de
string a esse objeto. Então, deixe-me controlar isso
para remover o tipo. Então, nesse caso, o que queremos
aplicar é
remover todos esses caracteres. E uma maneira de fazer isso que
eu penso é substituir. Então você quer substituir a
barra invertida N por nada. Então, basta passar uma string vazia para
lá e ver o que você obtém. Ok, esses caras do site do século 21 decidiram dificultar
nossa vida. Mas que tal se inscrever? Então, temos algum espaço em
branco, como você vê, então substituímos o
espaço em branco por nada e obtemos a string real. Ótimo. Então, nós meio que
sabemos que as coisas estão
funcionando bem neste momento. E, por enquanto, estou apenas
imprimindo os resultados. Então, como eu já mencionei, é bom primeiro usar instruções de
impressão ao
criar seus programas
e, em seguida, substituir essas instruções de
impressão outras funções que
você deseja usar para esses dados que você está obtendo ou outros objetos com os quais
você está trabalhando. Então, em nosso exemplo
aqui, mais tarde, adicionaremos alguns métodos
pandas para pegar esses valores e
enviá-los para o arquivo CSE Então essa é uma das primeiras
coisas que eu gostaria de dizer. A segunda coisa é que aqui agora pegamos o valor
do primeiro elemento. E agora começamos a
pensar em ser eficientes. Então, precisamos, em vez
de extrair todos os outros elementos, como o endereço
da propriedade, o estado da
propriedade e assim por diante Talvez seja bom realmente
começar a construir nosso loop for. Portanto, agora sabemos que os valores
individuais estão sendo extraídos corretamente. Mas agora queremos ter
certeza de que um loop que itera por todas essas
propriedades também esteja funcionando E vamos começar a escrever o loop
na outra palestra. Mas, por enquanto, vamos realmente
organizar esse código. Então, aqui está um truque que você
pode usar em Júpiter. Então eu vou para a primeira célula
e estou no modo de comando. Então você pressiona Escape para ir para o modo de comando
e Shift e J, você seleciona a outra célula. J, novamente, selecione a outra célula, ou você pode subir com K, então J, J, J. E o que eu quero
fazer agora é
mesclar todas essas células
em uma única célula E para fazer isso com a
tecla Shift, você pressiona, então Shift M, e você tem todas as células mescladas
em uma única célula Então, isso é mais uma
questão de preferência, mas é bom ter um notebook
limpo lá. Então, isso é o que fizemos até agora. Vamos continuar e resumir o ciclo em outra palestra. Te vejo.
202. Scraping os endereços das propriedades: Então, temos a
sopa inteira da página da web, que na verdade é
o código-fonte. E também obtivemos o código-fonte das divisões com a linha de propriedade
da classe E agora conseguimos obter o preço da propriedade
apenas para a primeira divisão. Então, para apenas a primeira caixa aqui, agora para obter todas as caixas, precisamos iterar. Então, DD para deletar isso. E quatro,
digamos, item em liga. E, na verdade, eu gostaria de
manter tudo
impresso aqui para que você
possa ver o que tudo é. Então, se você esquecer
isso por um momento, poderá ver o que é. Então, é como uma lista. Então, para obter todos os itens, clique aqui. Então, usaremos o método de
impressão aqui. Mas eu gostaria de
escrevê-lo no final porque não quero
adicionar colchetes agora Portanto, é bom ter menos
colchetes por enquanto para que você veja esse
código mais claro, o código real Então, estamos examinando
o primeiro item, que é essa divisão aqui, e queremos aplicar
o método find a esse item ou apenas
o método find porque temos apenas
um H quatro aqui. Então, encontre, e queremos
encontrar o H quatro, que tem uma classe de preço de suporte E então o que
queremos obter
desse produto é o texto. E você viu que o texto
estava um pouco confuso,
então queremos substituir as extremidades da
barra invertida por nada
e, em seguida, outra Então havia espaço
e substitua-o por nada. Portanto, é a mesma linha que aqui. E então você
quer imprimir isso. Então, adicione uma declaração impressa lá. E sim, é isso.
Vamos ver como isso vai funcionar. Hmm. Isso foi rápido. Então, 725, 452. Delicioso. Isso é bom. Tudo bem. Deixe-me deletar
isso para economizar espaço. Então, todos nós
já definimos aqui. Portanto, não precisamos adicioná-lo aqui. E vamos agora e extrair esse gateway zero,
não parece um exemplo muito bom. Então, vamos ignorar isso e
extrair esse endereço aqui. Então Winchester Boulevard, e isso seria
inspecionar Então, isso tem uma tag span com uma classe de colapso de
endereço de propriedade Mas você pode ver
que você também tem outra classe aqui,
prop address collapse Então, duas classes, esse
é o endereço, e esse é o
nome da cidade. E veja se você tem outro endereço de
adereço, desmorona agora. Não, nós não temos. Então, o
endereço do adereço entrou em colapso Vamos adicionar outra
declaração aqui. Item. Então, esses endereços estão
dentro desse método novamente. Então, encontre o item. Agora, se você usar fine desta
vez em vez de Fine Ole, o
que o script
fará é capturar a primeira ocorrência de colapso do endereço
de propriedade Portanto, ele fornecerá o endereço do
Winchester Boulevard e ignorará
o segundo Portanto, ele ignorará Rock Springs. Então isso significa que
precisamos usar o O. E se você quiser
obter essa primeira linha, você gostaria de passar
o índice zero para essa lista de conjuntos de resultados seguida, um índice de um
para a próxima linha. Então, faremos isso. Essa era uma tag de span com uma classe de again, prop
address collapse Então, deixe-me imprimir isso para
ver o que temos até agora. Então, aqui está o preço
da primeira propriedade
e, em seguida, pegamos a lista de
resultados aqui, que na verdade tem dois elementos. Então, o endereço aqui
e, em seguida,
o nome da cidade com um
código de estado aqui e código postal. Então isso significa que precisamos
aplicar aqui o índice zero, se você quiser obter
o primeiro, ok? E então, Uh, vamos ver. Então aqui está o
primeiro, o primeiro elemento. Se você quiser o segundo, copie isso em uma passagem
aqui e passe uma aqui Executar. E aqui vamos nós. Ah, eu acho que você quer o texto, então você quer aplicar
o método de texto lá. Hm. Ótimo. E só por
uma questão de visibilidade, vamos adicionar outra
linha no final
do loop para passar
uma string vazia. Agora você pode ver os
blocos com mais clareza, e temos dez blocos lá. Muito incrível, não é? Então, vamos agora extrair o número de camas e
o número de banheiros. Então, essa é uma etiqueta de extensão
com uma cama de informações da classe. E banhos. Aqui está o outro copo giratório. Se valorizar o banho completo. Agora, aqui temos um problema. Não, precisamos ter cuidado aqui porque precisamos pegar
o número de banhos aqui, que está dentro das etiquetas B. Mas o número de banhos também
está dentro das etiquetas B. Assim, você pode seguir em frente e aplicar um bom método diretamente
nesse nível. Então, diretamente abaixo de O. Mas isso provavelmente causaria alguns problemas porque você
tem vários Bs lá. E então você também tem a área, que também deve ter um
pouco de etiqueta. Classe Span. Sim,
é uma pequena etiqueta. Então, às vezes você tem três etiquetas B, às vezes
você tem mais. Portanto, pode haver duas
soluções lá. Você pode assumir
que as apostas são sempre as primeiras e pode passar um índice de zero
para a lista de resultados. Então você pega camas,
e então você toma banheiros completos com um índice de um e dois para este metro quadrado aqui,
e três para este. Mas eu prefiro fazer isso de
uma forma mais construtiva. Então, eu gostaria de extrair
essas tags de gastos primeiro, depois entrar em cada uma
das tags de gastos e extrair
o valor dentro da tag B. Então, temos espaço para cama informativa e para banheiros completos,
que é este aqui. Sim, na verdade, isso está
listado como o terceiro. Portanto, as camas são as primeiras de
um metro quadrado, a área é a segunda e
depois as camas de casal e assim por diante. Portanto, não precisamos
pensar na ordem deles. Só precisamos pegar
os nomes das classes. Então, aposta informativa que
significa que você deseja acessar o
item, tudo bem, neste caso. Então, você quer encontrar o vão, e vamos primeiro fazer as camas, que eram informações sobre a cama. Então, vamos imprimi-lo primeiro
para ver se você está pronto para ir. E então você não ganha nada
pela primeira propriedade. Então, isso não tem
dados para camas e banheiros, então você não pode fazer
nada sobre isso. Às vezes, você só precisa aceitar
nenhum dado. E então aqui está o código, então o código-fonte para o
próximo. Agora, aqui está um truque. Se você aplicar o
método de texto a esse objeto, então ele deveria estar aqui, nesse texto, você receberá um erro. E observe atentamente
o que diz o erro. Portanto, diz que o objeto não tipográfico não
tem texto de atributo. Esse objeto não tipo
era esse aqui, então nenhum, que é
um objeto especial e não tem um método de
texto disponível. E então você precisa
contar para isso. E a forma de contabilizar essas exceções é usando
uma declaração de tentativa e aceitação Portanto, você precisa incluir esta
declaração impressa aqui e tentar Então, tente isso se funcionar. Se não fizer essas
outras coisas aqui. Então, o que é passar. Então, simplesmente ignore esses
não tipos. Então, novamente, tente extrair realmente o método de texto
desse texto estendido. E se isso não estiver disponível, basta passar para a próxima
iteração do loop Então, vamos tentar isso. E
sim, agora está funcionando. Agora, como você pode ver, temos
o texto da tag B, mas também o texto
da tag span. Então esse é o
texto da tag B, e esse é o texto
da tag span. Então, se isso é bom para
você, você pode deixar assim. Mas eu gostaria de ter apenas
o número simples. E para fazer isso,
talvez você precise aplicar os métodos de busca. Então, temos, novamente, esse código-fonte, então precisamos encontrar
dentro desse código-fonte. Precisamos encontrar a tag Bt, que não tem um nome de classe, então deixamos assim e precisamos extrair o
texto dessa tag de bits. E isso fornece apenas
o número. Então, quatro, cinco e assim por diante. Então isso é bom. Agora,
vamos fazer o mesmo. Então, copiarei esse
bloco inteiro e faremos o mesmo com
o número de banhos. Vamos criar um espaço aqui. E para o número disso,
então o tamanho da área. E essa outra coisa aqui. Então, meio banho. Então, vamos contar para isso também. Então, pés quadrados de
informação, pés quadrados de informação lá. Nós vamos aqui desse jeito. Então temos informações
valiosas sobre banheiro completo. E mais um para os lavabos. Então, isso seria um lavabo com
valor de informação. Executar. Temos um problema de
indentação Então Troy, essa é boa. Este também não é
bom aqui. Portanto, você precisa recuar as declarações depois de Troy e do autor da declaração Então execute e vamos ver. Bom. Então, quatro camas e depois
quatro banheiros lá. Mas então aqui temos a
área ou a propriedade. Então, o pedido não é
muito bom assim. Nesse caso, não
queremos escrever pass aqui, mas talvez queiramos imprimir nenhum. Nesses casos, então imprima, nenhum, imprima, nenhum. O mesmo aqui. Executar. E agora parece melhor. Agora sabemos a ordem em
que sabemos que
temos quatro camas nesta propriedade, e o tamanho da área não
está disponível, e então temos quatro banheiros. E então não temos nenhuma informação sobre
os lavabos de lá. Então, está parecendo bom. E eu gostaria de
parar aqui e obter mais
alguns dados na próxima
palestra. Sim, vamos seguir em frente.
203. Raspagem de elementos especiais: Aqui estamos novamente. E
temos esse script, que produz essa saída. Portanto, temos alguns atributos
para cada uma dessas propriedades. Especificamente, esses são os atributos
desse bloco aqui. Então, preço, endereço e alguns atributos, como o
número de apostas e assim por diante. Agora, gostaria de ir mais longe e extrair o tamanho do lote de cada propriedade sempre que esse
atributo estiver disponível. Então, como você pode ver aqui, algumas propriedades não
têm muito tamanho. E embora o tamanho do lote seja um atributo
importante a ser conhecido de uma propriedade, nesse caso, também é bastante difícil de
extrair desta página da web E o motivo é que, se
você olhar o código-fonte, verá que esse é o
nome dos atributos,
portanto, o tamanho do lote, e esse é o valor real que
queremos extrair. E ambos estão
dentro dessa divisão. Então, a primeira linha
aí. Essa divisão tem um nome
de classe de grupo de colunas. Agora temos outra classe de grupo de
colunas, então outra divisão com a classe de grupo de colunas
aqui como a segunda linha. Então, se você olhar para
outra propriedade, então outra linha de propriedade. Você verá que essa divisão do grupo de
colunas está se repetindo aqui Portanto, se você escrever um
loop para extrair o intervalo com a
classe do nome do recurso
para todas as propriedades, para essa propriedade, poderá obter o tamanho real do lote. Mas para este outro, você provavelmente saberia a
idade da propriedade, mas esperaria o tamanho
do lote Você estaria obtendo a idade
da propriedade porque a idade da propriedade é o primeiro nome de
característica lá. E o tamanho do lote também é
o primeiro nome do recurso. Então, com a classe de nome de recurso
na segunda propriedade. Portanto, esse é um daqueles
casos em que você precisa
pensar em soluções alternativas. Então, se você apontar para o método do grupo de
colunas, dizer encontrar tudo em divisão
com a classe column group
e, dentro disso, encontrar o nome do
recurso com índice zero, você obterá as primeiras linhas. Você sabe disso. Agora, vamos
encontrar uma solução então. Bem, que tal dar uma olhada em
todos esses grupos de colunas? Em seguida, verificamos
que, se o texto
do grupo de recursos for
igual ao tamanho do lote, forneça o texto
dentro do nome do recurso. Portanto, nessa
iteração específica, novamente, se o grupo de recursos for igual ao tamanho do
lote ou tiver uma string de
tamanho de lote dentro do texto, nessa iteração atual, forneça o valor do texto do nome
do recurso Então, precisaremos de um loop aqui. Dentro do nosso grande circuito. Então, esse grande loop aqui, vamos chamá-lo de
grande loop, está
passando por cada uma dessas linhas. Então, dentro disso, dentro da iteração atual
desse grande loop Então, digamos que a iteração
atual esteja passando por essa propriedade Então, dentro disso, vamos para
as divisões do grupo de colunas. Então, digamos quatro, vamos chamar essa variável de grupo de colunas na
variável atual será item. Então, novamente, item como fizemos lá. Eu acho que acho tudo, na verdade. Então você quer encontrar
divisões com um nome de classe da coluna Grupo Grupo. E deixe-me imprimir rapidamente a variável do grupo de colunas. Então, só para ver o que
temos até agora. E aqui vamos nós. Então, esses são os dados que temos, e aqui vai. Deixe-me subir até aqui. Aqui está o
código-fonte de cada uma das divisões do
grupo de colunas Então, a primeira divisão, a
segunda divisão e assim por diante. Então, esses são os recursos que correspondem a
esse cabeçalho aqui. E então temos o estilo
arquitetônico, que não é o que precisamos. Temos o tipo de telhado, então,
a cada iteração, Python está
imprimindo essas linhas. Agora, o que queremos
fazer com essas linhas, vamos manter a impressão
lá por um tempo. O que queremos fazer
com essas linhas é repeti-las novamente. Então, iteraremos
por meio dessa div e iteraremos por
essa outra div e
veremos que, se o texto
ou o grupo de recursos
nessa iteração atual
tiver o tamanho do lote da string,
obteremos o texto do nome do
recurso para a nome do
recurso Então, novamente, precisamos
de quatro voltas aqui. Que passará por cada uma
dessas divisões de grupos de colunas Então, o que ele fará é acessar o elemento do grupo de
recursos e também o
elemento do nome do recurso. Portanto, para o nome do recurso do
grupo precisamos usar
uma função zip lá. Então, como você deve
se lembrar, uma função zip, que é uma função
Python embutida, é usada para iterar duas
listas ao mesmo tempo Então, aqui é onde você insere o Tolist dentro
da função zip E nossas duas listas seriam:
a primeira seria um grupo de
colunas que
encontra todas as extensões, então abranja com um
nome de classe ou grupo de recursos Da mesma forma, precisamos acessar o grupo de colunas que localiza a pesquisa e precisamos da tag span novamente. Mas desta vez precisamos de uma
classe de nome de recurso. Portanto, não confunda essas variáveis
com esses nomes de classes. E aqui fecha
a função zip. Então, esse suporte aqui. Então,
depois das quatro declarações, você precisa da coluna aqui. Ok. Agora, o que você quer
fazer para cada grupo de recursos? Bem, vamos
imprimir temporariamente o
texto do grupo de recursos, por exemplo. E também o texto do ponto
do nome do recurso. E deixe-me deletar isso. Portanto, esse grupo de colunas aqui corresponde a todo
esse bloco de divisões. Então execute isso. uma sintaxe inválida aqui
e procuramos a Sim, aqui está uma pequena flecha. Então, este aqui está
nos apontando para esse personagem, que na verdade é uma semi coluna Por alguma razão, eu coloquei
um ponto e coluna lá,
então deveria ser uma
coluna, não um ponto Ok, deixe-me executar isso de novo. Então, aqui está o que obtemos. Para a primeira propriedade, por exemplo, temos os atributos
anteriores
impressos. Então não, não, não, para
este primeiro. E então temos aqui o texto
do grupo de recursos, e aqui está o texto do nome do
recurso. Da mesma forma, temos o texto do grupo de
recursos aqui para o próximo
grupo de recursos e nome do recurso. E então temos a
próxima propriedade lá, que na verdade tem
muitos atributos lá. Gás combustível de aquecimento. E aqui está algo
que você deve saber agora. Você deve estar ciente sobre. Deixe-me abrir novamente, o site da
Century 21. Rock Springs. Então, como você pode ver,
a segunda propriedade não tem
tantos atributos. Portanto, tem eletrodomésticos antigos
e porão, mas não tem características
e refrigeração ruins, etc Portanto, esses atributos extras estão alguma forma escondidos no
código-fonte desta página da web, e você pode
acessá-los se quiser Então, se você clicar no link
da página da web da propriedade
específica. Então, aqui estão todos os atributos
que estamos vendo aqui. Então, a lareira conta com
duas lareiras. Aqui está a contagem de lareiras. E você também pode ver que
o tamanho do lote está listado na
página da propriedade. Então aqui está. O que na verdade é uma coisa boa. Portanto, podemos
extrair todos os atributos de uma propriedade sem precisar
entrar na
página da propriedade, o link da propriedade. Então isso é uma coisa boa. E agora, o que precisamos fazer é manter a
declaração impressa lá por um tempo e precisamos verificar. Então, aqui sob os quatro loops, se o tamanho do lote no recurso
agrupar esse texto. Então, por exemplo, a string
do tamanho do lote está dentro desse texto do grupo de recursos? Se for, então me dê o
recurso chamado texto. Então, isso me dará
o valor aqui. Se não for, simplesmente
não faça nada. Então, deixamos o loop como está. Então, deixe-me deletar
essa função agora, a função de impressão
que executamos anteriormente e executar isso. Então, vamos lá. Não temos nada aqui. Esses são atributos anteriores. E então temos quatro
atributos aqui, e então temos 0,221 acres Aqui temos meio acre. Ok, isso parece bom agora, e eu gostaria passar
para a próxima
palestra, onde você aprenderá como se livrar dessas instruções
impressas e
realmente armazenar todos esses atributos em uma tabela.
Portanto, no quadro de dados do Panda, exportamos o quadro de
dados simplesmente
em arquivo CSV ou arquivo
Excel, exportamos o quadro de
dados simplesmente em arquivo CSV ou arquivo
Excel Então,
teremos uma coluna de preço e
uma coluna de endereço, uma coluna de estado com um CEP e também colunas com esses atributos de
tamanho de lote. Então, vamos seguir em frente.
204. Salvando os dados extraídos em arquivos CSV: Agora, vamos pensar em como
podemos somar todos esses valores. Então, esses valores em um
quadro de dados, quadro de dados pandas. Então, pensei em
ter uma,
duas, três, quatro, cinco, seis,
sete, mais o tamanho do lote de oito
colunas no quadro de dados. E então, para cada
linha, você teria, por
exemplo, no preço, 725.000 para isso, e a próxima
para 152.000,
e assim por diante até que todas as
propriedades fossem consumidas Então, espero que a estrutura esteja
clara e como fazer isso agora. Bem, uma solução seria talvez iterar no quadro
de dados, mas essa é uma solução cara. leva muito
tempo, o processo pode ficar lento quando
você itera por meio de quadros dados, pois os quadros de dados não
são criados para
iterar por meio deles Então, provavelmente é melhor criar um
quadro de dados a partir do
dicionário Python ou de uma lista
de dicionários E, na verdade, é isso
que eu vou fazer. Em cada iteração,
o que
farei é adicionar esses valores
a um dicionário Então, por exemplo, vou começar
com o primeiro dicionário. Então, na primeira iteração, terei uma
chave de preço e o valor do preço como o primeiro
par do dicionário
e, em seguida, o próximo par
desse mesmo dicionário
seria a chave de endereço e
o valor do endereço E então vamos para o próximo par. Então, adicionamos o terceiro par aqui
e, em seguida, um quarto par quinto,
sexto, sétimo e oitavo. Então, emparelhe um dicionário de oito pares na
primeira iteração. Então, na próxima iteração, preciso criar outro dicionário com as mesmas chaves Então teríamos, novamente, o preço
e o valor desse preço, que corresponderia ao
valor de uma segunda propriedade. Então eu vou construir um
segundo dicionário e depois um terceiro dicionário, e assim por diante até que todas as dez
propriedades aqui sejam consumidas. Então, vou acabar com
dez dicionários. Agora, você também precisa armazenar
esses dicionários em algum lugar porque se você apenas
iterar os dicionários
e os perder a cada iteração,
não terá feito
nada ,
porque se você apenas
iterar os dicionários
e os perder a cada iteração,
não terá feito
nada. Então, o que faremos é armazenar
esses dicionários em uma lista. Portanto, a primeira coisa que
você pode querer fazer é iniciar
cada iteração com
um dicionário vazio para poder adicionar pares de valores-chave
a
esse dicionário de frases Então, depois de criar
um dicionário vazio, você substitui
essas instruções impressas. Então, digamos que o
preço seja a chave do primeiro dicionário,
e isso seria igual. Se não precisarmos dos colchetes, este também. Então é isso. Da mesma forma, você pode
fazer isso como endereço. Remova isso novamente aqui. Vamos chamar essa localidade. Então, estamos criando
chaves em tempo real,
definindo preços, endereço e localidade, e estamos atribuindo valores a essas chaves novamente em Então, talvez fizesse sentido
ter um preço aqui embaixo. Então, começamos com endereço, localidade e depois o preço Essas seriam as camas. E se não houver camas, você
precisará passar
nenhuma para as camas. E então, novamente,
isso seria a área, que é igual a essas novamente. A mesma coisa para a área, não quando não há área e mais
uma aqui. Banheiros completos. Deixe-me copiar isso. Nenhuma. E
seriam banhos quentes. Igual a nenhum. Temos um segmento impresso
aqui, do qual não precisamos. Então, aqui estamos examinando nome de
cada recurso do grupo, se o tamanho do
lote estiver no texto do grupo de recursos, então vamos chamar
esse tamanho de lote. É igual ao texto do nome do recurso. E vamos remover essa declaração
impressa. E assim, no final desse ciclo, você terá seu
primeiro dicionário. Então, no final da
primeira iteração, você terá seu
primeiro dicionário Agora você quer armazenar esse
dicionário em algum lugar. Então, vamos armazená-lo em uma lista. Então, normalmente, você precisa
criar uma lista fora do loop, uma lista
vazia lá. E então, no final do loop, que está exatamente aqui, você deseja acrescentar
o dicionário Assim, você receberá uma lista de
vários dicionários. Nesse caso, você
receberá uma lista de dez dicionários.
Vamos executar isso. Temos uma
sintaxe inválida aí, bads. Eu esqueci de ter o operador de
atribuição lá,
e certo . Sem erro desta vez. Vamos imprimir L aqui. E está parecendo bom. Então você pode verificar o
comprimento disso. Então, são dez. Agora, se você quiser lançar essa lista de dicionários
para um quadro de dados,
essa lista para um quadro de dados, bem,
você precisaria usar Pandas,
e então DF é igual
ao quadro você precisaria usar Pandas, e então DF é igual
ao E aqui precisamos escrever uma
declaração muito longa. Estou correndo Você só precisa passar a
lista para lá e criar um quadro de dados a partir dessa
lista de dicionários Então, vamos verificar o quadro de dados. E bum, aqui estão os dados. E, como você pode ver, até obtemos valores de
Nan quando não
há muito tamanho de lote. Então, o Pandas entende quando não
há dados
nos dicionários Então, por exemplo, aqui não
tínhamos um tamanho de lote, e o Pandas atribuirá um valor
não por nan para isso,
que, se você quiser,
pode simplesmente substituir por um valor sem valor Então você precisa trabalhar muito
para salvar isso em um arquivo CSV. Uma declaração muito longa. Ok, então vou colocar esse CSV,
e deve estar pronto. Deixe-me verificar isso. Aqui está um arquivo. E
aqui estão os dados. Então, está parecendo bom. Ótimo.
Agora, o que vem a seguir quando ,
como você pode imaginar, precisamos obter as propriedades
de todas as páginas. Então, segunda página e terceira página. Então, faremos isso na
próxima palestra. Te vejo.
205. Rastreando várias páginas da web +: Ótimo. Então, fizemos o script
funcionar por uma página. Então, para a primeira página, mas podemos ter várias
páginas lá. Então, para Rock Springs, temos três páginas
com 28 listagens. Então, 28 propriedades listadas
lá para venda ou para fins. Na verdade, eles estão à venda, então casas à venda. Então esta é a segunda página
com mais dez propriedades, e então você tem
a última página lá, que deve ter
oito propriedades. Portanto, temos 28 no total. Agora, esta é uma cidade pequena, então não tem
muitos anúncios lá, mas com cidades grandes, você terá muitas páginas. E o script que
criaremos para extrair dados de
propriedades dessas páginas funcionará com qualquer
número de páginas. Como podemos obter
dados de todas as páginas? Bem, não há mágica lá, mas há um único truque. Sabe, se você pesquisar
novamente por Rock Springs, verá uma URL inicial lá, que carregamos em Python Acho que sem
isso K é igual a um. Era só assim. Então, eu não tenho certeza
do que isso significava, mas de qualquer forma, talvez tenha sido porque eu procurei
novamente por fontes rochosas. Então essa é a primeira página. Agora, a lógica por trás da extração de
dados de outras
páginas é que o que
precisamos fazer é carregar
as outras páginas em
Python também, usando Assim como fizemos aqui, carregamos a primeira página. Agora precisamos descobrir uma
maneira de carregar as outras páginas. Podemos
percorrer manualmente cada uma das 300 páginas, três páginas neste caso, e copiar o URL, ou podemos
tentar descobrir uma maneira. Então, para descobrir a regra, se existe uma regra de que o URL muda quando você alterna
pelas páginas, provavelmente sempre
existirá uma regra. Então, precisamos descobrir isso. Então eu fui para a segunda
página e, como você vê, agora a URL mudou com
alguma extensão lá. Então T é igual a zero
e C é igual a zero. Se você for para a terceira página, verá que o URL
antes de 20 não mudou, mas C foi alterado para 20. Agora, se você for para a
primeira página novamente, verá que S
é igual a zero. Então, quando você pesquisa diretamente por
Rock Springs, você obtém o URL base
sem essa extensão. E então, se você for
para a primeira página, clicando
manualmente
no número um aqui, você será incluído
na regra que altera o URL quando você
percorre todas as páginas. Isso significa que podemos usar esse
URL para pegar a primeira página e depois
percorrer o URL. E altere esse valor
para dez à medida que iteramos. Aumente em dez. Então, de 010 e 20, e se tivermos mais páginas, seriam 30 e assim por diante Então, espero que você tenha entendido. Agora vamos ver
, então vamos armazenar uma URL base lá. Deveríamos ser algo
assim sem o número. Então esse é o URL da estatística. E agora, antes de solicitarmos o
código-fonte com solicitações, vamos primeiro tentar criar o
URL e imprimi-lo. Então, estamos usando uma declaração impressa , como sempre, para experimentar coisas. Então, digamos que para uma
página em um intervalo, bem, o intervalo deve
começar do zero, e até nós tínhamos
três páginas lá, e a última página tinha 20. Então, talvez coloque 30 lá e repita
com uma etapa de dez Então, a cada iteração, aumentaremos em dez Por enquanto, não se preocupe com
o número de páginas. Por enquanto, estamos apenas
colocando um valor manualmente, então sabemos que isso
tem três páginas, então estou colocando 30 lá. Mas, mais tarde, vamos mudar
isso para, na verdade, uma variável que captura várias
páginas do site Então, se em vez de Rock Springs, você tivesse Nova York e provavelmente
teria 200 páginas. Então você quer pegar o
número da última página 200 e depois passar algo
como 200 vezes 20 aqui, então você obtém 2000 e obtém
um loop que vai para zero, dez e até 2000. Então, faremos isso
mais tarde. Por enquanto, imprime? URL base plus. Bem, essa variável de página
obteria um número inteiro. Então, precisamos
converter esse inteiro string usando
o método string E então a página entra nela. Então, vamos experimentar isso. Ana, esses são os três reis. Deixe-me abrir um
deles. Aqui vamos nós. E esse é o segundo conjunto de
resultados. Então, é a página dois. Ótimo. Deixe-me fechar isso. Mas
é claro que não estamos
interessados em imprimir , então não queremos
imprimir o URL. Queremos obter o
código-fonte deles. Então, o que você quer fazer
é igualar as solicitações. Então você está dentro do loop, e depois vamos mesclar esse
loop com o outro código Então, vamos nos concentrar nisso por enquanto. Obtenha o URL base mais a
sequência de caracteres do número da página. E só isso, você
quer pegar o conteúdo da solicitação e também fazer a sopa. Sopa tão linda, analisador
C e HTML. E, por enquanto, vamos
tentar imprimir
a versão embelezada
do objeto de sopa. Ótimo. E isso demorou um pouco, mas aqui está o resultado. Então, na primeira iteração, obtivemos a URL impressa por essa função,
pela função de impressão, e então obtivemos a versão
embelezada do
código-fonte da primeira URL, que é Então, de qualquer forma, você entendeu. Então isso parece estar funcionando, mas é o que precisamos de
todo o código-fonte. Portanto, temos o
código-fonte de todas as três páginas. Portanto, não precisamos imprimir
todo o código-fonte, mas apenas extrair as divisões
das linhas da propriedade Então, assim como fizemos aqui, pegamos a sopa
para a primeira página e depois criamos uma
variável completa lá. Então, fazemos o mesmo aqui. Mas desta vez, ele deve ser indentado
porque está dentro de um loop Então, tudo e a
divisão de classes da linha de propriedades, isso parece bom. Então, se você imprimir, só para
conferir tudo aqui está o resultado. Então, o primeiro URL é impresso
e, em seguida, você tem
essas divisões. E então você também tem
muitos dados aqui. Então, agora, o que você quer
fazer é pegar todo o código que
acabou de criar lá e talvez excluir isso e
excluir a célula inteira, e você quer colocar
esse código aqui. Ótimo. Agora, o próximo passo é que
você fez isso em uma página e agora está
percorrendo todas as Então, o que você quer fazer
é recuar todo esse bloco à direita para que esse bloco se torne parte
do circuito de quatro Portanto, controle e
feche o colchete
para recuar o texto para recuar o Agora, esse loop aqui será executado quantas vezes
houver páginas lá. Então, o que podemos fazer agora? Bem, podemos testar o código. Então, deixe-me executar
esse shift enter, e temos que esperar um pouco aqui. Então parece que está funcionando. Então, neste momento,
devemos ter a lista L
com todos os dados. E aqui convertemos essa lista
L em um quadro de dados. Então, vamos executar isso. E aqui
executamos o quadro de dados. Então, vamos ver agora. Sim. E então temos 425 linhas
porque começamos do zero. Mas tínhamos 28
anúncios, na verdade. Isso significa que essas três
últimas propriedades não
foram listadas aqui porque algo
aconteceu lá. Então, estamos na página três aqui, e a última bem-sucedida foi
a Wen Avenue. Então, procuramos a Avenida Wende,
aqui está a Avenida Wende. Portanto, tem um endereço e
a localidade Sook Springs. E a seguinte, tem apenas a localidade lá Então, nesse caso, o que você pode fazer
é tentar lidar com uma exceção
aqui no código. Então, para este
aqui, poderíamos dizer: tente fazer isso e
aceitar que DCalit é igual a nenhum E agora vou executar isso novamente. Esperemos que não
haja um erro aí. Sim, isso foi executado
com sucesso. Execute isso no quadro de dados. E vamos ver. Sim, agora, parece que
temos 28 fileiras lá. Então isso parece estar funcionando. E a última coisa que você
quer fazer é, você sabe, em vez de passar esse
intervalo manualmente aqui, poderíamos adicionar na verdade uma variável que
detecta um número de página E tudo o que
precisamos fazer é acessar nosso site. Deixe-me remover isso. E então você quer descobrir onde esse último número
está sendo renderizado Então esse é o indicador
do número de páginas. Portanto, temos três
páginas neste caso, inspecione isso e isso nos
leva a esse ponto Na verdade, neste caso,
diz página, página atual. Então, vamos para a primeira
página. E deixe-me fechar isso. Então, devemos estar
na primeira página quando estamos no roteiro
pela primeira vez. E nessa primeira página, então queremos pegar o
conteúdo da primeira página
e, em seguida, queremos
saber o elemento desse último número. Então, vemos que esse é o elemento
a com a página da classe. E aqui está o texto, então três. Esse deve ser, na verdade o último elemento com
uma classe de página. Portanto, você terá
alguns elementos com a classe de página, e esse deve ser o último. Sim. Então esse deve
ser o último. Então, mantemos isso em
mente e vamos aqui, e o que podemos fazer aqui agora é pegar o número da
página aqui. Então, página, vamos chamar
esse número de página. Isso seria igual a sopa. Portanto, a sopa conterá o código
HTML da primeira página. Então, essa aqui, que não é uma solicitação do Ajax Portanto, é simplesmente
uma desta página. Então, queremos encontrar todos os elementos
A com uma classe. Da página. Então, se eu imprimir só
para ver o que temos até agora, número da
página mostra onde você
tem alguns elementos. Mas o último é
o número da última página. Então, três, é disso que precisamos. Então, precisamos pegar o
último item da lista, o que significa menos um,
um índice de menos um e texto E sim, temos três aqui. E então precisamos transformar
esse número agora em 30. E a maneira de fazer isso é
apenas o número da página vezes dez. Então, isso lhe daria 30. Bem, quase porque
esse número de página é na verdade uma string aqui, você sabe, digite outro colchete. Portanto, é do tipo string. E isso significa que você precisa
adicionar números inteiros aqui. Então, você deseja converter
essa string um número inteiro e depois multiplicá-la por dez para obter 30 Então isso deve funcionar agora, e tudo deve
funcionar, eu acredito. Então, deixe-me executar isso. O URL está sendo
impresso e o script finalizado. Então, quando você não
tem o texto ocupado antes do título
do seu arquivo aqui, isso significa que o
script está em execução. Então, agora não temos isso,
então o roteiro terminou. Execute isso. E esses são nossos resultados e
exporte-os para um arquivo CSV E vamos verificar.
Então eu coloquei esse CSV E aqui estão os dados. Portanto, não temos nenhuma reputação aqui. Não, tudo parece único. Isso encerra esta seção
do web scrabbing. Então, se você quiser encontrar
outras localidades, eu tentei
isso
para fontes rochosas, mas você pode tentar com
qualquer outra localidade Então, tudo o que você precisa fazer é
alterar a URL ou até mesmo implementar alguma entrada do usuário
para que o usuário insira um nome, e então você constrói a URL e depois passa
a URL aqui. Então, não precisamos disso, limpe isso também. E se você quiser, você pode mesclar
esta célula com esta. Assim, você pode executar o script
inteiro em uma célula. E você também pode salvar isso. Então, baixe-o como um arquivo Python e você terá todo o código-fonte Então, o script Python. E mais essas linhas, mas
com uma hashtag de comando. E você pode executá-lo
como um script inteiro. Então eu espero que você goste disso. Eu sei que isso foi
muito difícil de digerir. E se você tiver dúvidas,
pergunte a elas. Eu ficaria feliz em ajudá-lo. Então, espero que você tenha aprendido
muito com isso, e prossigamos
nas próximas seções, então ainda temos coisas muito
interessantes para fazer. E te vejo mais tarde.
206. Aplicativo 9: Django e Bootstrap Blog e aplicativo Tradutor +: Ei, bem-vindo a uma palestra muito
informativa, especialmente sobre aqueles que estão interessados em criar
aplicativos web com Python Como você deve saber, o
Python é usado para propósitos
diferentes
de automatizar tarefas
rotineiras Digamos que você queira gerar relatórios
em PDF automaticamente, enviar
e-mails automáticos, etc Depois, você pode usar o Python para análise e visualização de
dados, ciência de
dados e aprendizado de
máquina, mas também para Então, construindo
aplicativos web com Python. E aqui é onde eu
gostaria de parar e explicar como
exatamente o Python pode
ser usado no desenvolvimento web
e quais
estruturas web Python você ser usado no desenvolvimento web e quais
estruturas web Python Então, acabei de mencionar a
palavra estrutura da web. Então, o que é um framework web? Bem, com o Python, você pode criar aplicativos usando
Python simples ou
usando uma das estruturas web do Python ,
que são basicamente bibliotecas do
Python que você instala com o
PIP aplicativos usando
Python simples ou
usando uma das estruturas web do Python,
que são basicamente bibliotecas do
Python que você instala com o
PIP. E essas estruturas web
facilitam a criação de
aplicativos web usando Python Agora, posso dizer que
criar um aplicativo web sem usar um desses frameworks
web é como reinventar Porque se você não
usa uma estrutura da web, basicamente
precisa
reescrever todo o código que os autores escreveram e que os autores dessas estruturas
da web Então, em vez disso, nós apenas instalamos
essas estruturas da web e usamos esse código Isso está dentro das estruturas
da web. E esse código geralmente consiste
em lidar com solicitações
HDP e entregar páginas
da web no navegador Portanto, tarefas rotineiras de baixo nível. Mas, em vez de lidar
com essa tarefa, queremos nos concentrar em
criar a funcionalidade a praticidade de
nosso aplicativo web Então, criando as caixas de entrada, por exemplo, para nossos formulários, enviando usuários de uma página da web para outra,
coisas assim Portanto, você deve usar
uma estrutura web. Então, acho que
esclarecemos esse ponto que você deve usar
uma estrutura web Agora, a próxima pergunta é: qual dos
frameworks da web você deve usar Bem, existem muitos
frameworks web para Python , mas vou me
concentrar apenas em três deles , que são flask
, jango Vamos começar com o FLASK. FLASK é uma estrutura da web geralmente voltada para a criação de
pequenos aplicativos da web Por exemplo, digamos que
você queira criar um pequeno tradutor que traduza de um
idioma para Pense no Google Translate. Se você quer apenas aquele
aplicativo da web em que as pessoas
acessam seu domínio,
digamos, translator.com, e você só tem
essas duas caixas lá, as pessoas digitarão o texto em um idioma na primeira
caixa e obterão os Então, a tradução
na outra caixa. Então, isso seria um aplicativo pequeno. Outro exemplo seria
um aplicativo em que você converte, digamos, imagens JPG
em imagens PNG. Então, as pessoas fazem upload de uma imagem
em JPG ou vice-versa. Portanto, o FLASK lida com
todos os carregamentos e processamentos em segundo plano Em segundo plano, é claro, você provavelmente precisará uma
biblioteca de processamento de imagens além do FLASK Então você terá que instalar
o Pip install Flask e talvez o Pip
instale o CV dois, então abra o CV para fazer o processamento Mas a veiculação do site para o aplicativo web
será feita com o FLASK Assim, o FLASK obterá
a imagem original, obterá a imagem de
saída do OpenCV e servirá a imagem de saída para
download em seu Então, esses são pequenos aplicativos da web. Agora, não me interpretem
mal com o FAS, você também pode criar aplicativos web
maiores e o que quero dizer com aplicativos
web maiores. Aplicativos web maiores, quero
dizer coisas como, digamos que você tenha um site de
blog onde você adiciona blogs toda semana ou a
cada dois dias, mais ou menos. Então, talvez você tenha
vários autores que escrevem conteúdo para o seu blog. Para esse site de bloqueio. Então, vamos ter blocos
diferentes, e todos esses blocos
precisam ser salvos em um banco de dados. Agora, o Flask pode fazer
isso, é claro, mas Jango faria isso melhor Jango faria isso melhor porque é
mais fácil trabalhar com
bancos de dados com o jango porque ele tem um melhor nível
de Então, com o FAS, você
também pode fazer isso com o FAS, mas dá mais trabalho. Você precisa realizar mais tarefas
rotineiras para o FAS. E o jango também
permitiria que você adicionasse mais aplicativos nesse projeto de
site Então, pegamos o
exemplo dos blocos. Você terá blocos
em seu site, mas talvez queira
adicionar outro recurso. Digamos que você queira
adicionar um tradutor lá. Então, Jango também pode
criar um tradutor. Além desse site existente. Mas se você quiser
criar um tradutor sozinho
, o jango seria um O que eu quero dizer com isso? Com isso, quero dizer que,
para aplicativos web menores, jango exige mais trabalho para
configurá-lo para configurar um projeto jango É preciso mais trabalho. Mas depois de configurar
um projeto Jangle
, as coisas correm bem. Mas para aplicativos menores, é bom criar apenas
um aplicativo FAsK É muito fácil criar um. Então essa é a diferença
entre jango e FASC. Agora vem Just Pi. Just Pi é uma estrutura muito nova. E por que eu incluí Just Pi nesse conjunto de
três estruturas web Agora, Just Pi é muito especial. O que eu quero dizer com isso? Bem, com o FAS e o jango, você também precisa conhecer HTML
e CSS para poder criar aplicativos web, porque cada página da web que
você vê na Internet é construída em HTML Então, todas as caixas e botões de texto e
entrada. Tudo isso é construído em
código HTML, o que é muito fácil. Portanto, não se assuste com o HTML. É um
idioma muito fácil de aprender. Mas estou apenas dizendo
que você não pode criar o front-end de
uma página da web com Python Portanto, o HTML é para o front-end. E então o CSS serve para embelezar para embelezar a aparência
desses elementos HTML Assim,
as caixas de texto, o texto,
as cores, tudo isso pode
ser melhorado com CSS Portanto, CSS também é uma linguagem muito
fácil de aprender. Portanto, você terá que escrever
algum código CSS e HTML e salvá-lo em arquivos HTML e
CSS, respectivamente, e colocar esses arquivos
dentro do seu aplicativo web, seja no jango ou no Flask Agora, é aqui que entra o
JSPi. O JSpi permite que você
crie aplicativos web sem escrever nenhuma
linha de HTML e CSS Mas Juspi é muito novo. É uma nova estrutura, estrutura
web. E, como eu disse, o bom do Jpi é que você não precisa
escrever HTML e CSS
porque o JSpi tem alguns objetos Python específicos Digamos que ele tenha
um DIF para criar essas divisões onde você pode colocar textos e
coisas assim, ou tenha um objeto de botão, objeto de botão
Python para criar
um botão na Obviamente, a desvantagem
disso é que você não é muito flexível como seria
com o FLASK e Novamente, eu diria que o Jpi
também é para pequenos aplicativos da web Se você deseja criar um
site de blog com muito conteúdo, o Just Pi não é a melhor escolha. Não funciona muito
bem com bancos de dados
tanto quanto o Jango ou o FLASK Mas, novamente, se você quer
apenas criar um pequeno aplicativo web e
não sabe CSS ou HTML, então o Juspi pode ser
melhor do que o FLASK Então essa foi uma visão geral de três estruturas web para Python Agora, todas essas três estruturas
da web são abordadas no
curso deste curso Portanto, criaremos
pelo menos um aplicativo da web com cada uma dessas
três estruturas da web, e pode ser tentador
que você queira
assistir apenas aos vídeos da estrutura da
web de que gosta, mas eu recomendo que você não pule nenhuma
dessas estruturas da Dizendo isso porque
se você quiser
fazer desenvolvimento web com Python
, é uma boa ideia se
expor a diferentes estruturas
da web Cada um dos frameworks
faz as coisas de forma diferente, então você aprenderá
muito sobre desenvolvimento web Por exemplo, o FASC faz coisas um pouco mais simples e cruas, que ajuda você a entender desenvolvimento
web de
uma perspectiva mais profunda Mas então você aprende
sobre o jango e
apreciará o alto nível de
abstração que o jango Você apreciará como
é fácil fazer alterações
em seus aplicativos da web. Quando você usa o jango por causa
desse alto nível de usabilidade. Então, jango esconde algumas
coisas de você, o que torna as coisas mais fáceis, mas você não entenderá
algumas dessas É por isso que você
também deve aprender o Flask. E também é
muito divertido aprender Jus Pi. E eu recomendaria o Juspi
especialmente para alguém que não está interessado em se
tornar um desenvolvedor web principal Então, talvez você seja um analista de dados, mas você só
quer criar um aplicativo web onde você mostre alguns dados, alguma visualização
nesse aplicativo web Nesse caso, Jus Pi pode
ser realmente a melhor escolha. Mas se você quer ser
um desenvolvedor web puro, então você quer aprender
jangle and flask Então, quando você
precisar criar um aplicativo da web, basta escolher uma das estruturas da
web que é melhor para esse projeto ou talvez a estrutura da web
que você conhece melhor Por que não? Espero que isso ajude.
Falarei com você mais tarde.
207. Configurando um ambiente virtual: Oi. Neste vídeo, você aprenderá a criar e usar um ambiente virtual
Python Então, o que é um
ambiente virtual Python? Bem, é apenas uma cópia da
sua instalação do Python. Então, em outras palavras, uma cópia
do seu interpretador Python. Então, quando você baixa o Python do python.org
ou do Anaconda, você está
baixando um interpretador do Python do python.org
ou do Anaconda, você está
baixando um interpretador do Python. Agora vamos fazer uma cópia dele. Por que fazemos uma cópia? Porque com o Python, podemos
escrever programas diferentes. E para cada programa, talvez
precisemos
instalar pacotes diferentes, ou
seja, bibliotecas diferentes. E geralmente instalamos essas bibliotecas em nossa instalação
principal do Python Então, no intérprete que
obtivemos do python.org ou do Anaconda, também é chamado Mas, ao fazer uma cópia para
cada programa que criamos, instalamos bibliotecas somente para essa cópia
do intérprete O benefício disso
é especialmente para aplicativos
da Web, pois ao criar um aplicativo da Web, você o implantará posteriormente
em alguns servidores online. E quando você faz uma cópia
do intérprete e
depois
instala as bibliotecas necessárias
nessa cópia nesse ambiente
virtual, você tem uma lista clara
das bibliotecas que
você instalou Assim, você pode gerar uma
lista e, em seguida, fornecer essa lista ao servidor em que implantará
seu aplicativo web. Assim, esse servidor obterá a lista de bibliotecas dessa
lista e as instalará. Agora, a vantagem aqui é que se você tivesse sua instalação global do
Python, teria muitas, muitas bibliotecas Então, esse servidor
teria que instalar todas essas muitas bibliotecas. O que não é uma boa ideia. Então, por que não ter um intérprete para
cada projeto Python Então, agora que estamos prestes
a criar nosso aplicativo jango, vamos criar
primeiro
um ambiente virtual no código do Visual Studio É assim que você
faz. Então, primeiro de tudo, estou abrindo o código do Visual Studio. Portanto, esta é a página de boas-vindas. Ainda não criei
nenhum projeto. Então, vou
criar um projeto que consiste basicamente em abrir
uma pasta, um diretório. No código do Visual Studio. Então vá para Arquivo e
, em seguida, vá para Abrir pasta ou abra,
dependendo do sistema operacional em que você está. Portanto, isso pode ser uma pasta
aberta ou aberta. Clique aqui e localize uma pasta vazia que você
deveria ter criado antes. Eu criei esta pasta vazia do
tradutor jangoblock. Você vê que está completamente vazio. Então, vou pressionar Abrir e isso
abrirá essa pasta. Aqui você vê aqui na minha árvore do Explorer no
Visual Studio Code. Agora que temos a pasta. Então, nesta pasta,
vamos colocar todos os arquivos do
nosso projeto jango, incluindo a cópia
do interpretador Python Então, o ambiente virtual. Para criar essa cópia, é assim que você faz. Então, primeiro de tudo,
você precisa abrir um terminal e primeiro
fazer uma verificação. Portanto, certifique-se de qual
Python você está usando. Então, no meu caso, eu uso um comando, Python 3.9, que
abre Portanto, este é um Python global
instalado no meu computador. Portanto, tenho certeza de que esse
comando está funcionando bem. No seu caso,
pode ser apenas Python
sem 3.9 ou Python sem 3.9 ou Python Depende do que
você está usando. Então, onde quer que você esteja usando, vou sair
desse shell interativo. Então, isso foi só para
experimentar o comando Python. Agora eu sei que isso está funcionando, então eu posso ir e fazer o Python Portanto, não há espaços aqui. Depois, um espaço, a bandeira, depois V e depois NV. Então, o que é isso? Bem, o VNV é uma biblioteca
que está instalada. Por padrão, é uma
biblioteca padrão para Python. Ele vem com Python. Então, eu estou usando essa biblioteca. Então, quando você usa esse comando, Python 3.9 ou Python,
e depois usa esse sinalizador, isso significa
que você está prestes a executar
essa biblioteca E então esse final é a pasta onde a cópia do
interpretador Python será colocada Então pressione Enter. E você vê imediatamente que N foi criada nesta pasta aqui. E se eu expandir essa pasta, você verá que há várias
outras pastas aqui, e dentro dessa caixa aqui, você verá que temos
o Python Então essa é uma cópia do Python. Ele pode ser usado
apenas como Python ou Python three
ou Python 3.9 Mas eu vou te mostrar como usar esse Python em vez de
um Python Portanto, não faça nada
com essa pasta. Porque o que queremos fazer
agora é selecionar um interpretador Python padrão para esse projeto específico de código do Visual
Studio Para fazer isso, você deve ir
para a Paleta de Comandos. Você pode fazer isso com
atalhos, na verdade, no Mac, seria o comando shift, P, pressione
os três ao mesmo tempo No Windows,
seria Control, Shift,
P, então isso mostrará esta caixa, e então você pode digitar
lá Selecione o intérprete Então é isso que queremos usar no
Python Select Interpreter. Isso comanda. Clique lá. E você verá essa lista. Então, eu tenho
Pythons diferentes no meu sistema. Um deles é esse ambiente
visual aqui que acabei de instalar, e esse é o que eu quero escolher.
Então aperte aí. E agora você deve ver aqui
embaixo aquele Python 3.9 0.6 no meu caso
com N é a pasta. V é a biblioteca do
ambiente virtual. Isso agora será usado
como Python padrão. Isso quer dizer? Bem,
isso significa que se você agora digitar Python aqui, mas primeiro fechar este
terminal e abrir um novo, para ter uma atualização do
terminal, novo terminal,
você verá que agora, antes
dessa tag aqui que me diz
para escrever algo aqui, eu tenho isso Isso significa que esse ambiente virtual
Python
está sendo usado Agora, se eu apenas digitar Python, o
Python 3.9 0.6
desse ambiente virtual está sendo usado.
Deixe-me sair. Também posso digitar Python 3.9
e o mesmo será usado. Qualquer um desses comandos aqui,
Python, Python three ou
Python 3.9 Portanto, certifique-se de
ter isso lá. Então, como isso funciona? Porque parece mágica. Bem, funciona assim. Deixe-me fechar este terminal novamente e abrir
um novo, novo terminal. Então você vê que aqui
temos um comando sendo executado pelo código do Visual Studio quando você abre um novo terminal. Então diz source, que é um comando para ativar
o ambiente virtual. Então, fonte e, em seguida, o
caminho para o arquivo de ativação. Você vê que é o tradutor
jangoblock, que é N B Ativar. NBN Activate. Esse arquivo de ativação
está sendo executado e esse é o
comando que define o ambiente para esse ambiente
virtual. Isso significa também que
você pode usar o Python partir daqui como um shell
Python interativo, mas também se quiser
escrever Então, digamos que crie um arquivo. Portanto, tenha cuidado aqui.
Vou escrever Hello PY. Estou dizendo que tenha cuidado
porque o que acontece é que esse arquivo foi criado
dentro da minha pasta NV Então isso não é uma coisa boa. Você não quer
tocar na pasta F. Então, vou excluir
esse arquivo e recriá-lo. Para evitar que o arquivo
fique dentro do Nfle, primeiro pressione escape, primeiro pressione escape,
o que tirará o foco dessa pasta NF Então você pode ir aqui
e criar o arquivo. Agora você vê que o arquivo foi criado nesse diretório raiz, então jangle block
translator hello dot PY E se eu disser, imprima
olá aqui, certo. E agora eu posso executar esse arquivo usando essas orelhas triangulares
verdes
de fundo redondo. Pressione isso e o arquivo será executado usando o
ambiente virtual Python Então você vê aqui o que
aconteceu no fundo. Então, novamente, para finalizar, o ambiente virtual foi usado quando abrimos
o Python Também foi usado quando
executamos o arquivo Python e também é usado se
instalarmos pacotes de terceiros Então, digamos que o PIP instale o
jango para instalar o jango. Esse jango será instalado
para esse Python específico
, não para nosso Python global E posso provar isso
indo para N e depois para Lip e você
verá que o jango acabou ser
adicionado aos pacotes de
terceiros aqui Então, o JanGot é o que
acabamos de instalar. Para se livrar desse aviso, talvez
você queira executar
esse comando conforme
sugerido : Python 3.9 ou
Python diretamente,
PIP install, dash, dash, upgrade, PIP para atualizar
localmente o
PIP virtual, por assim dizer Certo. E agora, se eu
fechar esse projeto, eu o abro novamente. Depois, posso voltar ao meu projeto anterior usando esta
seção recente aqui
, clicando nela
ou acessando Arquivo, Abrir recente e localizar
o projeto lá. Ou uma terceira maneira seria ir
novamente para Arquivo, Abrir e ir novamente
para essa pasta, então para o diretório raiz. Então, esses são, olá,
ponto PY e pressione Abrir. E o mesmo projeto
será aberto novamente, mas você precisará fechar o terminal atual
e abrir um novo. Para ativar o ambiente
virtual no novo terminal, você vê agora que vemos
esse fim aqui. E, claro, agora você
também pode executar esse arquivo novamente, e o
ambiente virtual será usado para executar e
obter a saída. Então é assim que você pode
usar o ambiente virtual no código do Visual Studio. Obrigado.
208. Criando um projeto Django: Oi, bem vindo de volta. Neste vídeo, mostrarei como
criar um projeto jango O que é um projeto jango? Bem, quando você cria
um aplicativo web com o jango, primeiro você deseja
criar um projeto jango, que é um conjunto de arquivos gerados
automaticamente pelo Isso é o que eu vou te
mostrar agora. Então, esses são os arquivos do projeto. Mas então você pode adicionar
aplicativos a esse projeto. Então você tem um projeto, mas pode ter vários aplicativos. Por exemplo, no nosso caso, teremos um projeto, mas também teremos
o aplicativo de bloqueio e o aplicativo tradutor Então, dois aplicativos, um projeto. Agora, deixe-me mostrar como
criar o projeto. Para fazer isso, você precisa
ter instalado o jango e, de preferência, ter
um ambiente virtual Eu mostrei como criar um ambiente virtual
no vídeo anterior. Então eu tenho essa pasta agora, o diretório raiz, a pasta, que tem um ambiente virtual, o arquivo PY do lote, que vou
excluir porque não
precisamos mais dele. Então eu tenho o jango instalado. Isso significa que agora posso criar um projeto usando o comando
jango admin Portanto, o jango vem com
alguns comandos que podem ser usados para realizar diferentes
operações com o jango Portanto, o administrador do Jango, esse comando, junto com o comando start project criará um projeto jangle
e, em seguida, você precisará dar um nome para um novo diretório
que o jango Digamos que meu lado. E
depois espaço e um ponto. O ponto significa que
a pasta atual, que é o Jangled
Block Translator, é uma pasta do projeto, então ela colocará os
arquivos nesse Então, execute esse comando. E essa pasta e esse
arquivo serão criados. E essa pasta tem alguns
outros arquivos dentro. Então, quais são esses arquivos agora? Bem, temos esse arquivo init, que é um arquivo vazio, e
aqui, é opcional Talvez mais tarde, você possa
colocar as coisas que deseja que sejam
executadas imediatamente quando
o programa for iniciado. Então, vou deixar
isso agora, vamos deixá-lo vazio. E então temos esse arquivo
Sg, sosg dot PY. Esse é um arquivo de configuração que talvez você queira alterar posteriormente ao implantar seu aplicativo
jangle em um servidor SG, e também há
outro tipo de Portanto, depende de onde
você vai implantá-lo. O outro tipo é o servidor Wiz
g ou Wiz G, se você gosta deste aqui Então essa é a outra
configuração,
dependendo do tipo de
servidor em que você colocará seu projeto jango
para
que ele fique em um servidor de
produção on-line para que todos possam vê-lo E então temos as
configurações desse arquivo PY. Isso conterá todas
as configurações, então, por exemplo, o fuso horário, o local dos arquivos estáticos,
como imagens e arquivos CSS, vamos abordá-los. Portanto, não os altere. E então temos o
URL, que é o arquivo PY. Isso terá basicamente
a URL do seu projeto, como a URL será
enraizada e assim por diante Então esse era o meu site, e então
gerenciamos esse PY. Este é um arquivo que você normalmente
não altera, então ficará assim. Isso é útil agora, quando você inicia seu novo site em
Python Então, acabamos de criar um site do Jangle e
podemos vê-lo para que possamos iniciar o aplicativo fazendo o gerenciamento do
Python, isso Então, executamos esse arquivo com Python e usando o argumento
Run server Execute que
temos esse aviso. Vamos corrigir
isso daqui a pouco. Portanto, este é o URL do site agora. Se você pressionar Control ou
Command e clicar lá, seu novo site será aberto. Portanto, ele realmente não tem um aplicativo e um aplicativo personalizado agora, porque
vamos adicioná-lo mais tarde. Mas, basicamente, isso
diz que está funcionando. Para interromper a execução do aplicativo, você deve pressionar Control
C no terminal. E agora, esta mensagem aqui. Bem, esta mensagem
está dizendo que
precisamos executar
algum comando SQL. Agora, isso é bom
com o jango porque você
realmente não precisa executar
nenhuma linguagem de consulta SQL Você pode simplesmente fazer com que o Python
gerencie o PY migrate. Pressione isso e o jangle
executará essas consultas para você. Então, basicamente, essas são
consultas que criam algumas tabelas padrão, tabelas de
banco de dados Você também pode ver que um
novo arquivo dbdt S three foi criado quando executamos o
Python manage Então, o que esse comando fez
foi criar um arquivo de banco de dados SQL, e o Jango, por padrão,
usa o SQL três, mas você também pode
usar o SQL pós-graduado Mas você pode fazer isso.
Você pode fazer isso facilmente no servidor
de produção. Localmente, é bom
usar o SQLite three, que é apenas um arquivo e
todos os dados estarão lá, todas as tabelas do seu
projeto estarão lá Então esse comando
gerou esse arquivo. E também aplicou
todas as mudanças necessárias para a
fase inicial da criação do JangObject Então, foram criadas algumas tabelas
e, mais tarde, talvez você queira fazer mais
alterações em suas tabelas. Vou mostrar como você cria novas tabelas por meio do
jango, não por meio do SQL Então, por meio do Python,
é muito fácil. E depois de criar uma
tabela no código Python, você precisa executar esse comando Então, isso traduzirá seu código
Python em consultas SQL. Assim, você não precisa escrever consultas
SQL com o jango. Você só precisa escrever
um código Python fácil. Mostrarei como
fazer isso quando criarmos o aplicativo posteriormente. Por enquanto, posso mostrar quais tabelas foram criadas
dentro desse arquivo. Se você clicar duas vezes
nele, ele não será exibido porque o código do Visual Studio não exibe bancos de dados
SQLite Você precisa de um programa adequado para ver esse banco de dados. Você
não precisa ver isso. Eu só quero
demonstrar a você quais dados isso contém
para fins de aprendizagem. Então eu tenho um programa aqui chamado
DB Browser for SQL Light. Você pode pesquisar isso
no Google e instalá-lo ou apenas ver aqui o
que vou fazer. Você não precisa desse programa apenas para ver os dados por curiosidade Então você quer
abrir o banco de dados. Então esse é o DB Sculi três
que temos o arquivo. E então você vê que
existem várias tabelas aqui. Essas são tabelas relacionadas
à interface de administração, na verdade. Portanto, nenhuma tabela está sendo
criada ainda para coisas como blocos ou outros recursos que teremos
para nosso projeto jango Então, as coisas no jango são
salvas em bancos de dados, e o Jango usa culi
three por padrão, como eu disse Cada uma dessas tabelas, é claro, tem dados para que você
possa navegar pelos dados e navegar nessas tabelas. Por enquanto, eles estão apenas vazios porque, veja, estão apenas vazios. Ainda não adicionamos nenhum usuário
à interface administrativa. Então, o que é a
interface de administração? De qualquer forma? Bem, deixe-me iniciar o servidor
novamente. Acesse o site. E se você acessar o URL, depois da porta, você faz slash e depois Admin Entre, você verá
esta caixa de login aqui. Você precisa do nome de usuário do administrador e da
senha do administrador. Atualmente, ainda não temos
um usuário administrador criado. É também por isso que você vê que
todas essas mesas estão vazias. Portanto, não dados. Portanto,
existem tabelas, mas não há linhas
nessas tabelas. Então, mais tarde,
mostrarei como criar um usuário administrador. Então, por que precisamos da interface de
administração, afinal? Bem, dissemos que vamos criar um site
que contém blogs. Agora, quem vai adicionar
conteúdo nesses blogs? É você o desenvolvedor ou talvez alguns autores
que escrevem conteúdo? Então, esses autores,
existem duas maneiras de
escrever esse conteúdo. Ou eles vão para o seu projeto de código do
Visual Studio e você mostra
a eles os arquivos Python onde estão o
conteúdo ou os arquivos HML, onde o conteúdo será
escrito, ou uma maneira mais inteligente é
ter uma
interface mais amigável onde você essas caixas de conteúdo
e
tenha opções Então, botões e caixas de ferramentas
e coisas assim. Portanto, uma experiência real
de processamento de texto como o Microsoft Word ou
outros processadores de texto. Portanto, é fácil para os autores adicionarem conteúdo continuamente
a esse site. Então, você fornece aos autores e eu login, nome de usuário e uma
senha para que eles possam acessar seu site
e adicionar veremos a interface administrativa
no próximo vídeo. Então é isso que tínhamos por enquanto. Obrigado por seguir.
Falarei com você mais tarde.
209. Criando um modelo de banco de dados para o aplicativo de blog: Olá de novo. Neste vídeo, vamos adicionar alguns códigos
aos nossos modelos desse arquivo PY. Como expliquei para você, uma página da web tem um modelo, uma visualização e um modelo CML Portanto, o modelo é inferior
nessa estrutura de trio. Portanto, vamos
começar com os modelos. O que precisamos
criar é uma classe para representar uma postagem em bloco. Então, vamos chamar isso de post. Agora, postar não é uma aula simples. Post deve ser uma classe
herdada do módulo de modelos. Então, isso torna essa
classe uma classe modelo. Portanto, o módulo é uma
classe específica projetada pelos autores do jango, os desenvolvedores do jango
e projetada para conter campos de dados O que eu quero dizer com isso?
Bem, por exemplo, dissemos que
queremos um campo de título. Uma página da web é um título. Então, esse título, quando o
criador do conteúdo criar um título, esse título será armazenado
no campo de título
da tabela de postagem. Então você mostrou que eu
te mostrei esse DB Viewer, que é um programa para ver dados para visualizar os dados
de um banco de dados SQL. Então, o banco de dados SQL
é esse aqui, db Q three, e este post criará uma nova tabela no banco de dados db dot
Sculi three Agora, essas são as
tabelas atualmente, então não há nenhuma tabela de postagem aqui, mas você verá que uma será criada quando
concluirmos esta tabela. Então, o título agora é modelos
O que é um título? É um campo de cuidado? Sim. Acho que esse tipo
caberia em um título. Portanto, esse é um tipo
de campo de banco e obtém um atributo de
comprimento máximo. Digamos, 200 caracteres. Portanto, haverá
livros didáticos que permitirão até 200 caracteres para
o título do blog Então, o que mais temos? Conteúdo. Então, o
corpo do bloco. Agora, aqui eu não usaria o campo de
cuidado, porque ele
foi projetado mais
para pequenos pedaços de texto. Isso seria mais
parecido com um campo de texto. E você pode deixar isso
vazio. O que mais? Bem, data, criado,
talvez devêssemos ser campo de data e hora dos
módulos. Então você vê que
esse módulo
de modelos do jango tem todos
esses campos prontos Portanto, um campo de data e hora agora seria adicionado
automaticamente igual a verdadeiro, o
que significa que, quando o criador
do conteúdo criando
uma nova postagem em bloco estiver criando
uma nova postagem em bloco na interface administrativa, ele escreverá
um título, um conteúdo. E então haverá um botão
Salvar, onde eles podem pressionar o botão Salvar e a postagem será publicada. Quando eles pressionam, quando
o criador do conteúdo pressiona esse botão, essa classe será instanciada e gerará a data e a hora
atuais, e essa data e
hora atuais serão injetadas no campo de data criada
da tabela de postagem
no banco de dados db Suli three O banco de dados tem várias tabelas, pos é uma das tabelas, post tem vários campos. Um dos campos é esse. Ok, espero que isso faça sentido. Em seguida, temos um campo vazio, que gravará a parte da URL
após o domínio Então, como dissemos, se seu domínio for example.com e sua postagem
no blog for sobre cachorros, a lesma será Portanto, o URL completo
seria example.com slash DGS. E aqui, o usuário,
o criador do conteúdo, simplesmente
escreverá cachorro ou
onde quiser. Assim, o
criador do conteúdo inserirá o slug na interface administrativa, assim como faz com conteúdo do
título e outras caixas
de entrada Então, slug seria
novamente modelado no campo dot Slug. Portanto, há uma classe
específica que representa o campo slug em
jangle chamada slug field Vamos colocar um
comprimento máximo de 200, talvez. Faz sentido não
ter lesmas muito compridas. Portanto, isso não permitirá que
o criador do conteúdo insira slugs com
mais de 200 caracteres E tem que ser único, então único é igual a verdadeiro. Se o administrador, o criador do conteúdo inserir uma escória que já
foi inserida anteriormente, isso não
permitiria a criação do novo log , pois você não pode ter duas páginas
com o mesmo URL Eu estragaria as coisas. Portanto, esse argumento não
permite que URLs duplicados
sejam Em seguida, temos o
autor, então crie o nome da variável (módulos),
ponto quatro na chave desta vez. Por quê? Porque vamos obter esse valor de
outra tabela de banco de dados, que já foi criada
pelo Jango e podemos obtê-lo do jangodt Da importação de modelos. Então, a partir dessa importação,
usuário, certo. Esta é uma classe também, você pode vê-la quando
eu passo o mouse E, portanto, nos
dois argumentos aqui, precisamos do usuário. Sem
o parêntese Então, basicamente, um tipo de campo de chave
estrangeira significa que o valor desse campo
de banco de dados
virá de outra tabela de
banco de dados. Nesse caso, é uma tabela de banco de dados
do usuário. E esse campo criará
na interface administrativa
uma lista suspensa qual o criador do conteúdo poderá escolher entre
diferentes nomes de usuário. Então, isso acontece automaticamente. Mas queremos especificar
alguns parâmetros para excluir o comportamento que ocorrerá
quando o usuário for excluído. Portanto, esse usuário é excluído da tabela original
do banco de dados. Então, cascata, mas você
não precisa disso, então exclua isso e
deixe assim Agora, o que isso significa? Bem, isso significa que se um usuário for excluído da tabela
do banco de dados do usuário, as postagens do usuário
também serão excluídas. Isso é o que o cascade faz. Vou excluir essa vírgula aqui, e o último campo
que queremos adicionar é status, o status da postagem, que seria igual aos
modelos desse campo inteiro Na interface de administração, haverá uma lista suspensa de
status que conterá duas opções Rascunhe e publique. Assim, o criador do conteúdo
pode escolher salvar esse artigo
como rascunho ou como publicado. Portanto, isso tornaria mais fácil para os criadores de conteúdo
organizarem blogs, pois eles poderiam salvar um artigo
como rascunho e , em nosso jargão,
poderíamos condicionar
a
não artigos com
o status de rascunho, mas apenas publicar aqueles que
têm o status Portanto, essa seria uma boa maneira de
distinguir entre os dois
tipos de artigos de postagens. Então, temos que ter escolhas, que são iguais a uma variável, digamos, status
e o que é status? Bem, o status tem que ser uma
variável que temos que criar aqui. Portanto, status é igual a uma
queda de duas quedas. Uma seria,
digamos, zero truta. A outra
seria uma publicação. E o padrão
seria talvez um rascunho. Portanto, zero significa rascunho e um significa publicação. Agora, o administrador, o criador do
conteúdo, verá rascunho
ou a publicação
nessa lista suspensa, e isso concluirá
nossa Agora, certifique-se de
salvar este arquivo, salvar
arquivo ou Command
S ou Control S, e então você precisa
fazer algo aqui. Precisamos aplicar esse
modelo ao nosso banco de dados. Então, temos que executar
algumas consultas SQL. Mas, como mencionei antes, você não precisa executar consultas
SQL explicitamente. Tudo o que você precisa fazer
é executar dois comandos, Python Manage dot PI make
migrations. Atualmente, se você der uma olhada no programa
do navegador de banco em que vemos os dados, não
temos nenhuma tabela
chamada posts por enquanto,
mesmo que eu atualize essa atualização, essas tabelas mesmo que eu atualize essa atualização, existem Mas agora veja o que vai
acontecer se eu executar esse comando. Ok, algo acontece aqui,
as migrações foram aplicadas, então a
estrutura do banco de dados foi alterada, e então precisamos
adicionar outro comando, que é que o Python
gerencie o ponto PY, migre Então, essa e aquela,
aplicamos as consultas SQUAR
correspondentes a esse modelo Agora, se eu for até aqui,
atualize, você verá que esta tabela foi
adicionada ao bloco de postagem Então, o nome dessa tabela foi construído usando o nome do
aplicativo que é bloco e sublinhado, Sol Jango
faz isso automaticamente, e depois do sublinhado,
post, que é o
nome do módulo Então, se eu selecionar essa tabela, você verá agora que temos
esses campos de banco de dados. Então, aqui vemos todos os
campos que criamos. ID é um campo
criado automaticamente, mas temos o
conteúdo do título, a data de criação, status do
log e o ID
do autor. Certo. Isso completa a
criação do nosso modelo. Agora precisamos criar uma visualização. Vamos fazer isso no próximo vídeo.
210. Vistas em Djago: Oi. Anteriormente,
criamos um modelo HTML, que é basicamente
responsável por
renderizar o conteúdo
no navegador. Mas esse modelo HTML deve estar alguma forma conectado aos
modelos que são arquivos PY. Este modelo HML tem
algumas variáveis que estão esperando para serem preenchidas com
conteúdo com valores Então, o título tem que vir
do banco de dados, do banco de dados SQL, que é esse arquivo aqui. Portanto, temos que
encontrar uma maneira de
conectar o modelo
com esse banco de dados. E como em Python, essa postagem de classe é a representante
dessa tabela de banco de dados, portanto, precisamos
conectar Block
that HTML a essa postagem de classe É aqui que a
visão do intermediário é útil. Então, entramos nas visualizações e
criamos uma visualização. Vamos chamar isso de vista de bloco. Você pode ligar
para onde quiser. Esse é apenas um nome
para a turma. Mas eu quero distinguir
esse nome
das outras classes para
que seja mais fácil para você
entender as coisas. Então, visão do bloco de classes. É uma
aula muito simples, na verdade. Ele deve receber uma variável de modelo. Portanto, Jango espera que
essa classe tenha
uma variável de modelo, e essa variável de modelo
deve apontar para o nome do módulo que deve ser
conectado ao bloco Então, basicamente, temos, novamente, uma variável de módulo
e também um modelo. Variável de nome. Então
é isso que essa classe faz. Isso é tudo. Ele conecta
o modelo ao modelo. O modelo será post, mas post não é um
nome importado neste namespace, então precisamos importá-lo
de modelos, importar post. Você vê que agora a postagem está disponível. Portanto, agora essa
linha é válida. E o nome do modelo,
tudo o que você precisa fazer é dar um nome sobre o modelo, que é o
HTML do ponto do blog. E é isso. Tudo bem, até agora tudo bem. Então, se executarmos o servidor agora
com Python, gerencie esse servidor PY Run,
mas tenha cuidado Eu não estou em um
ambiente virtual aqui, então feche isso e abra um novo terminal e faça o Python gerenciar
novamente o servidor PY Run E às vezes você recebe erros
como este aqui,
modelos caros, o sistema operacional não está
definido nas configurações. Então, vá para as configurações, estamos aqui, e obviamente precisamos
do sistema operacional, a biblioteca padrão do sistema operacional, que faz operações de diretório
com pastas e arquivos. Então, precisávamos disso
quando declaramos a variável querida dos modelos
anteriormente aqui. Salve o arquivo e execute novamente. Dessa vez, o servidor foi iniciado. Portanto, esta é a página inicial, mas não há outras
páginas da web além dessa. Por exemplo, se você acessar Cães, receberá um erro por causa de cães
ou gatos. Obviamente, não temos
nada porque
não temos entradas em nossa
tabela de blocos no banco de dados. O que vou fazer
no próximo vídeo é inserir
alguns dados fictícios em
nossa tabela de banco de dados por meio de um programa chamado DB browser for SQL Light Se você não tem esse programa ou não deseja instalá-lo, tudo bem porque esse
programa é opcional, mas você pode instalá-lo gratuitamente ou
pesquisá-lo no Google. Normalmente, queremos inserir
os dados por meio do Admin, mas só para testar as coisas, quero rapidamente ter alguns dados agora
para explicar o que está acontecendo e você entender como
as coisas estão funcionando. Então, nos vemos no próximo vídeo.
211. Padrões de URL: Olá. Anteriormente,
criamos uma visualização que é uma classe que conecta
o modelo a um modelo. Agora, neste vídeo,
quero inserir alguns dados fictícios em
nossa tabela de banco de dados Portanto, nosso
arquivo de banco de dados é o DQ três e tem várias
tabelas dentro Quero usar o navegador DB para SQLite e depois abrir o banco
de E então este é
um diretório raiz e vá para db cul three
e clique duas vezes lá Em seguida, você deseja navegar pelos dados e encontrar a tabela de postagens do
blog. Então, esses são os campos
da tabela do banco de dados. Você quer
expandi-los um pouco para torná-los mais visíveis
e as datas de criação, status do
slug da postagem, ou
seja, rascunho ou publicado, e o ID do autor, que pode ser um número Portanto, o primeiro autor que será criado tem uma ideia
de um e assim por diante. Então, vamos
inserir manualmente uma nova linha da tabela. Obviamente, como eu disse, isso deve ser inserido
por meio da interface administrativa. Mas, por enquanto, apenas para testar, queremos ir até esse botão, pressioná-lo e isso
inserirá uma nova linha da tabela. Então, o ID foi gerado
automaticamente. Então, para a primeira
linha, será uma. No segundo, ele incrementará
automaticamente dois. Dois e mais um. Então, vamos colocar algo
no título como cachorros e conteúdo. Os cães são bons. Isso é o suficiente por enquanto. Data de criação. Isso deve
estar em formato como 2022, 12 para o mês, dez para
o dia do mês, lesma Assim. Dogs and jungle se encarregarão de criar o URL completo Então, example.com, ele
adicionará uma barra e, em seguida, adicionará o
cachorro após a Status, isso foi
rascunho ou publicado. Então, aqui, você vê
que temos zero ou uns. Então, vamos colocar um para o ID do autor
publicado, o primeiro usuário do banco Já
criamos
um superusuário. Então, esse usuário tem o ID um. Certo. Depois de fazer isso, você deseja gravar
as alterações no arquivo do banco de dados. Tudo bem, e então você pode
simplesmente fechar o banco de dados, e a linha está lá. Agora, vamos conectar esse slug,
esse URL, à nossa
visualização do bloco de visualizações Para fazer isso, você precisa ir até
a pasta de bloqueio, clicar com o botão
direito do mouse e
ir para Novo arquivo e criar
uma URL de arquivo l dot py. E aqui, você
deseja importar do local atual
as visualizações de
importação. Então, estamos importando
o módulo de visualizações. É um arquivo, mas quando você
importa coisas que são um módulo, elas se tornam um módulo. É assim que chamamos isso. As visualizações agora estão disponíveis aqui, e também precisamos importar outra
coisa do Jango URL,
um módulo, URL é outro
módulo do caminho jangoimport E precisamos desse caminho agora, que é uma função para criar uma lista de padrões de URL. Então, estou dividindo
isso porque isso pode conter padrões de
URL diferentes Portanto, o primeiro padrão em que
estamos interessados é criado por meio
da função path. Então, qual é o padrão? Bem, é uma lesma, uma coluna
e uma lesma novamente, com este suporte de
abertura Então, quando o usuário
visita um determinado URL, digamos, deixe-me
escrever algo aqui. Por exemplo, example.com
Slug, é claro, eles escrevem como cachorros, mas cachorros, estamos dizendo a Jango que
procure cães Então, Jango acessará nossa
tabela de banco de dados e procurará
em cada linha por cães em cada célula
da lesma Então, em cada fileira
do campo de
lesmas, ele procurará cães E se encontrar uma
linha com cães, ele
executará a visualização do bloco,
excluirá o parêntese, o ponto
Block View como Então, execute essa classe como uma visão. E também há
outra coisa que precisamos dar aqui, que usaremos mais tarde. É um nome. Qual é
o que deveria ser uma string, digamos, visualização em bloco. Esse é um nome que
talvez precisemos mais tarde, então é uma boa ideia
tê-lo aqui agora. Então, espero que você esteja
acompanhando até agora. Também precisamos fazer
outra coisa em relação aos URLs. Você vê que há
outra URL que é o arquivo PY, mas está dentro do meu site, que contém as configurações
do projeto jungle, não os aplicativos jungo Portanto, esse arquivo já se
parece com isso. É construído
automaticamente pelo jango, e aqui está esta
aqui também uma variável de
padrões de URL, assim como esta aqui, padrões de
URL, padrões de URL Mas agora isso quer saber sobre os URLs
do aplicativo de bloqueio Então, com cada aplicativo que você cria, você quer declarar o padrão de
URL aqui Então, depois da vírgula,
criamos outro item da lista, que é caminho desta vez, tem
que ser assim Portanto, uma string vazia que
denota o diretório inicial. Então, quando o
diretório inicial é visitado, outra coisa
após a barra é gravada pelo usuário na barra de
endereço do navegador, e outra coisa é
definida pelos blogs Blog é o nome do aplicativo. Então, bloqueie
o nome da pasta que vem aqui, URL. URL é o nome do
URL PyFleo the block app. Então, URL do ponto do blog. Você também pode escrever outra
coisa aqui. Você poderia escrever MyBlocks, por exemplo, nesse caso, Jango estaria esperando usuários Sem exemplo.com slash Dogs,
mas example.com slash MyBlocksSlash DOGS mas example.com Mas não queremos isso, então
vamos continuar assim. Example.com slash DOG. Agora recebemos esse erro. Incluir não está definido e precisamos inseri-lo a partir dos URLs do Jungle, importar
Path e Salvar. Além disso, certifique-se de
salvar todos os arquivos. Então, salve isso também. Controles, salve também as
visualizações. Então, tudo o
que você vê com esse código preto.in do
Visual Studio significa
que ele ainda não
foi salvo Agora, vamos ver quais erros
obtemos do tipo visualização de bloco de objetos não
tem atributo como visualização,
veja o que está acontecendo aqui. Isso acontece nesse arquivo, então o USPI bloqueia a barra
URL PY, que está Portanto, essa classe não tem esse atributo.
Vamos dar uma olhada. Essa classe, é claro,
não tem esse atributo. Ele só tem atributos de
modelo e nome de modelo. Nenhum método chamado de visualização. Isso porque eu
esqueci de herdar de uma classe de visualização especializada
que precisamos importar Do jango, do jangle
dot Vs Import generic
e, em seguida, do genérico, podemos acessar os
detalhes da visualização detalhada, não excluir a classe da visualização
detalhada Portanto, exclua o parêntese. Isso significa que essa
classe realmente tem um método de visualização interno. Então você pode clicar com o botão direito do mouse
e ir para Definição. E, claro, isso
não tem nenhum método aqui, mas herda de
alguns outros métodos Então, se formos para a visualização básica de detalhes, vamos para a definição, isso também é
herdar desses dois Então, talvez a visualização tenha
essa função de visualização. Sim, nós o encontramos. Então
esse é o método. Portanto, há uma cadeia
de herança, e agora temos acesso
a esse método a partir da nossa classe de visualização do blog Certo. Salve esse arquivo. E agora é hora de experimentar nosso aplicativo e você
quer acessar esse URL, então isso é de se esperar. Portanto, a página inicial ainda
não está configurada. Não temos nenhum padrão de
URL que diga ao Jangle o que fazer quando
as pessoas visitam a página inicial Então, o que você deve procurar
em vez disso é um dos seus blocos. Então, atualmente temos cães, a escória de cães. Você
se lembra disso? Eu o inseri na tabela e recebemos esse erro. O modelo não existe. Um erro fácil de corrigir em cães. Então, Jango reconheceu que
temos uma entrada de cachorro
no banco de dados porque se
você a tentasse para gatos, obteria outro erro Então, desta vez você
obteria uma página não encontrada, e Jango experimentou esses padrões e não encontrou
nenhuma lesma Então, cães são uma coisa diferente, mas o modelo não foi encontrado. Então, blog dot HTML. Isso geralmente é um problema de falha de comunicação
com o jangle Portanto, Jango não está
conseguindo encontrar o caminho do HTML de pontos de bloco Então, vamos verificar. O
HTML de pontos em bloco está correto aqui. Portanto, a exibição tem o
nome correto
e, em seguida, vamos
examinar as configurações. Modelos. O nome
está correto aqui. Então, isso parece bom, mas
se você rolar até aqui, você tem a variável templates. E isso agora tem alguns
parâmetros sobre modelos. E um desses
parâmetros é o DRS. Então, essas são as chaves
desse dicionário. Bend Derski. O DRSki espera um valor
e, atualmente, é
uma lista vazia, mas você precisa declarar aqui a lista de diretórios de modelos Então, neste caso, só temos um porque você poderia ter mais, mas temos um,
então temos que declarar isso no salvamento e
obtemos esse outro modelo de erro que o
cervo não está definido, claro, porque o estamos usando aqui antes de
defini-lo Então corte isso a partir daí e
coloque-o acima de seu uso. Então, acima dessa variável de
modelos, coloque-a aqui. Seguro. E nosso servidor
foi interrompido, então queremos executar novamente. Python gerencia esse servidor
PY Run. Vamos ver o que temos dessa
vez. Acesse o navegador. E opa, nós pegamos o bloqueio. Cães, cães são bons e editam o nome do
autor. Está funcionando bem. Então, isso conclui este vídeo. Então, deixe-me resumir
para que você saiba onde está até agora Podemos abordar as questões de URL
do usuário. Então, quando eles inserem example.com
slash TOC, por exemplo, esse URL dot PY está
sendo acionado e
isso implanta as visualizações e os
módulos Então, ele conecta os
dois para consultar dados do banco de dados. Esses dados são injetados nessas variáveis com
colchetes no modelo HTML E, claro, eles são renderizados no
navegador para o usuário E, como você viu
desta vez, acabei de inserir alguns
dados manualmente usando um programa de terceiros que
acessa três bancos de dados SQL Mas normalmente, como você
verá nos próximos vídeos, queremos obter dados por meio de
uma interface administrativa. Então, isso é o que
vamos fazer a seguir. Vamos criar
a interface de administração e inserir alguns dados nela.
212. Criando visualizações da interface do administrador: Bem-vindo de volta. Anteriormente,
conseguíamos criar essa página da web com o Jango
e, neste vídeo, trabalharemos
na interface de administração Especificamente, adicionaremos uma opção para poder adicionar postagens de blog a
partir da interface administrativa. Então, para isso, você precisa ter
um nome de usuário e uma senha. Lembre-se de
que criamos isso anteriormente, mas se você perder isso, pode
criá-lo agora com
o comando Python Gerencie o dot PY, crie um superusuário. Eu já fiz isso, então não vou
fazer isso de novo. Portanto, vou
executar o servidor, acessar a interface administrativa e
fazer login com minhas credenciais. Agora, você vê que só
podemos criar novos usuários e novos
grupos aqui, mas não postagens. Então, o que precisamos fazer
é acessar
o código, acessar o blog e, em seguida, acessar o administrador PY. Então, agora queremos
criar um modelo. Aqui, queremos
registrar nossos modelos, que é o
pós-modelo nos modelos PY. Então, este aqui, queremos
importar isso do Admin PY para que , a partir desse modelo, importe a postagem. Então, queremos registrar
isso usando o administrador desse site que se registra
com letras minúsculas, e então aqui vai a postagem. Sem os parênteses,
então não ligue para o correio, apenas declare lá Salve esse arquivo e
verifique a interface de administração. Então, atualize, e você deve
ver as postagens aqui agora. Então, se você clicar em
AD, adicione o título. Digamos que gatos Gatos também
sejam bons. A lesma pode ser CATs
ou onde você quiser. Audita o autor
e faz com que ele seja publicado. Como você vê agora, esses
são todos os campos de modelos intitulados em PY, conteúdo,
log, autor e status Então, rascunhe ou publique.
Clique em Salvar. Em seguida, vá para o navegador
e acesse CATS desta vez, e você verá que a nova postagem está
aqui, tão fácil quanto isso. Agora, isso é opcional,
mas se quiser, você pode adicionar algumas colunas aqui para adicionar alguns detalhes
sobre essas postagens. Assim, os criadores de conteúdo verão essa visualização quando
criarem postagens. Portanto, você deve facilitar o
trabalho deles para que eles possam encontrar novos blocos
neste lugar aqui. Em primeiro lugar, o que queremos
fazer é ver se o nome de cada blog é objeto de postagem
um, objeto de postagem dois. Isso torna muito
difícil encontrar outra postagem que você deseja
para o criador do conteúdo. Então, como podemos exibir aqui o título em vez
desse nome inútil Mas antes de tudo, de onde
vem isso? O que você acha que postar objeto? Parece-me que Post post é o nome
da classe de modelos. Então, na verdade, esse é o
nome dessa classe. Então, Python, quando você tem uma classe e
simplesmente a imprime, imprime essa classe, o Python simplesmente imprime o
nome Acho que você sabe disso. Deixe-me
mostrar a você o que quero dizer. Então, deixe-me abrir um
shell Python e você terá uma classe. Vamos também chamar esse post. Apenas passe. Então, quando
você imprime postagem, obtém esse tipo de saída ou apenas diz postagem, a mesma coisa Então, Jango está tentando obter uma representação em string dessa postagem
de classe Mas podemos mudar isso
adicionando um
método mágico. Chamado STR. Na verdade, é sublinhado,
STR, sublinhado, sublinhado. Portanto, dois sublinhados à
esquerda e à direita. Com parênteses, self vem como o primeiro argumento, coluna, e isso deve retornar agora uma representação melhor
dessa classe, que seria self self
representa a própria classe, e title é atributo
da Esse título será
impresso quando a pose
for impressa. Então, se eu salvar isso, vou para admin. Atualizar. Recebemos os títulos de cada uma das
postagens do blog, gatos e cachorros. Agora, se você quiser
adicionar mais conteúdo
aqui ao lado, o que você gostaria de fazer é
ir para o administrador, e aqui você quer
criar uma nova classe. Vamos chamar essa
classe de post admin, que deve herdar
do admin Model Admin Então, isso é que não
precisa de argumentos. O administrador de modelos é um tipo de classe, assim como temos modelos que
modelam modelos de classes normais. Temos modelos administrativos especiais, então herdamos disso,
e agora esperamos
uma variável de e agora esperamos exibição de lista,
se você quiser passá-la,
que deve ser uma
tupla com strings,
e as strings devem ser os
nomes dos campos do Então, o que você quer
mostrar lá ao lado? Aqui. Já temos o título, então vamos mostrar as datas
criadas e o autor. Sim. Vamos fazer isso. Então, data de criação.
Esse é o nome. Sim, datas de criação e
autor em Admint PY author. Não. Ok, nós fizemos isso, mas isso é apenas uma
aula flutuando por aí. Jango não
conhece essa aula. Então, queremos dizer a Jango de alguma forma que Jango, o projeto, tem que
considerar essa classe, então precisamos
registrar essa Isso é o que estou tentando dizer. Então, coloque o administrador lá,
só a turma. Não precisa chamá-lo assim. Abra espaço para
visibilidade, economize e
vá aqui e recarregue E essa é a
visão que temos. Então, eu sei que não é
o ideal, mas vou consertá-lo. A data em que a publicação
foi criada e o autor. Então, o título desapareceu porque quando você inclui essa variável de exibição da
lista, a
interface de administração ignora o nome da classe para
que não imprima a representação da
classe aqui, mas imprima
o que você declarou aqui. Portanto, o que
você precisa fazer é adicionar um título entre eles
como o primeiro. Portanto, a ordem das cordas
aqui é respeitada por jango. Agora temos título, data de criação e autor. Se você está se perguntando por que a data criada
para cães está vazia, bem, é porque,
se você se lembra, eu inseri manualmente
um RO para os cães. Postagem no blog e, obviamente,
não inseri o formato de
data correto manualmente. É por isso que Jango não
sabe o que mostrar aqui. Mas quando você cria uma postagem, da maneira correta através
da interface de administração, o
Jango consegue
gerar automaticamente a data atual, pronto para este vídeo Em seguida, vamos cuidar da página inicial, porque
atualmente ela não existe Vamos criar a página inicial
no próximo vídeo. Veja aqui.
213. Criando a página inicial: Oi, bem vindo de volta. Anteriormente, criamos duas
postagens de blog, cães e gatos. No entanto, nossa página inicial não
está funcionando. Então, como podemos adicionar uma página inicial? Vamos fazer isso neste vídeo. Por enquanto, vamos
manter as coisas simples. Teremos
apenas uma página inicial que diz que esta é uma página inicial Mais tarde, porém, geraremos automaticamente uma lista de postagens de
blog na página inicial Por enquanto, vamos
ter uma página HTML simples para você praticar a criação de
novas páginas na selva Oh, você sabe mais ou menos
como as coisas funcionam agora, mas vamos repetir isso. Então, por onde começamos? Começamos criando um módulo, uma visualização
ou um modelo HTML, para que você ainda fique confuso
sobre por onde começar. Mas eu sugiro que você
siga essa abordagem. Sempre pense no usuário. Portanto, resolva o problema
começando pelo usuário. O que o usuário vê é o HTML. Em seguida, você desce de nível
até chegar ao back-end, que são os modelos
ou as vistas. Então, vamos começar
a criar a página
pensando no usuário. Portanto, você precisa criar um modelo HTML para
mostrar isso ao usuário. Então, vá para os modelos, clique com o botão
direito do mouse e vá para Newfle. Normalmente, a página inicial é chamada HTML de ponto de
índice Essa é uma maneira padrão, mas você também pode escrever qualquer
outro nome que desejar. Então, vou manter o HTML
do ponto de índice. Novamente, no Tok, você tem tags
HTML e tags de
corpo como essas Vamos escrever um texto
estático aqui. Esta é a página inicial. Mas como o usuário pode
obter esse modelo HML? O que eles fazem? Bem, eles inserem uma URL
diretamente no navegador. Quero dizer, eles
também poderiam encontrar esse URL no Google ou
inseri-lo diretamente no navegador. Não importa para nós, mas eles precisam inserir uma URL de
alguma forma no navegador, que seria como example.com.
Essa é uma página inicial Portanto, precisamos acessar os
URLs do nosso aplicativo de blog. Então esse URL, esse é o
PyFile, não o URL, o arquivo PYFile do meu site Nós terminamos com
isso. Nós entramos. Falamos para Jango sobre o URL, esse é o PyIL do nosso
aplicativo, e isso é tudo Fechamos isso agora e
trabalhamos na URL do aplicativo. Então, o URL do blog, que tem essa lista de chamadas de função
Path. Então essa função está sendo
chamada com dois argumentos, um aqui, um aqui, três, na verdade, e
um terceiro aqui. Então, agora precisamos
adicionar outra chamada. Caminho. Desta vez é
apenas uma string vazia. Antes, depois do
nome de domínio, tínhamos o slug. Mas agora, depois do
nome de domínio, não temos nada. Então, deixe uma
string vazia lá. Uma vírgula Oh, agora temos vistas. Está bem? Então, estamos avançando para nosso roteiro de publicar
uma página Então, visualizações, queremos criar
outra visualização agora em visualizações PY. Então, vamos
escrevê-lo primeiro aqui. Vamos
chamá-la de home view. Portanto, a visualização de pontos do homeview
será o método para isso. Então, temos que chamar uma vista. Vamos dar um nome para que possamos usá-lo mais tarde. Visualização de sublinhado inicial,
uma string, certo? Em seguida, crie uma visualização. Então, uma nova turma. A visualização inicial da classe vem da visualização de detalhes genérica. Na verdade, não deveria
vir disso, mas vamos deixar
assim por enquanto. E o modelo agora. Bem, esta página
realmente não tem um modelo. Na verdade, não precisa de um
modelo, porque veja, isso é
apenas uma página estática. Não está obtendo dados de
um banco de dados como o HTML de pontos em bloco. Veja, no blog HML, obtemos esses dados
do banco de Esse não é o
caso aqui, então você pode ter visualizações sem modelos. Então, tudo o que você quer fazer aqui é o nome do
modelo igual ao home,
desculpe, ponto de índice, HTML. Então, isso significa que,
quando os usuários visitam
esse URL, essa visualização
chamará modelo para ser renderizado
no navegador do usuário É isso mesmo. Certifique-se de
salvar, use esse PY, certifique-se de salvar o URL PY, certifique-se de salvar o HTML do ponto de
índice. E depois experimente a página. Portanto, esta é a página inicial e parece ter um problema Então, os problemas estão surgindo agora. Ele diz que falta um conjunto
de consultas na visualização inicial. Portanto, você precisa definir
o modelo de visualização inicial. O problema aqui
é que, nas visualizações, esse não é o tipo de
visualização correto para usar com visualizações que simplesmente renderizam um modelo sem
obter dados de um modelo. Portanto, nesse caso, o que você deseja usar
em vez disso é uma visualização de modelo. Salve e atualize. E esta é a
página inicial. Está funcionando. Você pode ver isso enquanto eu amplio. Certo. Então é assim que
você pode adicionar mais páginas. E agora você também pode entender a diferença entre os
diferentes tipos de visualização. Portanto, visualização de detalhes e visualização
de modelo. visualização do modelo significa
quando você só
precisa renderizar um modelo sem
obter dados do meu modelo, e essa é uma visualização mais complexa que obtém dados dos modelos e os passa para os modelos. No próximo vídeo, mostrarei como
usar outro tipo de visualização, que é basicamente usado para
criar uma lista de objetos,
uma lista de postagens de blog, no nosso caso. Fale com você no próximo vídeo.
214. Criando a página Sobre: Anteriormente, criamos uma
página inicial para nosso aplicativo. Agora, queremos desenvolver
essa página inicial e mostrar a lista de postagens do blog na página inicial, em vez de
algumas informações estáticas Então, antes de usarmos a
visualização detalhada para páginas de blog, visualização de
modelo para
a página de índice, agora queremos usar outro tipo de visualização para
mostrar uma lista de blogs. A visualização do modelo não é a
melhor opção para isso. Portanto, podemos excluí-lo
ou podemos
mantê-lo e usá-lo na página sobre nós. Digamos que nosso site
deva ter uma página sobre nós, onde você possa escrever algumas informações sobre
a empresa ou sobre você mesmo. Então, vamos ver como
podemos mudar isso. Vamos começar com o índice, a página HTML e renomeá-la
para about then in views,
queremos renomear o índice para about para refletir o nome
do modelo HTML,
e também a visualização inicial,
talvez mude para
sobre a visualização e, em seguida, vá para l dot py e altere a
visualização inicial para sobre seguida, vá para l dot py e altere a
visualização inicial para a visualização, exclua esses parênteses
e a
visualização inicial sobre a exclua esses parênteses
e a
visualização E agora queremos dar outro padrão de URL à
página sobre nós. Deveríamos pensar em
Slash desse jeito. Salve o URL que é PY, salve as visualizações que são PY e isso está
em todo o servidor. Ah, eu não estou em um ambiente
virtual, então feche o terminal e abra um novo e depois a tecla de seta superior para
executar esse servidor novamente. Portanto, a página inicial agora não
é mais válida, mas terminar com
uma barra é Portanto, deve terminar com uma barra. Caso contrário, você receberá um erro. Mas esta página é válida agora. Então, esta página, digamos que
seja a página sobre. Certo, salve isso,
atualize e veremos a mudança. Então, trata-se de adicionar
mais uma página. No próximo vídeo, vamos
continuar e criar a página HML com
pontos de índice novamente
com novos conteúdos Então, mostrando uma lista
de blogs para você.
215. Listando postagens de blog na página inicial: Oi. Neste vídeo,
adicionaremos a página inicial e mostraremos uma lista de postagens de blog
nessa página inicial Então, vamos começar de novo
do ponto de vista do usuário. Então, queremos ter para o
usuário um índice desse
modelo HTML com tags
HTML do tipo documento e tags de corpo Então, o que colocamos aqui? Bem, então tags com
colchetes e símbolos de porcentagem, e desta vez, desta vez, o que fazemos é uma lista de quatro voltas,
quatro postagens em uma lista de postagens E então fazemos algo aqui, e então terminamos esse loop e quatro dentro aqui,
fazemos outra coisa. Vou explicar o que é
lista de postagens e o que também é. Mas, basicamente,
temos as variáveis aqui, que podem ser o
título e o conteúdo da postagem. E talvez não, o conteúdo do post
seria demais para mostrar, mas poderíamos dizer autor. Então, isso será apenas
uma lista de blocos. Não queremos
mostrar o conteúdo dessa lista
porque seria demais. Então, título do post, autor do post. Agora, o que é lista de postagens? A lista de postagens é uma visualização, que precisamos definir
em visualizações que seja PY. Então, mais uma aula de visualização. Lista de postagens da classe,
o nome deve estar no mesmo formato, por assim dizer, que este aqui. Usamos a lista de sublinhados da postagem aqui com letras minúsculas Agora precisamos usar post in camel. As listas de letras maiúsculas de P
e L estão em maiúsculas Isso herda da visualização
genérica da lista de pontos. Então, esse é
mais um tipo de visão. Tivemos uma visão detalhada para renderizar modelos HTML que
obtêm dados de um módulo. Tínhamos uma visualização de modelo para renderizar modelos
HTML sem
dados de um modelo e temos essa visualização de lista
, especializada em
renderizar várias linhas de dados, neste caso, várias postagens Agora, esse tipo de classe
espera uma variável do conjunto de consultas, que deve ser igual a Post. Post é o modelo. Portanto, tenha cuidado aqui. Não é a vista.
Não é uma visualização do blog. Não se trata de visualização, é claro, é do modelo de blogs, que você pode encontrar
dentro dos modelos do PY. Então, publique esse modelo é
o que nos referimos aqui. O que estamos tentando fazer aqui é tentar
consultar os objetos. Então, as linhas desse módulo de postagem. Sem o parêntese,
queremos aplicar um filtro e talvez
obter todos os objetos, talvez aplicar um filtro como status igual a um,
que significa Deixe-me mostrar para
você. Então, status, estamos falando sobre esse campo. Então, queremos essas postagens, aquelas postagens de blog, que tenham
o valor de um para status. O status tem zeros ou uns. Então, um significa publicar, zero significa rascunho. Então, queremos mostrar lá apenas as postagens que são publicadas com um valor de status de um. E talvez você queira
ordená-los por qual campo? Então,
talvez tenhamos criado uma data . Então, data de criação. Então esse é o relacionamento
com o módulo
e o relacionamento com os
modelos agora é o relacionamento com os modelos Nomeie Eagle com dois
pontos de índice em HTML, certo? Então, construímos o modelo,
que se parece com isso. Criamos a visualização,
mas também precisamos
fazer algo com a URL. Então, temos um item
aqui, dois itens aqui. Precisamos de uma vírgula aqui
e adicionar um terceiro item, que é a página inicial Então, uma string vazia. E queremos obter as
visualizações que queremos obter,
exceto a visualização da lista de postagens, lista de postagens. A lista de postagens é uma classe, então queremos obtê-la como uma visualização. Então, chame o método como
visualização da lista de postagens e dê a ele um nome como quem? Agora acho que estamos
prontos para experimentar o navegador e
visitar a página inicial Mas primeiro,
certifique-se de salvar tudo. Essa, a URL desse PyFle, o índice desse arquivo HTML
e as visualizações desse PyFile Salve-os e veja se o aplicativo
está em execução, está em execução. Então visite a página inicial
e está funcionando. Então, cachorros, gatos, fizeram. Sim, essas são as
duas postagens do blog. Não é muito atraente, mas você pode mudar
isso com um pouco de HTML Por exemplo, você pode
querer colocar o título dentro de duas tags H aqui. E o autor,
talvez em tags P. Então, aqui. Digamos que recarregue e ficará um pouco melhor Agora, a ordem disso é que as postagens mais antigas estejam no topo e as postagens mais recentes no final Então, se você quiser mudar
isso, é muito fácil de fazer. Basta acessar as visualizações em que PY e você desejam
alterar o conjunto de consultas, ordenar apenas adicionando um sinal de menos, então essa é
a sintaxe do jango,
e depois atualizar, e
Kats estará no topo agora, PY e você desejam
alterar o conjunto de consultas,
ordenar apenas adicionando
um sinal de menos, então essa é
a sintaxe do jango,
e depois atualizar, e
Kats estará no topo agora,
a mais nova postagem do bloco. Então, isso parece bom, mas acho que faltam duas
coisas aqui. Uma é que cada um
deles deve ter um link no
qual o usuário possa
clicar e acessar aquela postagem específica do bloco. E segundo, o que falta
aqui é um pouco de estilo. Então, isso parece muito horrível. Precisamos aplicar alguns estilos e vamos usar o
bootstrap para isso Que é uma biblioteca CSS e simplesmente cria coisas. Portanto, as páginas da web parecem muito melhores. Então, em seguida, vamos
adicionar uma URL aqui, que tem a ver com tags de URL, então você
aprenderá a usar tags de URL
e, em seguida, adicionaremos alguns estilos de
bootstrap. Te vejo.
216. Adicionando Bootstrap ao Django: Oi, bem vindo de volta. Neste vídeo, você aprenderá como
ir disso para isso. Então, vamos adicionar alguns estilos CSS usando
a biblioteca bootstrap,
que é uma biblioteca CSS Bootstrap facilita a
estilização de seus documentos HTML
e, hoje em dia, é essencial ter
um site com aparência moderna Então, vamos onde o
deixamos com nosso código. Este é o índice do
documento HTML que renderiza esta página da web, e este é um
documento com o qual trabalharemos nesta palestra A maneira como
vamos fazer isso é examinando a documentação do
bootstrap Portanto, tente usar o Google bootstrap, e o primeiro resultado deve ser
a página oficial do bootstrap Então, algumas palavras sobre bootstrap. Você sabe, CSS é
algo que geralmente é colocado em algum lugar em uma pasta
que você chamará de estática. Então, você cria uma pasta
no diretório do projeto
no diretório raiz e a chama de estática. E dentro da estática, geralmente você cria um arquivo
como o CSS do ponto principal. E nesse arquivo, você
escreve algum código CSS. Esse código CSS, basicamente,
se parece com isso. Digamos P e então você tem alguns colchetes como esses, e então você diz cor
azul, por exemplo, e então tamanho da fonte 17 pixels Isso seria CSS. Claro, ele seria colocado dentro de um arquivo CSS, como eu disse. Embora também exista uma
maneira de simplesmente colocar esse código, integre-o
ao documento HTML. De qualquer forma, ele faz
a mesma coisa. O que ele faz é que
esse código, por exemplo, pegue todas as tags P e as
pinte de azul em azul. Então, o texto será azul e o tamanho da fonte do
texto será de 17 pixels, e assim por diante, você tem outras
propriedades como essa. Agora, quando usamos o bootstrap, o que estamos fazendo é usar código que já
está escrito Então, eu estou falando sobre o código
CSS novamente. Portanto, a biblioteca tem código CSS
e, em seguida, você usa esse código apenas se referindo a
algo chamado classe. Por exemplo, se você quisesse usar e nós
usaremos bootstrap, em vez de fazer isso, você
diria classe igual a P pretty Por exemplo, digamos
que esse parágrafo, esse código também teria
um nome em algum lugar. Então, digamos que P é bonita. Então, isso é o que estaria dentro dos arquivos de bootstrap
que instalamos E então, em nosso código, basta
nos
referir a essa classe de bootstrap para aplicar esses
atributos a esse parágrafo,
que, nesse caso,
seria o nome do autor Então você o verá em ação. Deixe-me deletar isso
e aquilo também. Certo. E vamos voltar
ao site do bootstrap Portanto, existem duas maneiras de incluir o bootstrap
em seu projeto instalá-lo
ou você pode usar essa maneira mais rápida
com o JS delivery E aqui você tem o guia de
como incluir o bootstrap. Portanto, temos que incluir
o arquivo CSS, que, como eu disse, contém todo esse código CSS. Então, devemos copiar e
colar esse código aqui. Eu posso simplesmente pressionar copiar
aqui para obter esse código. E coloque-o dentro das etiquetas de cabeça antes de todas
as outras folhas de estilo. Então, não
temos etiquetas de cabeça aqui, mas podemos criá-las. Cabeça, desse jeito.
Então, entre aqui, colamos esse link, com uma tag de link tags, abrindo ali, fechando aqui. Em seguida, também precisamos colocar
o arquivo JavaScript. Então, ponto JS, você pode ver. E para fazer isso, você precisa copiar isso novamente. Portanto, em Pacote,
há várias opções, mas o pacote é a
melhor. Então copie. E você precisa colocar isso. Portanto, coloque um dos
scripts a seguir próximo ao final de suas páginas, logo antes
da tag de encerramento do corpo, logo antes da tag de
encerramento. Então, só aqui. E é isso. Agora, salve
esse índice desse arquivo HTML, verifique se o aplicativo está
em execução e visite-o, e você já verá a diferença
nos telefones Portanto, os links são um
pouco mais claros em azul e a fonte é maior. E foi assim que você incluiu o
bootstrap em seu aplicativo. Agora, vamos seguir
o tutorial novamente. Então, aqui temos um modelo
inicial. Então, começa com essa tag HTML do tipo
doc aqui, declaração
HML Lang
e tags de cabeçalho Então, vou copiar isso e
substituir isso por aquele. Então, a primeira tag HTML, depois temos as meta tags, aquela e aquela Já incluímos esse link, então só precisamos
dessas duas meta tags. Abaixo da etiqueta principal, abaixo da etiqueta de cabeça aqui. Então meta meta, o link para
os arquivos CSS do bootstrap. E o título, isso é opcional. Portanto, não está relacionado
ao bootstrap, mas também podemos colocar um título,
vamos chamar isso de blocos de postagens As tags de título também estão
dentro das tags de cabeçalho. As etiquetas de cabeça fecham
aqui e aqui, então temos as etiquetas corporais Olá, mundo, isso é opcional. Aqui temos o script
que já incluímos, esse aqui, então está
tudo bem. Certo. Então, aqui embaixo, ele explica o que todas essas tags
fazem se você quiser ler isso. O que eu quero fazer agora
é usar o bootstrap. Então, esses são os requisitos, os links que colocamos
nas meta tags, mas agora queremos usar os recursos
reais do bootstrap Então, a biblioteca real. O que eu vou fazer
geralmente é com o bootstrap, o que você faz é
ter uma tag DIV principal Que começa aí e termina onde seu conteúdo termina. Então, aqui embaixo, eu
vou alinhar o div. Então, abrindo div, fechando div com uma barra div Então, esse é todo o nosso
conteúdo, certo, que se reflete desde o gato até
o último morto aqui. E essa div agora deve ter uma classe igual a aspas duplas E dentro dessas aspas,
você escreve container. Essa é uma das principais
classes do bootstrap, e você vê que
eu salvo a página, os documentos aqui e
atualizo a página e já vemos a
diferença O que o bootstrap está fazendo
com esse contêiner é que esse contêiner é algum código CSS salvo
em algum lugar desse arquivo CSS, e esse contêiner
basicamente tem alguma margem, algum espaçamento entre
o texto e a área Portanto, a página também
já está responsiva. Então, se você vê-lo, ele se move, ele ajusta a largura
do navegador seguir, o que eu quero fazer agora é que, para cada uma das postagens, as postagens sejam de gatos, então essa é uma postagem com um link no nome do autor,
essa é outra postagem. Então, para cada um desses posts, eu quero criar
outra divisão. Então, a partir daí até
antes dos quatro finais, então aqui e talvez seja uma
boa ideia recuar isso, selecione-os assim
ao tocar para recuá-los Então, basicamente, esses dois são
parte desse elemento div. Então, esse é um elemento agora. Então, o que vou
fazer é
atribuir uma classe de cartão. Então, onde estou conseguindo isso? Bem, no bootstrap, por exemplo, você pode ver se acessa o layout,
como organiza seus documentos HML, vê que tem contêineres e vê que tem
aqui
a classe de contêiner que já usamos Então, se você acessar os componentes
e acessar o cartão, verá que pode organizar seu conteúdo
nesses tipos de cartões. Então, todos esses elementos
aqui são um cartão. Você vê o cartão da classe, e isso é o que eu
também estou fazendo aqui. Então, estou colocando uma postagem
dentro do cartão. Então, se eu salvar isso agora, atualize, você verá que há algum tipo
de borda ao redor de cada postagem E podemos
melhorar isso também atribuindo. Depois de um espaço aqui, fazemos três, que representam imagine ao redor de
cada uma dessas duas caixas. Então, imagine que 33 agora é uma
unidade de CSS ou mais, digamos, um nível de espaçamento. E, portanto, você pode ler sobre as margens que devem estar
nas concessionárias Trata-se de espaçamento, então espaçamento, você verá,
por exemplo, M
significa margem
e, em seguida, você tem os níveis Então, um, dois, três, quatro, cinco, então isso é
criar algum espaço. Agora, vamos voltar ao exemplo do
cartão aqui. Então temos essa imagem. Não precisamos de imagens agora. Então, essa imagem aqui,
nós não precisamos disso. Mas então temos o corpo do cartão. Portanto, há outro div
dentro desse div de classe de cartão. Então Div e nós pegamos isso
e colocamos aqui. Então, desse jeito,
novamente, esses dois. Então, agora, essa é uma classe
igual ao corpo da carta. E também temos outro
título de cartão. Então esse é o título do cartão, que no nosso caso, seria gatos e cachorros, o que significa que
poderíamos adicionar um título aqui. Então veja o que eu vou
fazer, Div, desse jeito. Então, essa seria uma classe
igual ao título do cartão. E lá dentro,
colocávamos esse título no post. Sei que estou duplicando isso, mas vou te dizer o porquê Então, publique esse título e atualize. Então, sim, temos
gatos aqui, cachorros aqui. Mas é melhor usar
talvez H two em vez de DIV. Então H dois aí, e não se esqueça de mudar
isso também para H dois. Abre aqui,
fecha aqui. Então eu atualizo e isso é
um título, isso é um título. Depois do título, talvez
tivéssemos o texto. Então, esse texto aqui,
que recebe o texto do cartão. Uma div. E isso seria conteúdo de
post dot, certo. Então esse é o nosso texto. Queremos exibir algum
texto abaixo do título. E isso, como eu disse, é classe igual ao texto do cartão. Salve a atualização para ver as alterações. Sim, então o conteúdo também
está aqui. Agora, a seguir, quero remover esse link
alterando-o para um botão. Então você vê que aqui
temos esse fundo. Então essa é uma tag A
e essa classe. Então, o que podemos fazer isso? Vamos atribuir uma classe de BTN e depois BTN primária. Agora, vamos salvar
isso e atualizar para ver gatos, gatos
também são bons e o botão Agora, como esse é um botão, não
queremos mais
exibir o título aqui da postagem. Queremos exibir
algo como ler mais. Seguro, atualize.
Sim, parece melhor. Talvez queiramos adicionar
sob a div de conteúdo. Talvez queiramos ter
outra div em
que digamos que o autor é o post
desse autor, certo? Aquele. E
removemos o texto P agora, pois não queremos dois campos de autor.
Então remova isso. E isso também seria uma
classe de cartão igual ao texto do cartão. Seguro. Veja as mudanças. Sim, gatos, gatos são bons para
escrever edições e ler mais. Agora, você vê que essas divs estão um pouco
próximas umas das outras Então, o div do conteúdo, o dif do autor, o div do
botão Se você quiser mudar isso, você pode alterar
divs para parágrafos Então P em vez de DF P, P, P aqui também Atualização segura e
parece um pouco melhor agora. Os botões parecem
um pouco grandes para mim. Isso porque esse texto
aqui é um elemento H dois. Então, se você quiser que o
texto seja menor, remova
as duas tags H, a tag de abertura e
a tag de fechamento. Atualização segura e
fica melhor. A página também é responsiva para que você possa reduzir o navegador Isso é sobre esse vídeo. Na próxima,
vou apresentar a
você as tags de modelo Jangle Você aprenderá
no próximo vídeo do que se tratam. Nos vemos lá.
217. Herança de modelo: Olá. Até agora, com nosso site, construímos esta página inicial Você pode ver que está
na página inicial, e também temos a página
Sobre Então slash aboutSlash
Esta é a página Sobre, que não tem nenhum estilo de
bootstrap, é claro, porque aplicamos o estilo somente ao E também temos os modelos HTML de
pontos do blog, que são uma dessas
páginas para gatos ou cachorros. Então, três modelos,
um, dois, três. Agora, precisamos encontrar uma maneira de
navegar pelo site, que é, por exemplo, como você vai, como
o visitante pode ir desta
página para a página sobre? Bem, geralmente isso é
implementado por meio uma barra de menu de navegação, que pode estar
em algum lugar no topo aqui. E você pode clicar em
Link e ir para essa página. Isso é o que faremos
nesses vídeos agora. Como podemos implementar isso? Porque a
barra do menu de navegação deve estar em todas as páginas. Então, uma maneira de fazer isso é
criar esse menu de navegação, que é criado com HTML. Uma maneira é codificar o HTML desse menu de navegação em
cada uma dessas páginas HTML. Mas isso, é claro, contra os princípios
secos, o que significa,
não se repita. Portanto, o que
vamos fazer é usar a
herança de modelos O que é herança de modelos? Bem, funciona assim. O componente que
será repetitivo. Portanto, a barra do
menu de navegação, no nosso caso, ficará em
um único arquivo. E então os outros arquivos, que são sobre blog e índice, esses arquivos obterão aquele outro arquivo onde está
o menu de navegação. E isso é conhecido
como herança de modelo. Então, vamos ver como funciona em
ação. Então, com o botão direito, você clica nos
modelos, acessa Novo arquivo e escreve algo
como HTML de ponto base. O HTML básico conterá a barra
do menu de navegação. Agora, para criar um menu de
navegação, em HTML, você usa a tag Nav Então abra e feche, e então dentro, você tem
outro div abrindo e fechando E dentro dessa div, temos o UL, que cria
uma lista de itens de menu Portanto, o primeiro item do menu
seria com L I Right. E depois temos outro. Então, em casa, temos sobre
nós. Sim, isso é tudo. Então, o primeiro item do menu, o segundo item do menu. Então,
isso seria para quem. Portanto, dentro
da primeira tag LI, que envia para a lista, colocamos uma tag, que criará um link. O mesmo vale para o próximo
aqui, uma etiqueta, certo? Dentro da primeira, uma etiqueta. Então, aqui mesmo, dizemos
HRF, essa propriedade, que
terá como valor entre aspas a URL
da primeira página, que seria essa tag URL. Código único. Bem, agora precisamos examinar a URL do
blog e obter o nome da URL da
página inicial, que é a página inicial. Então isso entra aqui, em casa. Fazemos o mesmo com relação à visualização. Novamente aqui, vamos copiar isso e colar
dentro da primeira tag H. Cuidado. Há um espaço aqui, Hf sobre sublinhado Agora precisamos fazer outra
coisa. Temos que ir para o HTML de pontos de
índice e recortar a tag
do corpo de abertura aqui até a
primeira linha, recortá-los e
colá-los no topo aqui. Abra um pouco de espaço,
cole-os lá. Tente novamente indexar esse
HTML e recortar novamente, começando pela tag HTML de
fechamento,
incluindo a tag de corpo de fechamento, incluindo a
tag de script do bootstrap Corte-os, vá para a base desse HML, vá até o final Abra um pouco de espaço, cole. Agora, o HTML de ponto base
será o pai. Então, falamos sobre herança
de modelos. Este é o pai agora e
indexe que o HTML é o filho, que obterá
isso do HTML de ponto base Na verdade, todas as páginas,
não apenas de índice, mas de HTML, bloqueiam HTML com pontos. Portanto, todas as postagens do blog
obterão tudo isso do HTML básico. Isso também nos permite aplicar o bootstrap em
todas as páginas da web E agora você precisa dizer a
cada uma de suas páginas, como indexar esse HTML, você precisa dizer a ela
que ela precisa se estender,
então, por meio de uma
tag de modelo como essa, você diz, estenda aspas simples e ponto
base HTML Então, copie e cole sobre HTML também. E aqui também, precisamos excluir essas tags de corpo
e apenas dizer isso e ir para o bloco de pontos HTML. Além disso, exclua a tag de corpo, tags
HTML, tags de tipo de documento,
cole-as ,
exclua a
tag HTML de fechamento e a tag de corpo
de fechamento exclua, salve, salve. Em seguida, vá para o
HTML de ponto base e
, no final, depois do menu de navegação, queremos fazer uma tag de modelo
novamente e dizer bloquear conteúdo. E também a mesma coisa. Então, uma tag de modelo e bloqueie
o conteúdo. Então, o que é isso? Bem, basicamente, página da web H. Então, pense no que o visitante
vê no site. Eles veem no topo uma barra de menu de
navegação, que é
essa aqui, certo? E então eles veem o
conteúdo que pode ser a postagem sobre gatos, o conteúdo sobre gatos ou, no caso, sobre o
conteúdo da página A. Então, abaixo do menu,
vem o conteúdo. Então esse é o conteúdo. E agora precisamos lembrar
esse conteúdo variável e,
por exemplo, indexar esse HTML
e, abaixo disso, dizemos Bloquear conteúdo. E termina novamente
com conteúdo em bloco. Assim, o que significa que, como você vê, isso
estende o HTML de ponto base, então ele obtém os dados
do HTML base
e, em seguida, essa coisa
entre o bloco, as tags de conteúdo de lá
para lá são de alguma forma combinadas com
a página HTML base para serem renderizadas no
navegador como uma E isso é sobre herança
de modelos. É um pouco difícil de entender. Então, vamos ver se
cometemos alguns erros agora. Vamos ver o
resultado Sim, claro. Então diz que se estende, você
esqueceu de registrar
ou carregar essa tag? Bem, estender isso é porque jangos não são reconhecidos
nisso porque se estende Então, o HTML do ponto do blog
se estende, o HTML do ponto base. Vamos fazer o mesmo com
as outras páginas ,
salvar esta também e salvar. Sim. Este é um modelo HML de
ponto base Vamos procurar o próximo erro. Ok, nada mal. Então, vemos algo aqui, mas não vemos nenhum texto. Então, vamos voltar e corrigir isso. Eu baseio em HTML com pontos. Então, aqui temos o link. Mas não temos nenhum texto. Então, vamos ficar em casa por isso
e sobre nós por isso. Então, se atualizar. E sim, vemos algo agora, fale sobre nós. Isso nos leva à página Sobre. Vá para casa. Vai
para casa sobre nós. Ótimo. Não vemos
o conteúdo aqui, então vamos corrigir isso
na página At HML Porque não vemos isso
porque não temos essas tags de conteúdo em bloco. Portanto, bloqueie o conteúdo aqui e aqui, mas este deve
estar bloqueado, seguro, muito fresco, e esse
é o conteúdo de um barco. Agora, é claro, se você
quiser que isso seja mais bonito, você tem que
colocá-lo dentro da tag div e dizer class container,
safe, refresh, e agora ele
vai para algum lugar no meio E você também pode
torná-lo ainda melhor. Portanto, esta é uma
diferença principal que contém tudo. Isso seria
algo como H dois E então poderíamos adicionar
mais diferenças com o conteúdo. Esse é o conteúdo como esse. Portanto, o menu de navegação agora não
parece muito bonito
porque não aplicamos nenhum
estilo de classe de bootstrap a esse elemento Então você tem NAF sem classe, D sem classe, UL,
LI e A, além disso,
sem classes, sem estilo de
bootstrap Então, vamos fazer isso no
próximo vídeo. Nos vemos lá.
218. Aplicando o estilo do Bootstrap ao menu de navegação: Nós voltaremos. Vamos adicionar um pouco de estilo ao menu de
navegação agora Então, voltamos ao HTML de pontos base. E o primeiro item é
NOV. Em primeiro lugar, queremos selecionar todos eles
e recuá-los um e dois Portanto, ele deve ser indentado
sob a etiqueta do corpo. Certo? Então comece
com NAV e classe igual a Eu conheço algumas
classes do Bootstrap, e você também pode encontrar
exemplos online Então, barra de novembro, especifica
que esta é uma barra de novembro. Portanto, use a luz da barra Nov no
estilo Navbar para a cor e a luz BG de
fundo também, tenha um pouco de sombra e
então você também precisa
dar classe a uma propriedade de NOV e também depois do casaco, aqui você precisa fornecer
outro ID igual ao NOV principal, assim. Portanto, isso é usado pelo
JavaScript do bootstrap. Então, a próxima div
terá uma classe de colapso Nova collapse Então, essas são
aulas diferentes e uma ideia de como o javali de novembro é responsivo Depois, temos a classe UL. Nvbnuvt. ML significa margem esquerda
e seu valor será dois. Por fim, a
classe LI é um item NOV. Então esse é um item
do menu, e pronto. Salve isso e veja
o que mudará. OK. Nada mal. Agora, as tags A, então os links não
parecem muito bons, mas a barra em si fica
bem com uma sombra. Então, vamos fazer o
estilo das tags A. Então, uma classe igual à marca
Navbar, segura. Recarregar. A casa parece boa, mas sobre nós não, não. Então, vamos fazer o mesmo com o outro assim. Sim, parece bom. colocá-lo um pouco à direita. E uma classe P três adicionada
à primeira tag A deve funcionar. Então, salve, atualize e tudo
vai mais para a direita. Então, P três significa que deve preencher a classe A, e você deve fazer o
mesmo com as outras. Então, P três, salve, atualize. Esse é o menu de navegação. Agora, aqui embaixo, queremos
mais espaço entre o menu de navegação e esse
conteúdo. Vamos consertar isso. Acho que
funcionaria adicionando o elemento de navegação
à classe do elemento de
navegação. Poderíamos adicionar um MB de três. Então B significa margem inferior. Atualizar. E sim, agora está melhor. Portanto,
agora há algum espaço sob o menu, a barra do menu de navegação. E isso é tudo. Espero que isso faça sentido, e eu te mandarei uma
mensagem mais tarde. Obrigada.
219. Demonstração do aplicativo de tradução Django: Olá, bem-vindo de volta a
outra série de vídeos. Na série,
vamos criar um aplicativo web de tradução com jango Então, esse aplicativo web, aplicativo
Jango, fará parte do
nosso projeto de site jango O site já possui um aplicativo de bloqueio que podemos
acessar pela página inicial. Então, isso é apenas um
esboço do site. E também tínhamos
essa página sobre nós, que também faz parte
desse aplicativo de bloqueio. Não, o tradutor será um segundo aplicativo que
adicionaremos a este site do jango E há três razões pelas quais estou incluindo esse
aplicativo tradutor em nosso JangObject O primeiro motivo é retroceder
o que você aprendeu até agora. Então você aprende como
criar esse aplicativo de bloqueio. Mas agora eu quero passar pelo processo de criação
do aplicativo
mais uma vez porque já criamos
um aplicativo, mas quando você cria outro aplicativo, você vê as coisas de uma perspectiva
diferente e aprende melhor, tenho certeza. Então, esse é um dos motivos para revisar
o processo de criação do aplicativo. O segundo motivo, então,
é aprender sobre formulários
jango, porque
neste aplicativo jango, teremos
duas caixas de texto Em um deles, o usuário
inserirá o termo, as frases que
deseja traduzir. E na segunda, eles
vão ver o texto
traduzido. Então, vamos usar o
inglês como primeiro idioma
e, em seguida, outro idioma
como idioma traduzido. Falaremos sobre
esse detalhe mais tarde. Então, a ideia aqui é
que você aprenda sobre formulários. Em jango porque essa coisa
aqui é na verdade um formulário. Então, um formulário que permite que os usuários insiram alguns
dados, algum texto
e, em seguida, realizem uma solicitação, que é uma solicitação de postagem. Então, eles postam alguns
dados no servidor. Nesse caso, será o texto que eles
escreverão aqui. Então, o servidor, Jango,
vai pegar esse texto e usar uma biblioteca Python para traduzir esse
texto para Em seguida, o Jango enviará
os dados de volta ao usuário. Então, essa aqui será a caixa de
entrada do formulário e essa será a caixa de
saída do formulário. Então, novamente, revisar o processo de criação do
aplicativo foi um dos motivos e aprender sobre
formulários é outro motivo E a terceira razão pela qual
quero ter esses vídeos é
mostrar como
processar o conteúdo que o usuário
envia para nosso aplicativo jangle Hum, então, neste caso,
será o texto, e você verá como
organizar a biblioteca
que processa esse texto em arquivos e como
obter esse texto e como enviá-lo
ao usuário,
porque com nosso aplicativo de bloqueio, não
estamos realmente processando
nenhum conteúdo do usuário, mas desta vez vamos. Então prepare-se, e eu
falarei com você nos próximos
vídeos. Está aqui.
220. A etapa do desenvolvimento de aplicativos Django: Oi. Neste vídeo, vou mencionar
as etapas que você deve seguir para criar esse aplicativo tradutor
específico E essas etapas também valem para qualquer outro aplicativo que
você queira criar. Então, primeiro de tudo, o que você quer
fazer quando tem uma ideia ou alguns requisitos
para criar um aplicativo descobrir se é possível criar esse aplicativo web
específico. Por exemplo, queremos criar
esse aplicativo que traduza,
digamos, do
inglês para o alemão Então, primeiro de tudo, você quer responder
à pergunta: é possível
traduzir um pedaço de texto, então eu escrevo, que
está em inglês. Você pode traduzi-lo
para um texto em alemão? Então eu cordo novamente, mas a versão alemã
dessa string original. Então, você pode traduzir
texto com Python? E para isso, você
gostaria de fazer algumas pesquisas
na web e talvez OscoFMS até encontrar um pacote
Python,
talvez, o que
facilitaria isso Ou você também pode criar
seu próprio pacote, o que deve ser
muito trabalhoso para essa tarefa específica, pois traduzir idiomas não
é fácil Então, fiz algumas
pesquisas no Google e descobri que uma boa biblioteca de pacotes
para usar para isso é o Google Trans, que é basicamente construído na API do Google
Translate. Portanto, com o Google Trans, você pode fornecer uma string e o
Google Trans
obterá a tradução do Google Translate e retornará uma string
no idioma de destino. Então, problema resolvido. possível traduzir
via Python Portanto, temos luz verde para
continuar criando nosso aplicativo. Então, a próxima coisa
que você quer fazer é criar um aplicativo jango vazio , o que
faremos no próximo vídeo E depois disso, você deve
seguir a abordagem de cima para baixo, que é pensar do ponto de vista
do usuário Então, em vez de
examinar seus módulos, criar um modelo ou
talvez criar uma visualização, você deseja criar
o que o usuário deseja ver, que é o modelo HTML. Portanto, a primeira etapa seria
criar um modelo HTML
e, em seguida, esse modelo, esse HTML deve ser renderizado em
uma URL específica Então, em seguida, você quer configurar o URL do seu aplicativo
e, depois disso, você quer conectar os URLs e esse URL quer acionar
uma visualização específica E então, em seguida, você
deseja criar uma visualização. A visualização
basicamente obterá o HMLU criado nesta etapa e o
exibirá nesse URL Em seguida, você deseja criar
um modelo que contenha os dados que serão injetados
no modelo HDML E nesta etapa
, já deveríamos ter
construído a estrutura do nosso aplicativo web com HTML e com a caixa de texto
pronta para o texto. Então, podemos pegar esse
texto para que possamos pegar esse texto, traduzi-lo e devolvê-lo a uma
das caixas de texto. Então, essas são as etapas
que tomaremos. Então, no próximo vídeo,
vamos criar o aplicativo web jango em nosso JangObject
existente Eu vou falar com você
no próximo vídeo.
221. Criando uma estrutura vazia de aplicativos para o aplicativo Tradutor: Oi. Neste vídeo,
vamos criar um novo aplicativo em nosso projeto janga
existente Primeiro, vamos dar uma olhada na
aparência do site. Então, no meu terminal, certifique-se de que seu
ambiente virtual esteja ativado. O meu não é porque eu não tenho esse parêntese na frente Mas se eu criar um novo terminal, usando o ícone de adição ou acessar EminalNW, meu
ambiente virtual está ativado agora, então eu posso
dizer Python,
gerenciar esse gerenciar Acesse esse site, e é assim que o
site se parece agora, e teremos
outro item de menu aqui, que conterá
o aplicativo tradutor Então, vamos trabalhar.
Vamos criar o aplicativo, interromper a execução
do servidor com o Control C e o Run Python, gerenciar o dot PY, iniciar o aplicativo
e, em seguida, dar um nome ao Como tradutor, execute e um novo
diretório de tradutor é criado Você pode ver isso
aqui. Portanto, está no mesmo diretório com o bloco. O bloco está no diretório raiz. O tradutor também está
no diretório raiz,
como você pode ver aqui Agora, depois de criar
um aplicativo com o aplicativo Iniciar, você deseja registrar
esse aplicativo nas configurações do meu site. Vá para configurações dot PY JangObject e você deseja ir para Aplicativos instalados Então, antes de adicionarmos o bloco aqui quando criamos
o aplicativo de blog,
agora, depois da vírgula, queremos adicionar outro item
a essa lista de aplicativos instalados Então é string, e
o nome disso é ou Tradutor, sim Portanto, isso deve refletir o nome do seu aplicativo e o nome
do diretório aqui. Salve as configurações desse PY. E é assim que se cria
um novo aplicativo vazio no jungo. No próximo vídeo, começaremos
a criar nosso modelo HTML.
Então nos vemos lá.
222. Criando um formulário Django: Anteriormente, criamos
um novo aplicativo vazio em nosso projeto jangle Agora, o próximo passo é. Portanto, essa etapa está concluída. Crie um aplicativo de jangle vazio. A próxima é criar HTML. Então, como dissemos
, o que queremos é
ter um novo item de menu aqui, que
criaremos posteriormente o item, mas primeiro queremos
criar a página. Em seguida, adicionamos essa página
à barra de menu. Portanto, a
página será simples. Vai ter
uma caixa de texto aqui e outra à direita,
e um
botão em e um Portanto, espera-se que o usuário
insira algum texto em inglês
e, quando
pressionar o botão, esse texto será traduzido para,
digamos, alemão. Então, vamos escolher o
alemão como nosso exemplo. Obviamente, você pode melhorar
o aplicativo posteriormente
adicionando uma opção para escolher
outros idiomas também. Mas, por enquanto,
vamos
simplificar o foco nos formulários. Essa será uma forma
que vamos construir. Vamos começar criando um arquivo
HTML em modelos. Então, clique com o botão direito em Modelos e vá para o
arquivo. Então, novo arquivo. Talvez o tradutor dot HTML
seja um bom nome de arquivo. Agora queremos criar essas
duas caixas de texto e o botão. Mas em vez de digitar o HTML aqui enquanto você assiste ao vídeo, vou
copiar o código que eu já
criei , colar
aqui e explicar para você Agora, para que pareça bom, também
vou colar o
link para o bootstrap Fonte para que as caixas de
texto tenham uma boa aparência. E você pode encontrar esse código
anexado a esta palestra. Então, vou salvá-lo
e, em seguida,
clicar com o botão direito do mouse aqui e ir para Reveal no Finder ou
no Windows Explorer, e então posso clicar duas vezes nele E é assim que parece. Então, temos essas duas caixas de
texto que podem ser expandidas pelo usuário, o usuário pode digitar texto aqui, também
pode digitar texto aqui. Mas este aqui basicamente servirá para mostrar a saída. De qualquer forma, o usuário
também pode digitar texto lá e modificar a saída,
se quiser, e assim por diante. E o botão de envio é o que traduz esse
texto para aquele Então, agora, é
claro, não está funcionando. Não espere que esse botão faça nada porque
não está conectado ao jango Deixe-me explicar
o que o código faz. Então, esse link aqui está apenas temporariamente neste arquivo porque normalmente
não precisamos disso. Então, vou excluí-lo. Não precisamos disso porque
esse link já está em HTML de ponto
base. Então
esse aqui. E esse estilo de bootstrap
será aplicado a todos os modelos que estão
estendendo o HTML de ponto base Atualmente, porém, o
tradutor HML não
está estendendo Então, vamos adicionar a
tag que se estende, para que ela se estenda
entre aspas e pontos base HTML. E então também
queremos fazer o texto novamente e dizer bloquear conteúdo. Aí, feche
aqui e bloqueie o conteúdo. Assim mesmo. Portanto, esse arquivo obterá o
código do ponto base ML, e esse código
será combinado com esse código para servir
a página completa, incluindo a barra de navegação. Então, os itens do menu
na página da web. Então é isso que temos aqui. Temos esse contêiner de classe, que é o div principal
que contém tudo, então ele começa aqui
e fecha E por dentro, esse div
contém um formulário. Então, o formulário começa
aqui e termina aqui. Portanto, o formulário é esse, incluindo as caixas de
texto e o botão. Então essa aqui é uma fileira. Começa aqui.
Isso termina aqui. Então, basicamente, essa linha aqui, é uma divisão que contém todas essas duas caixas
e o botão novamente. E dentro dessa divisão
com linha de classe, também
temos essa divisão, que é a primeira área de texto. Portanto, essa chamada SM six
define que essa é na verdade uma coluna
dessa linha dessa linha. Então esta é a primeira
coluna que corresponde a essa caixa de texto,
essa coluna aqui E então a próxima coluna,
que é essa aqui, contém a outra
caixa de texto e o botão. Portanto, área de texto significa
essa caixa de texto aqui, e a entrada com a classe BTN
significa esse botão aqui Então, área de texto, a
primeira área de
texto, área de texto, a segunda área de texto e insira o botão. É isso mesmo. Então, novamente, o formulário agora, você vê que ele tem uma propriedade de
ação, que tem essa tag de modelo
que eu escrevi aqui. Então, o que está acontecendo aqui é que quando o botão é pressionado, então esse
botão de envio é pressionado, algo vai acontecer. E o que acontece é que
esse URL será visitado. Isso não é um URL.
É o nome de um padrão de URL que
criaremos posteriormente. Você verá como isso funciona. E o método é um método de postagem, o
que significa que o usuário está enviando alguns dados e espera
receber de volta algum
processo de dados do servidor. O resto já explicamos. Então, as divisões e a área de texto com essa
classe bootstrap Linhas significa que ele tem três
linhas de texto por padrão, seja, uma, duas e
três linhas de texto. Então, a altura dessa área de texto. Esse nome
será usado posteriormente para se
referir a essa área de texto do
jango para obter o texto
dessa área de texto e
processá-la na selva, então temos outra área de texto e
o
botão de entrada com essa
classe do bootstrap,
o tipo é enviado, o que significa que quando
esse botão for pressionado,
esse formulário, o formulário Então, enviaremos os dados, o texto original
do usuário nesse caso, e o valor é o
nome do botão. Então envie, envie. E é isso. Tudo bem. Portanto, temos HTML, mas precisamos definir uma URL por meio da qual o usuário
acessará essa página
HTML específica da web. Então, vamos configurar os URLs
no próximo vídeo também.
223. Como obter e processar informações do usuário por meio de um formulário: Oi, bem vindo de volta. Anteriormente,
criamos essa página da web, que parece boa, mas
não está fazendo muita coisa por enquanto. Então, seja qual for o texto que
você digitar lá, você pressiona enviar e
nada acontece. Então, o texto desaparece. Então, vamos implementar isso. Mas primeiro, você
precisa entender as duas solicitações HTTP que
estão ocorrendo aqui. A primeira solicitação HTP é quando
o usuário insere a URL, digamos example.com
slash translate Slash ou esse IP do host local,
como neste caso,
e essa é e essa E essa solicitação está sendo
tratada por esse padrão de URL
e, claro, também por esse Então, esses dois são
mesclados em um URL, que é example.com
slash translate slash Mas também há outra
solicitação sendo feita, e é quando o usuário
pressiona o botão enviar Outra URL está sendo acessada, e essa é a
que você vê no tradutor dot HTML nesta
linha nesta linha aqui Então você vê que quando
o botão é pressionado, esse URL é visitado. Então, a visualização do tradutor, que, novamente, é a mesma URL, então
traduza a revisão, que corresponde a example.com
slash Então, atualmente, visitar
o URL por meio uma solicitação GT como essa quando você apenas atualiza o
navegador ou insere o URL e pressiona o botão
de envio leva o usuário
ao mesmo Precisamos mudar
isso. Precisamos separar as duas
solicitações e realizar ações
diferentes, dependendo se o usuário está fazendo uma solicitação get ou uma solicitação post. Quando o usuário faz
uma solicitação de postagem, queremos obter o
texto daqui e exibir a
versão em maiúsculas nessa outra caixa Então, vamos fazer isso.
O que precisamos fazer é
distinguir pontos de vista. Precisamos distinguir se o método
request dot
é uma solicitação de postagem. Se for esse o caso, queremos obter o texto
original ou
o texto de entrada que o
usuário insere aqui. E a forma como obtemos isso é por meio do objeto de solicitação
dot post e aqui, o que vem aqui? Bem, aqui devemos inserir
o nome dessa área de texto, que é no meu
caso, minha área de texto. Então, aqui, minha área de texto
entra como uma string. Então, se for esse o caso, faça isso ou retorne
a página como está. Caso contrário, significa se a
solicitação for uma solicitação get. Então, se for uma solicitação de postagem
por meio do botão, obtemos o texto original
da área de texto e vamos imprimi-lo
apenas para ver como ele se parece com o texto original. contrário, no caso
de uma solicitação get, apenas
retornamos a
página como está. Então, o tradutor dota HTML. Salvar. E vamos
ver a recarga primeiro E recebemos esse erro. Não tem método de atributo, porque deveria ser método. Desculpe. Salve e visite novamente. Translate é nosso UL Translate. E vamos escrever
algo, enviar. E vamos ver o que
temos agora no terminal. Então eu vejo que AAAA está
impresso, certo? Essa linha foi executada. Mas depois disso, recebemos um erro. Diz que o tradutor vê a
visão do tradutor. Portanto, essa visão, essa função de visualização não retornou um
objeto HTTP, o que é verdade. Então, recebemos uma solicitação de postagem quando pressionamos
o botão Enviar, mas não houve nada
retornado aqui. Então, devemos devolver alguma coisa. E isso também é uma chamada de função de
renderização, que recebe uma solicitação como
argumento para traduzir o HTML. E agora, também precisamos
passar outra coisa aqui, que é a saída. Até agora, vimos que isso funciona. Estamos recebendo os textos
do usuário com sucesso, mas queremos fazer
algo com esse texto. Por exemplo, digamos que, na saída, você vá para o texto original. Por enquanto, como dissemos, digamos que o
transformemos em maiúsculas Então o que passamos aqui
na função de renderização
é um dicionário, que é assim. Digamos que saída, texto. Portanto, essa é uma chave, uma string, e tem como valor a saída. Então, essa variável,
o texto em maiúsculas. Agora, salvamos isso e depois
vamos para o tradutor dot HTML. E nessa segunda área de texto, entre o primeiro ataque de área de
texto
e o ataque de fechamento da área de
texto, aqui colocamos uma variável de modelo, que é texto de saída. Então, essa coisa aqui. Então, o valor disso, na verdade, será
injetado nessa área de texto Vamos ver se
isso vai funcionar. Então, faça uma solicitação Get. Recebemos a página da web
com sucesso, escrevemos algo, enviamos e obtemos a versão em maiúscula
desse texto. Então está funcionando. Portanto, essa versão em maiúsculas
do texto veio
desse texto de saída E é assim que se usa formulários
HTML com o Jango. Agora, antes de encerrarmos este vídeo, quero mostrar um problema com nosso aplicativo. Então, como você pode ver, você escreve um
texto aqui, envia, mas o texto original
desaparece depois o usuário envia Então, vamos corrigir isso.
É muito fácil de fazer. Primeiro, vamos entender
por que isso está acontecendo. Então, se você acessar Views, novamente, temos I request equals
to post e, nesse caso, enviamos a saída de
volta para a página, mas não enviamos mais nada Então, essa será uma nova renderização. Ele renderizará as caixas de texto, as duas áreas
de texto do tradutor HML, mas uma delas
permanecerá vazia porque isso será uma atualização
da página, por assim Portanto, se você também
quiser ter o texto original
na página da web, o que você precisa fazer é adicionar um novo par aqui
no dicionário Digamos que isso
seria um texto original. Como uma corda. Então, a chave e o valor disso seriam o texto
original, a variável. Então, esse aqui. Copie essa string e vá
para o tradutor dot HTML. E aqui, na
primeira área de texto, colocamos uma variável de modelo. Dentro dele está o texto original. Então, assim como essa caixa de texto, também
temos essa. E tão fácil quanto isso, salve no HTML traduzido, salve as visualizações H dot PY também e o servidor reinicie Então, agora o servidor foi reiniciado. Portanto, sabemos que as alterações
são aplicadas agora, atualize a página,
escreva algo aqui,
envie, e tanto o texto
original quanto
o texto de saída permanecem
na página da web Isso completa a parte do jango. Portanto, temos um aplicativo web em funcionamento. E agora tudo o que precisamos
fazer é, em vez de capitalizar o
texto com maiúscula, traduzi-lo com
algum outro pacote Nesse caso, vamos usar o pacote Google Trans. Então, vamos fazer isso
no próximo vídeo. Obrigado por seguir
até agora. Nos vemos lá.
224. Preenchendo o aplicativo Tradutor: Bem-vindo de volta e
vamos dar o
toque final do nosso aplicativo. Atualmente, esse aplicativo retorna a
versão em maiúsculas de um texto Agora vamos traduzir qualquer
texto que o usuário insira aqui. Para fazer isso, abriremos um novo terminal para
instalar o Google Trans. Mas atualmente, no entanto, há um
problema com essa biblioteca, que pode ser
corrigido com a instalação de uma
versão Alpha da biblioteca, qual você pode instalar a versão Alpha usando
o que estou digitando agora Portanto, você pode tentar, não tenha
medo de experimentar nenhum desses. Então, ou o Google Trans
ou qualquer outra coisa que funcione. Portanto, se você instalar uma e experimentá-la, ela não funcionará, então instale a versão Alpha,
e essa versão Alpha
substituirá a
versão anterior que você instalou Portanto, nenhum dano foi causado. O que quer que funcione, use isso. Para mim, descobri que
essa versão funciona. Então, 4.0 0.0 dash R C uma execução. E sim, foi instalado. Então eu posso tentar usá-lo. Então, eu o instalei no
meu ambiente virtual. Portanto, tenha cuidado com
isso. Você vê NFR. Ele foi ativado quando eu o
instalei com o PIP. Então agora eu posso experimentar isso. Eu posso abrir um Python Shell. E a forma como isso funciona
é que você importa do Google Import a classe
tradutor Em seguida, você cria uma instância de
tradução. Usando essa classe de tradutor e , a partir dessa instância, você diz tradução que
traduz texto igual a. Digamos, como você
aprendeu Python entre aspas? Portanto, ele vem como uma string e um teste para o idioma de
destino. Digamos que DE para alemão, você pode encontrar essas abreviações
no Google, então abreviações no Google, então D significa alemão. E se você acessar o
texto a partir disso obterá a versão em alemão
desse termo, aquela frase. Então, a biblioteca está
trabalhando para mim. Agora eu quero escrever
esse código
em algum lugar do meu aplicativo jangle
no aplicativo tradutor Então, nesses casos, o que você quer fazer
é criar um arquivo separado dentro
do aplicativo tradutor, chamá-lo talvez de translate that PY Aqui dentro, você deseja importar do Google Import, tradutor O que queremos fazer é
talvez criar uma função, translate, que receba
um texto como parâmetro. Esta função será
usada dentro das visualizações PY. Vamos chamar
essa função aqui, que será mais ou
menos assim. Em dot Import, traduza. Então, a saída desta vez
será translate dot translate. O texto será o texto original. Então traduzir é essa função. Portanto, translate é um nome de módulo, então translate dot PY e
translate é uma função. Então, texto,
digamos tradutor,
igual ao tradutor, a instância,
depois tradução igual ao ponto
do
tradutor, traduzir
texto é igual ao texto,
destino é igual à string DE e, em seguida,
retorna texto
com ponto de tradução. Esse é um objeto de tradução e você precisa extrair a propriedade text dele
para obter a string real. Salve isso e salve isso também. E vamos experimentar o aplicativo. E está funcionando. Então, obtivemos a tradução em
alemão, como você pode ver. Certo. Por fim, eu também
queria adicionar um item de menu aqui para nosso tradutor agora, para que
possamos acessá-lo facilmente Para fazer isso, você deve
acessar o HTML base e copiar um desses, um imposto, copiá-lo e
colá-lo aqui. E então isso vai
ser tradutor. E este é o nome da URL que você
pode obter daqui, URL é PY, copie isso, vá para a base desse HTML,
cole lá, salve e aqui está o item. Então esse é o site. Isso conclui esse projeto
Jangle. Espero que você tenha aprendido com isso, e acredito que isso deve ser suficiente para você
começar com jango Então, abordamos algumas das funcionalidades mais importantes
do jango, que eram lidar com
bancos
de dados e obter a entrada
do usuário a partir dos formulários processar essa entrada
e , em seguida, retornar a
saída ao Então, muito obrigado por seguir
e nos vemos novamente. Tchau.
225. Demonstração do aplicativo 10: aplicativo web Geocoder +: Ótimo. Como você deve saber, estamos chegando ao
final do curso, e esta é a última seção
do curso em que você cria
seu décimo aplicativo Esse em particular é especial. O especial não
está no aplicativo em si, porque todo aplicativo
é realmente especial. O aspecto especial
desse aplicativo é que você o criará de forma independente. Então, isso está na
forma de um projeto. Você tem que construir
isso do zero. E você aprendeu todas as habilidades
ao longo do curso,
portanto, as habilidades necessárias para criar esse aplicativo
específico. E neste vídeo, o que eu
queria fazer é dar uma demonstração do que
esse aplicativo faz, e então você pode
começar a criá-lo imediatamente após este vídeo. Então, no próximo vídeo,
mostrarei a solução. Então, mostrarei o código no
vídeo e explicarei o que o código faz e
também a abordagem que usei para criar
o aplicativo. Mas não, eu poderia ter
gravado esses vídeos mesma forma que fiz com
os outros nove aplicativos do curso, mas eu realmente queria que você
fizesse algo sozinho, e isso serviria
para duas coisas. Uma é que você realmente
fará algo de forma independente e aprenderá
muito com isso. E a segunda, você pode
usar isso como um portfólio. Este é um aplicativo
web muito bom. Mas isso é difícil. Quer dizer, eu ficaria
surpreso em ver alguém fazendo isso funcionar 100%, a menos que você seja um
gênio. Eu realmente quero dizer isso. Mas você deve ser capaz
de fazer isso funcionar, digamos, em torno de 50%. Se você fizer com que funcione 50%, então você realmente
aprendeu com o curso. Então, o que quero dizer com 50%? Bem, você pode parar
em algum lugar e pedir ajuda. Talvez você tenha um erro e
não esteja conseguindo
entendê-lo e
resolvê-lo no futuro, ou simplesmente não
saiba o que fazer a seguir. Portanto, nesses cenários, você pode intervir e postar uma
pergunta na área de perguntas e respostas Então, na
área de discussão do curso. Eu vou dizer que não
me pergunte imediatamente. Quer dizer, eu gosto de perguntas, mas é bom que você
resolva os problemas sozinho. Você sabe, programar é difícil. Quero dizer, muitas vezes, tudo o
que você precisa é de uma pausa, como um café ou chá, para refrescar seu cérebro
e fazê-lo pensar melhor E então, de repente, você pode se deparar com
esse problema. Mas se isso não funcionar
, estou aqui para ajudá-lo. Basta deixar uma pergunta e
eu respondo em um dia. E minha recomendação agora
tente começar do zero. Não olhe
imediatamente para o código ou as palestras que
ministramos no curso Em vez de fazer isso, tente reunir seus pensamentos
em uma folha de papel. Anote algumas etapas,
como a primeira etapa, crie a
interface do usuário, a segunda etapa, um pedaço de script que fica com os dados e
gera uma saída
e, em seguida, crie o frasco, estrutura e assim por diante E então você
os implementa passo a passo. Se você estoca
então, não há problema em analisar os recursos. Eu faço isso o tempo todo. Então, agora, o que é esse aplicativo? Bem, esse é um aplicativo
FLASK que espera
do usuário um arquivo CSV, que deve ter pelo menos
uma coluna chamada endereço Por exemplo, aqui está um arquivo CSV. E você pode ver que temos
uma coluna de endereço lá, então o usuário deve ter uma coluna chamada endereço, com o
nome de endereço lá. Seja com um A
minúsculo ou maiúsculo, isso não importa. Portanto, você deve criar seu
aplicativo para reconhecer endereço com A minúsculo e o endereço com A. Agora, o usuário pode fazer o upload desse arquivo usando o botão escolher
arquivo E você pode ver que os supermercados
foram colocados lá. E depois que o usuário fizer o upload desse arquivo, ele pressionará enviar E essa tabela aparece. Então, quando o usuário
carrega esse arquivo, o back-end do seu aplicativo, script
Python lê esse arquivo e adiciona uma coluna de latitude
e longitude, que são calculadas a partir da coluna que são calculadas Então, estamos falando sobre geocodificação e você sabe como
fazer Você aprende isso no curso
na seção Pandas. E, como você pode ver, a
tabela de resultados é exibida
na página da web quando o usuário
pressiona o botão de envio, e você pode ver as
duas colunas lá E, por fim, você
também deseja permitir que o usuário baixe
a versão CSV Então, um arquivo que
contém esses dados. E, portanto, você precisa exibir um
botão de download aqui, como eu fiz. Então, quando o usuário
pressiona baixar, um arquivo é baixado.
Isso é um arquivo. Também temos algumas células vazias porque o Python não
conseguiu, então o
serviço de geocodificação não conseguiu
geocodificar esse endereço para latitude geocodificar esse endereço Então, sim, você precisa
contar para isso e apenas passar alguns valores não válidos
para essas células. Agora,
em breve você poderá ter problemas como, você sabe, se o usuário
enviar alguns outros arquivos, então vamos mudar isso para adicionar em vez de endereço,
e eu vou salvar isso Então, eu não tenho mais uma
coluna de endereço nesse arquivo, deixe-me fazer o upload
novamente. Assim. Enviar. E nesse caso, você deseja mostrar uma mensagem dizendo
que,
por favor,
certifique-se de ter uma coluna de endereço em seu arquivo CSV ou
algo parecido Portanto, você não quer que o programa
falhe para mostrar o
erro do frasco Então, sim, você
precisa tentar aceitar alguns erros lá.
E é isso. Nesse ponto, você
criou um serviço de geocodificação. Espero ter sido claro
com as explicações. Mas se você tiver dúvidas,
pergunte a elas. Desejo-lhe boa sorte
com este projeto. Vai ser difícil, mas divertido, e tudo gira em torno da persistência. Então, se você se comprometer a
fazer isso, você o fará. O próximo vídeo é perigoso porque eu vou te mostrar
a solução lá dentro. Portanto, assista
como último recurso ou assista para comparar sua
aplicação finalizada com a minha. Além disso, ao comparar sua solução com a minha, não espere que elas sejam
iguais. Eles nunca serão. Quero dizer, existem
maneiras diferentes de criar um aplicativo, e o meu pode ser
melhor que o seu ou
vice-versa. Então, por favor, tenha isso em mente. E sim, isso é o que
eu queria dizer. Espero que tenham gostado do meu curso. Também agradeço se
você deixou o comentário. Eu leio todas as avaliações e as agradeço muito. Então, sim, muito obrigado, e
eu vou falar com você mais tarde.
226. Parte 1 da criação do aplicativo web geocodificador: Ei, bem-vindo a
esta nova palestra, e espero que você tenha se
divertido
tentando criar o aplicativo de geocodificação Eu sei que deveria
ter sido difícil, mas se você já passou por um certo ponto,
isso também é ótimo. Nesta palestra agora,
você tem duas coisas. A primeira coisa é que você encontrará o anexo nos
recursos desta palestra. Lá você encontrará todos os arquivos que contêm o código
desse aplicativo da web. Especificamente, você
encontrará quatro diretórios, ou
seja, modelos estáticos, uploads e visuais, além de
um arquivo app dot py Agora, por acaso,
tenho quatro arquivos de aplicativos. Mas, basicamente, a
última é a versão final. Então, essa é uma versão muito básica,
na qual eu apenas adiciono algumas
funções no script Python, depois adicionei mais algumas a essas funções
e, em seguida, mais algumas, e então adicionei E então eu finalmente adicionei mais
um código que
completou o aplicativo. Então é isso que você ganha. E você encontrará isso em um arquivo zip. Então, por favor,
baixe isso. Sim, essa é a primeira coisa que
você verá nesta palestra, o arquivo zip do código
da solução E a segunda coisa é que vou explicar agora como abordo esse problema, e vou mostrar
o código e o que eu construo primeiro, segundo,
terceiro e assim por diante. Então, essas são as quatro versões. Eu tenho a versão um,
quando adicionei algum código, dois, três e quatro. Então, vamos ignorar isso
por um momento, porque a primeira coisa que quero
explicar é a interface do usuário. Então, começaremos primeiro
pelo front-end. Agora, a primeira coisa que
fiz, porém, foi criar uma estrutura de
diretórios. Então eu criei uma pasta estática
vazia, modelos e
uploads e virtual Portanto, estática e modelos são padrão para o aplicativo
FLASK E a pasta de uploads será apenas a pasta onde eu gero esses arquivos intermediários que o aplicativo disponibiliza
para download para os usuários Você verá isso daqui a pouco. Também criei esse laboratório de pastas
virtuais, que na verdade é o diretório
do ambiente visual. Então eu fiz isso com
Python com o sinalizador N Virtual Virtual para o
nome do diretório Portanto, se você executar isso,
obterá esse diretório com uma nova instalação do
Python e do PIP e de outras bibliotecas
integradas E então eu instalei
o
Flask e instalei o
Pandas porque você
precisará de pandas para ler
os dados que o usuário está enviando e você quer
calcular algumas colunas lá,
e você também precisa do Geopy para geocodificar esses E essas são as três bibliotecas de
terceiros que
você precisa instalar. Depois de criar esses diretórios
vazios
, a segunda etapa foi
criar a interface do usuário Então, o que eu fiz foi criar um modelo HEML de ponto de índice
na pasta de modelos Então, no começo, isso
foi bem simples. Então, não continha
muita coisa boa. Isso simplesmente continha, tipo, um título e alguns títulos
, além de um formulário básico E, inicialmente, eu não coloquei
nada em ação. Então, quando o usuário envia, eu tinha esse botão de envio e também tinha esse
tipo de entrada de arquivo Então, se você consegue se
lembrar do arquivo, isso é um formulário. Temos essa entrada de arquivo
e o botão de envio. Portanto, esses dois também restringiram o
envio de arquivos apenas para CSV E isso é um formulário. Eu não tinha isso
no começo, então não vou
explicar isso por enquanto. Vou falar sobre isso mais tarde.
Sim, essa era a interface. Mais tarde, criei
esse arquivo CSS principal. Então, aqui você encontra o
estilo CSS para a página da web. Eu não vou entrar nisso agora. Isso é bastante autoexplicativo. Então, fizemos CSS
no início do curso. E esse arquivo
também está incluído
nos recursos entre
os outros arquivos, mas nunca espero que
você tenha o mesmo estilo Então você pode ter algumas coisas
diferentes, algumas cores ou
tamanhos e assim por diante E então você vai
em frente e faz referência queda
do CSS para as tags de cabeçalho. Sim, basicamente, isso é o que
eu fiz na segunda etapa. Então, o primeiro passo é
criar um diretório e o segundo passo é criar a interface básica e adicionar
o pedágio CSS a ela Se você simplesmente criou
o código HTML
e, mais tarde, ao
concluir seu aplicativo, criou um arquivo CSS. Isso também está perfeitamente bem. Ou mesmo que você tenha começado diretamente com o arquivo Python,
tudo bem Alguns desenvolvedores começam pelo front-end e outros
pelo back-end. Está perfeitamente bem. Então, depois de ter a interface, fui em frente e
criei um arquivo de aplicativo. Portanto, um aplicativo para essas quatro versões serve apenas
para demonstração deste vídeo Então, criei
arquivos diferentes para mostrar os estágios pelos quais passei
para criar meu código final. Então, versão 1, isso é
o que eu fiz basicamente. Eu importei essas bibliotecas. Então, do FAS, importei
a classe FLASK usual e normalmente renderizei o método
de modelo para retornar modelos HML E eu sabia que minha inscrição envolvia algum envio de usuários, então alguma solicitação de postagem. Portanto, também incluí o método de
solicitação
e, em seguida, o método de arquivo enviado
, usado para enviar um arquivo
ao navegador para download. E sim, isso é sobre o FAS, e então queremos
geocodificar os dados, certo? Então eu o carrego do
Geo Pi para os codificadores, insiro a indicação
e também Depois de inserir
as dependências, criei
uma instância FAS aqui e, em seguida, três funções que, por enquanto,
não fazem nada Então, a primeira
seria a página inicial, como você está aqui com essa barra invertida E eu nomeio esse
índice, a função, e simplesmente retorno o modelo de
renderização. E, claro, aqui
vai o ponto de índice HML. Portanto, isso renderizará
a página inicial, que é HTML com pontos de índice Então, a próxima coisa que
você pode esperar é que o usuário
esteja na sua página da web. E quando o usuário
pressiona o botão escolher cair, seleciona um arquivo e clica em enviar O que você quer fazer quando
eles pressionam o botão de envio é agora carregar
esse arquivo em Python, lê-lo
como um quadro de dados do pandas
e calcular
uma coluna de coordenadas
onde calcula a latitude e longitude
da coluna latitude e longitude
da de endereço
usando geo Então, a partir da coluna de coordenadas, você deseja calcular a
latitude e a longitude Então, fizemos
isso anteriormente no curso
na seção do painel e, eventualmente, você deseja retornar um quadro de dados e enviar
esse
quadro de dados por meio de um método de modelo de
renderização. Você quer enviar esse
quadro de dados aqui embaixo. Então, o que estamos falando
aqui é sobre a criação de uma
função que faz tudo isso. Então, ele lê a queda CZ
e processa com painéis
e, em seguida, exibe a tabela A tabela ASO do quadro de dados. E eu criei a função Sutter e chamei a tabela de sucesso. Se você se lembra, isso deve
ter o
parâmetro methods igual a post porque estamos esperando
uma solicitação de postagem E então temos
outra função. Eu chamo esse download de outono. Então essa é a URL, tabela de traços de
sucesso e
esse é o nome de uma função Que temos outro URL
e outra função
anexados a esse URL. Então eu chamo isso de download. Como eu disse, toda vez que
o usuário faz alguma coisa, você quer criar um decorador e uma função anexada a ele Então, primeiro, o usuário
fará um envio e você deseja capturar
isso nesta função. Tabela de sucesso e, em seguida a próxima coisa que o usuário fará é pressionar o botão de download que
será exibido aqui embaixo. E isso tem que acionar
outra função em Python, e isso tem que acionar o método
send file em Python, que
possamos enviar o
arquivo para o usuário Isso significa que precisamos de outra
função aqui chamada download. Pelo menos foi assim que eu o chamei. De qualquer forma, vamos para a
versão dois nula. Então veja a diferença
aqui e aqui. A função de índice
permanece a mesma. Então, isso é tudo o que fazemos para
indexar. É bem simples. Simplesmente retornamos o
índice inicial que é o modelo de ML. E aqui eu adicionei uma
grande quantidade de código. E, basicamente, o que temos
é verificar a solicitação. Se recebermos uma solicitação de postagem
, recebo o arquivo
usando request dot falls, e o arquivo aqui é o nome. Todas as informações estão aqui. Então, sim, o que
acontece é que quando o usuário pressiona o
botão de envio que está aqui,
um URL é acionado
e, em seguida, esse URL é o URL
para a função de
tabela de sublinhados de sucesso Então, essa função
aqui. Isso significa que essa função será executada
e, em seguida, criaremos
um quadro de dados lá, que lerá
o outono deste outono que estamos recebendo do
usuário, do formulário do usuário. E então fazemos essa nomeação e criamos uma coluna de
dataframe Você sabe disso na seção de
pandas com o
método apply e, em seguida, aplica o
código geográfico à coluna de endereço E então, da coluna de
coordenadas, obtenho uma coluna de latitude e uso uma
função Lambda para extrair a latitude de cada uma
das linhas de coordenadas e também contar os valores
n lá E então eu não preciso
dessa coluna de coordenadas. Então, eu simplesmente descarto isso
usando o método drop e depois converto
isso em um CSV Aqui estou gerando um arquivo CSV. Essa é a saída que
queremos fornecer ao usuário. E estou classificando isso
na pasta de uploads. Então você só precisa
passar o caminho até lá,
o caminho relativo
carrega o Geocode É assim que estou chamando
isso. No momento , farei algo
mais avançado. Então, vamos chamá-lo de geocodificado
por enquanto, esse CSV. E então, o que
isso fará é retornar um modelo, então ele retornará o
índice desse modelo. Mas então, se você olhar aqui, deixe-me abrir isso
para outra visão. Sim, aqui temos uma divisão. Node o gengibre para a sintaxe
que estou usando lá. Então, estou incluindo
a variável BTN e estou ignorando quando
ela está faltando Agora, isso é diferente
daqui de cima. Aqui, estou retornando
HML como uma string. E aqui estou retornando
um modelo em HTML. Portanto, a sintaxe é diferente. E isso também é
diferente de quando usamos extend. Então, quando estendemos um layout, você estende um layout quando quiser que,
assim que o usuário visite, digamos que o índice
desse modelo HD Melt, o índice que a placa HM
Meltem
exibirá outros modelos HML Portanto, ele se estenderá
assim que o usuário visitar esse índice, não as páginas
HTML, a página inicial Isso é diferente
porque não
queremos que isso seja
exibido imediatamente. É por isso que você está
dizendo ignore o que está faltando, então ignore isso
quando estiver faltando. E inclua-o somente
quando o usuário estiver visitando esse URL da tabela de
traços de sucesso E quando o usuário visita
isso, quando o usuário pressiona enviar, depois de enviar um arquivo, você deseja renderizar esse modelo HTML de
download Então, o que isso contém
é um botão aqui. Você quer gerar um botão
lá, que deveria ser, você sabe, rue fall, submit. Então, sim, você obtém esse arquivo de
download e também
obtém a tabela HML Portanto, o quadro de dados
tem uma tabela HML. Então, a primeira linha,
a segunda linha, a primeira linha, a segunda linha. De qualquer forma, essa parte inferior agora está
anexada a uma referência, que sugere que, quando
o usuário pressionar download, o URL da
função de download do Python Então vamos aqui, e esse URL da
função de download será visitado Sei que o que queremos fazer
quando o usuário visita esse URL é retornar o método
Enviar arquivo. Na verdade, isso deve ser um
upload de CSV de pontos geocodificado. Então, queremos enviar ao
usuário o arquivo que
geramos aqui anteriormente
nesta função. Queremos enviar isso para o usuário com o
nome youfle dot CSV E também como anexo, você conhece esse código das
palestras anteriores E isso é sobre o
download desse modelo SML. E, basicamente, terminamos. Quero dizer, você pode se safar com esta versão do programa, e seria quase excelente
se você fosse tão longe. No entanto, podemos ter alguns
pequenos problemas com isso. O problema seria
se você escolher um arquivo,
um arquivo CZ que não tem
uma coluna de endereço dentro,
então uma coluna chamada endereço, então o que aconteceria é que
você seria capaz de carregar
esse arquivo como um quadro de dados
e, em seguida, quando você tentar
criar uma nova coluna no
quadro de dados chamada coordenadas,
e então você tentaria e, em seguida, quando você tentar criar uma nova coluna no
quadro de dados chamada coordenadas, acessar uma coluna existente chamada
endereço um Python lançará uma flecha e interromperá
o aplicativo Isso significa que quando o usuário
visitar o URL da tabela de sucesso, ele verá
uma página de erro. E isso não é muito
fácil de usar. Em vez disso, talvez você queira adicionar alguma funcionalidade aqui que
verifique se o quadro de dados, se é um arquivo
inserido pelo usuário, então você deseja ler o
arquivo como um quadro de dados. E então, no quadro de dados, verifique se você tem
uma coluna de endereço. Se você tiver um,
vá em frente e faça os cálculos. Mas se você não fizer isso,
devolverá algo ao usuário. Então, em vez de
retornar DF para HTML, você retorna uma mensagem
dizendo que, desculpe, você não tem essa
coluna ou o padrão Então, sim, eu vou te mostrar o código para isso na próxima
palestra. Então veja
227. Parte 2 da construção do aplicativo web geocodificador +: Ótimo. Estamos na versão dois, e vou tentar ser
rápido agora e mostrar versão três. Esta
é a versão três. A maneira como implementei essa funcionalidade em
que quero verificar se
há uma coluna de endereço
no quadro de dados é
adicionando uma instrução try and
expect. Então, basicamente, se você
pode ver
a diferença , eu pego o arquivo e tento
ler esse arquivo. Ou isso também pode estar
fora de uma palavra-chave try. Isso não seria um problema e C também estaria
fora de uma
palavra-chave try. No entanto, isso ainda é
melhor porque talvez você também queira verificar se há usuários enviando
arquivos que não são CSV Então, aqui estamos
verificando, na verdade, se o usuário está
enviando um arquivo CSV No entanto, isso significa apenas que o arquivo tem uma
extensão CSV de pontos na faixa do arquivo No entanto, isso não significa
que o arquivo seja realmente CSV. Então, você pode ter, digamos, um arquivo MP quatro e alterou a
extensão para CSV, mas ainda é
um arquivo MP quatro Então,
o que você quer fazer é incluir o DF dentro do bloco try
and expect Se o Python não conseguir
criar um quadro de dados a partir de um arquivo Epi, ele gerará Então, isso é o que realmente
acontece se você passar EpioUrfle, você não seria capaz de
lê-lo como um Então, sim, você quer
incluir isso aqui, então você retorna o mesmo, então eu não mudei
nada aqui. Você retorna o mesmo índice
de modelo em HML e envia o HML para
lá e o botão Exceto se houver um erro, o que você faz é retornar
o índice não HML,
mas, em vez
da tabela HML, você deseja retornar essa E, claro, você
não quer retornar nenhum botão de download
lá. R, isso deve bastar. E isso é sobre a versão três. Então essas foram as diferenças. Agora, a versão quatro,
o que eu tenho lá. Bem, se você ver aqui, temos essa queda de CSV geocodificada Agora, isso é uma corda. Isso significa que um arquivo CZ de
geocodificação será criado para todos os usuários que
enviarão dados Agora, isso pode causar alguns problemas, porque se dois usuários estiverem enviando
dados ao mesmo tempo, você pode ter alguns conflitos de
nomes Então, o que você pode fazer
aqui é usar um módulo datat para gerar nomes exclusivos para
cada arquivo gerado E foi isso que eu fiz.
Então, aqui está a versão quatro. Coloquei o módulo days
time aqui
e, em seguida, estou gerando o arquivo CSV
geocodificado aqui,
então DF para o nome do arquivo então DF para E eu tornei esse nome de arquivo
global aqui porque
também quero acessá-lo partir da
função de download aqui. Então, novamente, eu quero
gerar isso aqui, estou gerando um nome de arquivo. Em seguida, no nome do arquivo,
temos a string de upload, que apontará para o diretório em que
esse arquivo estará. E então temos a barra. E, na verdade, essa vantagem não
deveria estar lá. Então, logo após a barra,
temos o nome do arquivo. E isso seria, você
sabe, temos o ano, e então temos o mês
e depois o dia e depois a hora e os
minutos e segundos
e milissegundos. E então a
extensão CSV de pontos no nome do arquivo. Então, sim, isso
é único para cada usuário, porque temos
milissegundos lá Mas deixe-me mostrar como
isso se parece, na verdade. Então, novamente, o usuário
escolhe um arquivo, envia
e, quando pressiona enviar, um Python
gera o
quadro de dados e
também gera o Então, nesta linha aqui. E agora você pode encontrar esse
arquivo CC na pasta de uploads. Então isso foi gerado anteriormente, e esse é o arquivo. Esse é o arquivo que
acabamos de gerar. Então, quando o usuário
pressionar download, esse arquivo será baixado, mas com o nome do seu arquivo,
que é este aqui De qualquer forma, o que acontece é que a função obterá o
caminho do arquivo que deve ser
baixado no
navegador e obterá o nome de outono
dessa variável global É por isso que estou passando
isso como uma variável global para que eu possa acessar
o valor dela, que é gerado aqui, eu possa acessar esse valor
de outra função. E sim, essa é a minha versão
do aplicativo. Eu sei que isso não é
como a sua versão. Espero que você estivesse perto o
máximo possível, e seria ótimo se
você fizesse isso melhor do que eu. Em ambos os casos, tenho certeza que tentar resolver esse
aplicativo deveria ter melhorado suas
habilidades de resolução de problemas em Python, porque isso pelo
menos o posicionará, então definiremos seu nível, seu nível Python para
que você possa preencher
as lacunas que você realmente acha que
não são não Isso foi sobre essa
palestra, e nos vemos.