Return to Video

01ps-01 General Concepts Solution

  • 0:00 - 0:04
    Olá, eu sou Peter Chapman, instrutor assistente
  • 0:04 - 0:08
    deste curso de linguagens de programação, "Construindo um web browser".
  • 0:08 - 0:11
    Pode ser que você já tenha me visto nos foruns e gerenciando
  • 0:11 - 0:14
    o curso de modo geral. Mas uma das principais coisas que vou fazer,
  • 0:14 - 0:18
    ajudando você a aprender neste curso, é explicar as respostas dos exercícios.
  • 0:18 - 0:22
    Dito isto, vamos começar com o primeiro nosso primeiro problema, da 1a. lista de exercícios.
  • 0:22 - 0:28
    É uma questão de múltipla escolha sobre conceitos gerais desta primeira unidade.
  • 0:28 - 0:33
    A opção 1 diz: "Páginas web podem controlar seu comportamento e aparência
  • 0:33 - 0:35
    por meio de código JavaScript embutido nelas".
  • 0:35 - 0:38
    Isso de fato é verdade.
  • 0:38 - 0:42
    Quase toda página web que você vê todo dia
  • 0:42 - 0:46
    tem milhares de linhas de JavaScript, que tornam a página mais legal e interativa, e mais rápida.
  • 0:46 - 0:49
    Se você visitar o nosso site, sem que JavaScript esteja habilitado,
  • 0:49 - 0:51
    não poderá fazer quase nada.
  • 0:51 - 0:54
    Nada iria carregar. Nada seria interativo.
  • 0:54 - 0:58
    E não é exagero dizer que JavaScript é a base
  • 0:58 - 1:00
    de aplicações web modernas.
  • 1:00 - 1:04
    Opção 2: Enquanto sentenças em inglês podem ser quebradas em palavras,
  • 1:04 - 1:06
    HTML e JavaScript não podem".
  • 1:06 - 1:08
    Isso é falso.
  • 1:08 - 1:12
    Vejamos um trecho de HTML para mostrar porque.
  • 1:12 - 1:17
    Aqui, podemos quebrar este trecho HTML em partes menores,
  • 1:17 - 1:20
    ou seja, o início da tag bold,
  • 1:20 - 1:24
    o o próprio texto, isto é, "Irvin", e o final da tag bold.
  • 1:24 - 1:27
    Individualmente, cada uma dessas coisas tem um significado,
  • 1:27 - 1:34
    do mesmo modo que esta sentença acima. A palavra "and" (e)
  • 1:34 - 1:40
    significa que `não podem' aplica-se tanto a JavaScript como a HTML.
  • 1:40 - 1:42
    Algumas dessas palavras têm significado semântico.
  • 1:42 - 1:44
    Outras determinam a estrutura sintática.
  • 1:44 - 1:50
    De qualquer modo, são palavras; apenas pertencem a linguagens diferentes.
  • 1:50 - 1:54
    Opção 3: "Para todo programa Python que usa re.findall(), existe um outro
  • 1:54 - 1:59
    programa Python que não usa re.findall mas obtém os mesmos resultados".
  • 1:59 - 2:01
    Essa afirmação é verdadeira.
  • 2:01 - 2:06
    Antes de lidar com re.findall(), vamos pensar num exemplo alternativo e raciocinar sobre ele.
  • 2:06 - 2:10
    Digamos que, ao invés de querermos encontra tudo, queremos apenas encontrar um.
  • 2:10 - 2:14
    Isto é, dada uma expressão regular e um texto de entrada,
  • 2:14 - 2:17
    queremos determinar se o texto casa
  • 2:17 - 2:20
    exatamente com a expressão regular. Podemos fazer isso
  • 2:20 - 2:23
    usando as ferramentas que desenvolvemos nesta unidade, em particular,
  • 2:23 - 2:25
    a função fsmsim.
  • 2:25 - 2:29
    O que temos que fazer é criar uma representação de um autômato de estados finito
  • 2:29 - 2:33
    para essa expressão regular. E isso é bem fácil.
  • 2:33 - 2:37
    Então processamos o texto de entrada com este autômato, usando fsmsim.
  • 2:37 - 2:40
    Portanto, você teria que representar o autômato usando o dicionário
  • 2:40 - 2:44
    que descrevemos na aula e, se o processamento do texto de entrada termina em um estado de aceitação,
  • 2:44 - 2:48
    então podemos dizer que casa.
  • 2:48 - 2:53
    É assim que usamos fsmsim para determinar o que casa com uma expressão regular.
  • 2:53 - 2:55
    Mas findall() faz algo um pouco diferente.
  • 2:55 - 2:57
    Digamos que você tenha este código.
  • 2:57 - 3:00
    Este comando toma uma expressão regular que casa com números,
  • 3:00 - 3:04
    e um string de entrada que contém dois número, 12 e 34.
  • 3:04 - 3:07
    O que findall retorna é assim:
  • 3:07 - 3:10
    ele retorna dois strings, 12 e 34.
  • 3:10 - 3:13
    Podemos usar fsmsim para fazer um casamento.
  • 3:13 - 3:16
    Se dermos apenas o string "12", então ok.
  • 3:16 - 3:20
    Mas queremos dar uma interpretação um pouco diferente, usando findall,
  • 3:20 - 3:23
    e ainda assim podemos usar fsmsim para fazer isso.
  • 3:23 - 3:27
    Digamos que temos nossa `caixa preta' fsmsim.
  • 3:27 - 3:31
    E que ela tem uma representação para esta expressão regular.
  • 3:31 - 3:34
    Temos também um string, que consiste de 5 caracteres.
  • 3:34 - 3:38
    O que vamos fazer é dar como entrada o primeiro caractere
  • 3:38 - 3:41
    para o nosso simulador fsmsim.
  • 3:41 - 3:44
    `1' casa com a expressão regular,
  • 3:44 - 3:48
    então, temos um `match` com `1'.
  • 3:48 - 3:52
    Para casar strings maiores, vamos tentar adicionar mais um caractere,
  • 3:52 - 3:55
    dando como entrada `12' para nosso simulador de expressão regular.
  • 3:55 - 3:58
    `12' casa -- muito bem.
  • 3:58 - 4:00
    Agora vamos tentar `12+'.
  • 4:00 - 4:06
    `12+' não casa. Portanto, descobrimos que `12' é o maior
  • 4:06 - 4:10
    prefixo que casa com esta expressão regular, e será então um dos nossos resultados.
  • 4:10 - 4:14
    Agora voltamos, e tentamos `+'.
  • 4:14 - 4:16
    `+' não casa.
  • 4:16 - 4:18
    Então tentamos `+3', que também não casa.
  • 4:18 - 4:22
    Isso não é um número. E `+34' também não casa.
  • 4:22 - 4:25
    Então desistimos de `+' e tentamos apenas `3'.
  • 4:25 - 4:28
    `3' casa. Então tentamos o `4'.
  • 4:28 - 4:32
    `34' casa, e como não temos mais caracteres na entrada, terminamos.
  • 4:32 - 4:36
    E é assim que você pode usar fsmsim para simular
  • 4:36 - 4:38
    exatamente a mesma funcionalidade de findall.
  • 4:38 - 4:42
    Opção 4: "Toda expressão regular que não envolva
  • 4:42 - 4:47
    + ou * casa um um conjunto finito de strings".
  • 4:47 - 4:49
    Isso é verdade.
  • 4:49 - 4:51
    Nas expressões regulares que definimos na aula,
  • 4:51 - 4:56
    o único mecanismo de repetição é por meio de + ou *.
  • 4:56 - 4:59
    Podemos usar outros mecanismos, como | (ou)
  • 4:59 - 5:03
    ou ? (opcional), mas isso não nos dá
  • 5:03 - 5:08
    os recursos que obtemos com os operadores de repetição.
  • 5:08 - 5:10
    Posso enumerar vários tipos diferentes na minha expressão regular,
  • 5:10 - 5:14
    vários strings diferentes, mas nunca um número infinito deles.
  • 5:14 - 5:17
    Portanto, se você não tem + ou *,
  • 5:17 - 5:19
    você está limitado a um conjunto finito de strings.
  • 5:19 - 5:23
    Pode ser um conjunto finito muito grande, mas ainda será finito.
Title:
01ps-01 General Concepts Solution
Description:

01ps-01 Conceitos Gerais - Solução

more » « less
Video Language:
English
Team:
Udacity
Project:
CS262 - Programming Languages
Duration:
05:24
Lucilia Figueiredo added a translation

Portuguese, Brazilian subtitles

Revisions