Curso completo de Python com 10 projetos do mundo real (NOVO) | Ardit Sulce | Skillshare

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Curso completo de Python com 10 projetos do mundo real (NOVO)

teacher avatar Ardit Sulce, Python Instructor, Founder of PythonHow

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Vídeo de introdução

      1:53

    • 2.

      Apresentando os primeiros passos

      1:39

    • 3.

      Instalando o Python e o IDE

      0:57

    • 4.

      Instruções de instalação no Windows +

      5:56

    • 5.

      Instruções de instalação no Mac +

      5:12

    • 6.

      Instruções de instalação no Linux +

      2:11

    • 7.

      Criando e executando um programa em Python

      9:29

    • 8.

      O que é Python, surpreendentemente?

      3:35

    • 9.

      Começando com o básico de Python

      1:39

    • 10.

      Variáveis: por que e como usar variáveis +

      6:05

    • 11.

      Usando o shell interativo em Python

      7:03

    • 12.

      Usando o terminal

      4:17

    • 13.

      Tipos simples: inteiros, strings e floats

      3:21

    • 14.

      Tipos de dados de lista

      1:31

    • 15.

      Usando intervalos

      5:18

    • 16.

      Quais são os atributos dos tipos de dados

      2:54

    • 17.

      Como descobrir qual código você precisa

      3:33

    • 18.

      Tipos de dados do dicionário

      3:43

    • 19.

      O que torna um programador um programador

      2:10

    • 20.

      Tipos de dados tuple

      2:26

    • 21.

      Como usar tipos de dados no mundo real +

      1:07

    • 22.

      Operações com tipos de dados

      0:55

    • 23.

      Mensagens de erro no Python 3.10

      4:00

    • 24.

      Fazendo mais operações com listas

      5:56

    • 25.

      Como acessar os itens da lista

      2:04

    • 26.

      Como acessar fatias de lista

      2:49

    • 27.

      Como usar índices negativos

      2:02

    • 28.

      Como acessar personagens e trechos em cordas

      1:30

    • 29.

      Como acessar itens em dicionários +

      1:52

    • 30.

      Mais conceitos básicos de Python: funções e condicionais

      1:39

    • 31.

      Como criar suas próprias funções +

      5:25

    • 32.

      Quando usar impressão e retorno +

      3:59

    • 33.

      Introdução às condicionais

      0:58

    • 34.

      Usando a condição If

      3:48

    • 35.

      Uma explicação condicional linha por linha

      3:09

    • 36.

      Mais informações sobre condicionais +

      2:21

    • 37.

      Usando a condição Elif

      1:15

    • 38.

      Espaço em branco +

      3:30

    • 39.

      Mais conceitos básicos de Python: processando a entrada do usuário

      0:38

    • 40.

      Aprendendo mais sobre a entrada do usuário

      7:55

    • 41.

      Formatação de cadeia +

      4:51

    • 42.

      Formatação de cadeia com múltiplas variáveis +

      4:17

    • 43.

      Introdução ao For Loops +

      0:59

    • 44.

      Como e por que usar o For Loops

      5:46

    • 45.

      Como percorrer um dicionário +

      1:12

    • 46.

      Como e por que usar While loops

      2:59

    • 47.

      Loops durante com entrada do usuário

      3:12

    • 48.

      While, break e continue +

      3:22

    • 49.

      Construindo um programa em Python

      0:59

    • 50.

      Declaração de problema em Python

      3:48

    • 51.

      Abordando o problema

      1:46

    • 52.

      Construindo a função de criador

      5:14

    • 53.

      Construindo o loop

      4:39

    • 54.

      Tornando a saída fácil de usar

      3:28

    • 55.

      Introdução à compreensão da lista

      0:50

    • 56.

      Uma compreensão simples de lista

      3:27

    • 57.

      Compreensão de lista com uma condição If

      1:22

    • 58.

      Compreensão de lista com uma condição “if-else” +

      1:37

    • 59.

      Mais sobre funções

      0:35

    • 60.

      Funções com vários argumentos

      1:45

    • 61.

      Parâmetros padrão e não padrão, argumentos da palavra-chave e não palavra-chave

      3:00

    • 62.

      Funções com um número arbitrário de argumentos que não são palavras-chave

      3:32

    • 63.

      Funções com um número arbitrário de argumentos de palavra-chave +

      1:34

    • 64.

      Introdução ao processamento de arquivos

      1:30

    • 65.

      Processando arquivos com Python

      1:12

    • 66.

      Lendo texto de um arquivo +

      3:07

    • 67.

      Cursor de arquivo

      1:49

    • 68.

      Como fechar um arquivo

      1:34

    • 69.

      Abrindo arquivos usando

      1:45

    • 70.

      Usando filearpaths diferentes

      1:25

    • 71.

      Como escrever texto em um arquivo

      3:59

    • 72.

      Anexar texto a um arquivo existente +

      3:30

    • 73.

      Módulos incorporados em Python

      5:53

    • 74.

      Módulos Python padrão

      8:34

    • 75.

      Módulos de terceiros

      6:28

    • 76.

      Um exemplo de módulos de terceiros

      2:45

    • 77.

      Introdução ao uso do Python com arquivos CSV, JSON e Excel

      0:35

    • 78.

      A biblioteca de pandas + análise de dados

      3:07

    • 79.

      Primeiros passos com pandas

      8:37

    • 80.

      Configurando o caderno Jupyter +

      9:05

    • 81.

      Como carregar arquivos CSV em Python

      4:20

    • 82.

      Como carregar arquivos do Excel em Python

      0:58

    • 83.

      Como carregar arquivos de texto em Python

      2:30

    • 84.

      Introdução ao Numpy++

      8:07

    • 85.

      Como converter imagens em matrizes Numpy

      5:40

    • 86.

      Indexando, fatiando e iterando matrizes Numpy

      4:07

    • 87.

      Empilhando e dividindo matrizes Numpy

      5:44

    • 88.

      Aplicativo 1: mapa da web com Python e HTML +

      1:05

    • 89.

      HTML e Python: como criar um mapa HTML com Python +

      11:35

    • 90.

      HTML e Python adicionando um marcador ao mapa

      8:23

    • 91.

      HTML e Python: usando loops forçados ao adicionar vários marcadores

      4:43

    • 92.

      HTML e Python: processamento de arquivos adicionando marcadores de arquivos

      13:06

    • 93.

      HTML e Python: manipulação de strings

      5:07

    • 94.

      Usando funções - criando uma função de geração de cores para marcadores ++

      7:55

    • 95.

      HTML e Python: como adicionar e estilizar marcadores

      1:53

    • 96.

      HTML e Python: trabalhando com dados JSON

      5:34

    • 97.

      Python e JSON: adicionando uma camada de mapa de população

      3:20

    • 98.

      Python e JSON: estilizando a camada de população

      9:34

    • 99.

      Python e JSON: adicionando um painel de controle de camada +

      6:23

    • 100.

      Aplicativo 2: Glossário de inglês +

      4:10

    • 101.

      Como entender seu conjunto de dados em Python +

      4:54

    • 102.

      Carregando dados JSON em Python

      3:52

    • 103.

      Como fazer o aplicativo retornar a definição de uma palavra

      3:25

    • 104.

      Como o aplicativo lida com palavras inexistentes

      2:51

    • 105.

      Como o aplicativo lida com palavras chamadas para maiúsculas

      3:09

    • 106.

      Como calcular a semelhança entre palavras

      4:39

    • 107.

      Encontrando as melhores combinações em uma lista de palavras

      6:07

    • 108.

      Como encontrar a palavra mais semelhante em um grupo de palavras

      9:42

    • 109.

      Como obter a confirmação do usuário

      10:17

    • 110.

      Como otimizar o resultado +

      7:51

    • 111.

      Como corrigir erros de sintaxe em Python

      8:22

    • 112.

      Como corrigir erros de tempo de execução em Python

      10:58

    • 113.

      Como corrigir erros difíceis

      5:38

    • 114.

      Como fazer uma boa pergunta de programação

      5:59

    • 115.

      Como o código manipula erros sozinho

      7:59

    • 116.

      Introdução à visão computacional com Python +

      2:29

    • 117.

      Carregamento, exibição, redimensionamento e criação de imagens ++ com OpenCV

      14:00

    • 118.

      Explicação do exercício anterior

      4:29

    • 119.

      Detectando rostos em imagens com OpenCv e Python

      19:38

    • 120.

      Capturando vídeo com OpenCv e Python

      19:45

    • 121.

      Aplicativo 3: aplicativo detector de movimento da webcam

      1:58

    • 122.

      Detectando objetos em movimento do webcamp com Python

      29:57

    • 123.

      Armazenando carimbos de data/hora de detecção de objetos em um arquivo CSV ++

      20:38

    • 124.

      Introdução à biblioteca Bokeh +

      2:02

    • 125.

      Criando seu primeiro enredo em estilo bokeh

      13:52

    • 126.

      Usando o estilo bokeh com pandas +

      4:51

    • 127.

      Criando um enredo de séries temporais +

      6:36

    • 128.

      Mais exemplos de visualização com Bokeh

      4:21

    • 129.

      Como plotar intervalos de tempo a partir dos dados gerados pelo aplicativo de webcam

      14:05

    • 130.

      Implementando um recurso de hover

      9:57

    • 131.

      Aplicativo 4 Parte 1 - Análise e visualizações de dados com Pandas e Matplotlib +++

      2:52

    • 132.

      Explorando o conjunto de dados com Python e pandas +

      9:17

    • 133.

      Selecionando dados com Python

      13:32

    • 134.

      Filtrando o conjunto de dados

      7:58

    • 135.

      Filtragem baseada em tempo

      9:55

    • 136.

      Transformando dados em informações

      11:00

    • 137.

      Agregando e plotando as avaliações médias por dia

      14:43

    • 138.

      Downsampling e classificação média por semana

      9:42

    • 139.

      Downsampling e classificação média de classificações por mês

      2:16

    • 140.

      Média das avaliações por curso por mês

      10:44

    • 141.

      Qual dia da semana as pessoas são mais felizes

      9:45

    • 142.

      Outros tipos de demarcações +

      6:06

    • 143.

      Aplicativo 4 (Parte 2): análise e visualização de dados com gráficos interativos no navegador

      2:55

    • 144.

      Criando um aplicativo web simples

      12:24

    • 145.

      Criando um aplicativo web de visualização de dados

      23:26

    • 146.

      Alterando os rótulos gráficos no aplicativo web

      2:59

    • 147.

      Adicionando um gráfico de séries de tempo ao aplicativo web

      5:20

    • 148.

      Várias séries temporais

      18:59

    • 149.

      Criando vários gráficos de fluxo de séries de tempo

      6:55

    • 150.

      Adicionando um gráfico de pizza ao aplicativo web +

      9:29

    • 151.

      Demonstração de aplicativo 5: desenvolvimento web com o Flask: criando um site pessoal

      1:41

    • 152.

      Seu primeiro site no Flask com aviso de servidor adicionado

      8:07

    • 153.

      Preparando modelos HTML +

      4:09

    • 154.

      Adicionando um menu de navegação do site

      8:32

    • 155.

      Melhorando o front-end do site com CSS ++

      5:59

    • 156.

      Criando um ambiente virtual em Python

      6:22

    • 157.

      Como usar o serviço PythonAnywhere

      7:47

    • 158.

      Implantando o aplicativo Flask no PythonAnywhere +

      7:52

    • 159.

      Introdução à biblioteca do Tkinter

      2:35

    • 160.

      Criando uma janela de interface gráfica e adicionando widgets

      9:11

    • 161.

      Como conectar widgets de GUI com funções ++

      9:32

    • 162.

      Como Python interage com bancos de dados

      3:00

    • 163.

      Como conectar um banco de dados SQLite em Python

      13:11

    • 164.

      SQLite: selecionar, inserir, excluir e atualizar registros SQL

      6:53

    • 165.

      Banco de dados PostgreSQL em Python

      8:46

    • 166.

      PostGreSQL: selecionar, inserir, excluir e atualizar registros do SQL

      12:51

    • 167.

      Aplicativo 6: aplicativo de inventário de livros

      2:25

    • 168.

      Projetando a interface do usuário

      5:54

    • 169.

      Programando a interface front-end

      13:28

    • 170.

      Programando o backend do aplicativo

      24:28

    • 171.

      Conectando o front-end com o back-end, parte 1

      17:30

    • 172.

      Conectando o front-end com o back-end, parte 2 ++

      21:59

    • 173.

      Criando arquivos executáveis .exe e .app a partir do script Python

      5:00

    • 174.

      O que é programação orientada a objetos (POO)

      4:59

    • 175.

      Usando OOP em um programa, parte 1

      13:01

    • 176.

      Usando OOP em um programa

      14:05

    • 177.

      Criando uma página de login de usuário

      21:55

    • 178.

      Criando um curso sobre conta bancária

      21:10

    • 179.

      Como criar cursos por herança

      12:08

    • 180.

      Glossário de OP+++

      8:12

    • 181.

      Aplicativo 7: demonstração de aplicativo móvel para se sentir bem +

      1:27

    • 182.

      Criando uma página de inscrição de usuário

      9:52

    • 183.

      Como capturar as informações do usuário

      6:25

    • 184.

      Processando inscrições de usuários +

      11:22

    • 185.

      Criando uma página de inscrição de sucesso

      4:27

    • 186.

      Alternar entre páginas

      2:55

    • 187.

      Processando as credenciais de login do usuário

      16:52

    • 188.

      Exibindo saída para o usuário +

      15:10

    • 189.

      Estilizando a página de login

      14:22

    • 190.

      Estilizando a página de inscrição

      1:11

    • 191.

      Tornando os botões interativos

      9:01

    • 192.

      Criando uma área para rolagem

      8:22

    • 193.

      Preparando o ambiente para implantar o aplicativo móvel

      13:10

    • 194.

      Criando um arquivo APK para Android

      10:29

    • 195.

      Instalando o arquivo APK no Android

      3:52

    • 196.

      Scraping na web com Python e Beautiful Soup

      1:57

    • 197.

      Como funciona o web scraping +

      4:30

    • 198.

      Exemplo de web scraping em Python

      16:22

    • 199.

      Aplicativo 8: demonstração do aplicativo de web scrapping ++

      2:28

    • 200.

      Carregando a página da web em Python

      7:15

    • 201.

      Extraindo elementos Div

      11:34

    • 202.

      Scraping os endereços das propriedades

      14:39

    • 203.

      Raspagem de elementos especiais

      12:06

    • 204.

      Salvando os dados extraídos em arquivos CSV

      8:26

    • 205.

      Rastreando várias páginas da web +

      17:15

    • 206.

      Aplicativo 9: Django e Bootstrap Blog e aplicativo Tradutor +

      10:56

    • 207.

      Configurando um ambiente virtual

      12:42

    • 208.

      Criando um projeto Django

      11:12

    • 209.

      Criando um modelo de banco de dados para o aplicativo de blog

      12:22

    • 210.

      Vistas em Djago

      4:41

    • 211.

      Padrões de URL

      15:16

    • 212.

      Criando visualizações da interface do administrador

      8:51

    • 213.

      Criando a página inicial

      7:32

    • 214.

      Criando a página Sobre

      2:44

    • 215.

      Listando postagens de blog na página inicial

      8:04

    • 216.

      Adicionando Bootstrap ao Django

      16:28

    • 217.

      Herança de modelo

      12:37

    • 218.

      Aplicando o estilo do Bootstrap ao menu de navegação

      4:14

    • 219.

      Demonstração do aplicativo de tradução Django

      3:11

    • 220.

      A etapa do desenvolvimento de aplicativos Django

      3:29

    • 221.

      Criando uma estrutura vazia de aplicativos para o aplicativo Tradutor

      2:39

    • 222.

      Criando um formulário Django

      7:45

    • 223.

      Como obter e processar informações do usuário por meio de um formulário

      10:09

    • 224.

      Preenchendo o aplicativo Tradutor

      6:12

    • 225.

      Demonstração do aplicativo 10: aplicativo web Geocoder +

      7:31

    • 226.

      Parte 1 da criação do aplicativo web geocodificador

      16:21

    • 227.

      Parte 2 da construção do aplicativo web geocodificador +

      5:51

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

117

Estudantes

--

Sobre este curso

Sobre este curso

Se você sempre quis aprender Python, mas não tem experiência anterior em programação, este curso é para você!

Ardit passou anos ensinando Python a iniciantes e desenvolveu uma abordagem prática baseada em projetos que torna o aprendizado divertido e prático. Você vai ganhar habilidades essenciais de programação enquanto trabalha em aplicativos reais, ajudando você a construir confiança e independência na codificação.

Neste curso, você aprenderá:

  • Fundamentos de Python, incluindo sintaxe, variáveis, loops e funções

  • Como construir 10 aplicativos do mundo real do início ao fim

  • Desenvolvimento web com Flask e Django

  • Técnicas de análise e visualização de dados

  • Desenvolvimento de aplicativos com GUI para desktop

  • Técnicas de web scraping para extrair dados de sites

  • Implantando aplicativos para servidores ao vivo e criando executáveis independentes

  • As melhores práticas para escrever código limpo, eficiente e de fácil manutenção

Você vai criar: um portfólio de 10 aplicações práticas, incluindo:

  1. Um gerador de mapa para vulcões

  2. Um detector de objetos usando feeds de webcam ao vivo

  3. Um site pessoal com Python e Flask

  4. Um aplicativo desktop de inventário de livros com um backend de banco de dados SQL

  5. Um painel de análise e visualização de dados

  6. Um aplicativo móvel compatível com Android e iOS

  7. Um web scraper no setor imobiliário

  8. Um aplicativo web baseado em formulários que coleta e envia e-mail dados do usuário

  9. Um aplicativo web de blog e tradutor criado com Django

  10. Um processador de arquivos Excel para gerenciamento de dados

Mesmo que você seja completamente iniciante na programação, vai achar essas técnicas passo a passo fáceis de acompanhar e aplicar aos seus próprios projetos!

Como encontrar os recursos conectados às aulas? 

Se você vir o nome de uma aula seguido por um sinal "+", verifique os arquivos anexados disponíveis neste link para encontrar um recurso com o mesmo número da aula com o sinal "+". Lá, você também vai encontrar o código-fonte dos dez aplicativos criados no curso.

Você também pode encontrar o Ardit aqui:
Site: https://pythonhow.com/

Conheça seu professor

Teacher Profile Image

Ardit Sulce

Python Instructor, Founder of PythonHow

Professor

Hi, I am Ardit! I am a Python programmer, and a top Python instructor on Udemy having taught over 500,000 students through my courses. I have used Python together with companies from various countries, such as the Center for Conservation Geography, to map and understand Australian ecosystems, image processing with the Swiss in-Terra, and performing data mining to gain business insights with the Australian Rapid Intelligence.

Teaching is my passion and you will find that I love to explain everything using real-world examples.

Happy learning!

Visualizar o perfil completo

Level: All Levels

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

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.