Conteúdo das reuniões


Livro interativo

O livro online é um material complementar que estamos preparando e pode ser seguido junto com as aulas para você aprender mais sobre computação. É necessário se cadastrar para acessá-lo.

  • Livro online

    • Cadastre-se usando a palavra pensamentos como código do livro.

reunião 27: 22/07/21 - Assista aos vídeos:

Mais uma vez, o assunto de hoje foram as tais matrizes (=tabelas bidimensionais em Python) representadas por listas de listas (list[list]). Hoje utilizamos o algumas funções do nosso módulo matriz.py de funções que manipulam matrizes.

reunião 26: 20/07/21 - Assista aos vídeos:

Continuamos a conversa sobre matrizes (=tabelas bidimensionais em Python) representadas por listas de listas (list[list]). Nosso principal foco foi em maneiras de criar, ler e percorrer uma matriz. Em particular, criar uma matriz representada por lista de lista é surpreendentemente embaçado… Usamos para isto uma função init_matriz() dada. Estamos construindo um módulo matriz.py com todas as nossas funções que manipulam matrizes.

  • Exercício: crie e exiba matriz para ver init_matriz() e str_matriz() trabalhando
  • Exercício: leia de arquivo e exiba imagem para ver leia_natriz(), exiba_matriz() e exiba_imagem() em serviço
  • Exercício: gire imagem para escrever funções gire_horizontal() e gire_vertical()
  • Exercício: rode imagem para escrever funções rode_dir() e rode_esq()
  • matriz.py: contém todas as funções que fizemos e cogitamos fazer, inclusive gire_horizontal(), gire_vertical(), rode_dir() e rode_esq()`
  • uma tentativa de init_matriz(): veja aqui a opinião do Python
  • outra tentativa de init_matriz(): veja aqui a opinião do Python
  • mais uma tentativa de init_matriz(): veja aqui a opinião do Python
  • mais uma outra tentativa init_matriz(): veja aqui a opinião do Python
  • ainda mais uma outra tentativa de init_matriz(): veja aqui a opinião do Python
  • nossa última tentativa de init_matriz(): veja aqui a opinião do Python
  • outra última tentativa de init_matriz(): veja aqui a opinião do Python
  • rabiscos e programas

reunião 25: 15/07/21 - Assista aos vídeos:

Começaremos a conversar sobre como representar matrizes (=tabelas bidimensionais em Python) através de listas de listas (list[list]). Nosso principal foco foi em maneiras de percorrer matrizes e em nos habituarmos com seus índices e suas posições.

reunião 24: 13/07/21 - Assista aos vídeos:

Hoje foi a nossa partida do reino dos dicionários (dict) encantados. Criamos, percorremos e modificamos dicionários. Fizemos um programa que responde consultas interativas: a função main() é a regente. O programa lê um arquivo como uma string (leia_arquivo()), como os primeiros 10 milhões de dígitos de π, cria um dicionário formado pelas fatias de comprimento k da string lida (init_dicionario()), percorre um dicionário para encontrar as chaves de maior valor (maior_valor()), cria um arquivo csv com o conteúdo de um dicionário (dict_para_csv()) e lê de um arquivo csv um dicionário (csv_para_dict()).

reunião 23: 08/07/21 - Assista aos vídeos:

Mais aventuras pelo reino encantado dos dicionários. Vimos ainda como ler o conteúdo de arquivos linha a linha com for linha in arquivo:.

  • Exercício: shell
  • shell.py: solução do exercício com um implementação da função init_dicionario()
  • Exercício: shell de luxe
  • shell_de_luxe.py: solução do exercício
  • shell_de_luxe_py.py: solução do exercício com mais funções nativas da linguagem Python: keys(), values(), items()
  • veja aqui um simulação que mostra chave in dict em ação
  • veja aqui uma simulação com a função init_dicio() da reunião passada
  • rabiscos e programas

reunião 22: 06/07/21 - Assista aos vídeos:

Passamos a caminhar no reino dos dicionários (dict) encantados. Vimos de relance alguns arquivos nascendo pela floresta: Criamos dicionários vazios com dicio = {}, consultamos se uma chave está no dicionário com if pal in dicio: ..., inserimos um novo par chave-valor no dicionário com dicio[pal] = 1, alteramos/atualizamos o valor associado a uma chave com dicio[pal] += 1, e percorremos as chaves de um dicionário com for pal in dicio: ...

  • Exercício: posição de um item
  • indice.py: implementação da função indice() do exercício
  • Exercício: frequências de palavras
  • dicio_palavras_list.py: dicionário implementado com duas listas em que as chaves são as palavras de um texto e os valores são as frequências das palavras no texto
  • dicio_palavras_dict.py: dicionário nativo do Python em que as chaves são as palavras de um texto e os valores são as frequências das palavras no texto
  • veja aqui uma simulação com um dicionário
  • rabiscos e programas

reunião 21: 01/07/21 - Assista aos vídeos:

Continuamos a tratar de strings e suas muitas semelhanças e diferenças com listas. Fizemos um programa que lê uma linha em que campos são strings separadas por vírgulas. A função principal que fizemos faz algo semelhante ao método split(): cria uma listas em que os itens são strings dos campos.

reunião 20: 29/06/21 - Assista aos vídeos:

Desta vez tratamos de strings (str) e suas semelhanças e diferenças com listas (list). Strings e listas podem ser manipuladas de maneiras muito semelhantes. Talvez a maior diferença entre essas duas coisas/objetos é que listas são mutáveis enquanto strings são imutáveis: se fizermos s[i] = 'X', BUUMM erro.

  • Exercício: contador de vogais
  • conte_vogais.py: um solução que percorre um string com for i in range(len(s)): ...s[i]
  • Exercício: contador de vogais de luxe
  • conte_vogais_de_luxe.py: contém uma receita para ler um texto de um arquivo, ainda conversaremos sobre isso
  • Exercício: arranca espaços
  • limpe.py: solução que percorre uma string com while, toma cuidado com validade do índices e ainda usa fatias; t = s.strip() é a versão nativa de Python equivalente a t = limpe(s)
  • veja aqui uma simulação em que uma string é percorrida com for ... in range() e em que é usado o operador in str
  • veja aqui uma simulação para enfatizar que strings são imutáveis
  • rabiscos e programas

reunião 19: 24/06/21 - Assista aos vídeos:

Hoje conversamos sobre apelidos e mutabilidade de listas. No exercício sobre o crivo de Eratóstenes trabalhamos sobre mutabilidade na função risque_multiplos(). Funções como essas que alteram a coisa ou objeto que recebem como argumento são chamadas de mutadoras.

reunião 18: 22/06/21 - Assista aos vídeos:

Começamos a tratar de uma ferramenta muito útil em Python que são as fatias de listas. Fatias nos levam a aprofundarmos nos conceitos de apelidos e clones, que terão um papel de destaque na próxima reunião. Na verdade, apelidos e clones presentes em absolutamente tudo que faremos doravante. No primeiro exercício fizemos uma função soma() que recebe uma lista e retorna a soma dos elementos de uma lista. Também fizemos uma função fatia() que recebe uma lista lst e dois inteiros ini e fim e constrói e retorna a fatia formada pelos itens lst[ini], lst[ini+1], ..., lst[fim-1]. Em seguide, vimos que Python tem a função nativa sum() para fazer o mesmo serviço que nossa função soma() e tem ainda fatias nativas que fazem o serviço da nossa função fatia(). Com a função sum() e listas nativas, fizemos no segundo exercício uma função que recebe uma lista e determina uma fatia de soma máxima. No final conversamos sobre apelido versus clones.

reunião 17: 17/06/21 - Assista aos vídeos:

Hoje vimos listas e funções trabalhando juntas. Conversamos sobre funções que recebem listas como argumentos ou que criam e retornam listas. Fizemos o mesmo exercícios que envolvia listas de notas e médias provas de duas formas diferentes; primeiro apenas com uma função main() e depois com a função main() e várias outras funções auxiliares. Também o comando de repetição for _ in range(inicio, fim, passo): ... foi apresentado a todas e todos.

  • esta simulação aqui foi usada para recordar o que vimos na semana passada sobre listas
  • Exercício: médias de provas
  • medias_sem_funcoes.py: exercício com lista e apenas com uma função main()
  • Exercício: médias de provas com funções
  • medias_com_funcoes.py: tem além da função main() as funções:
    • leia_nota() que retorna uma lista,
    • media_notas() que recebe uma lista e retorna a média de seus valores e
    • maiores_media() que recebe uma lista e uma valor val e retorna uma lista com os valores em notas que são maiores que val
  • veja aqui algumas simulações do comando for _ in range(inicio, fim, passo): ...
  • a simulação de um função que cria e retorna uma lista pode ser vista aqui.
  • rabiscos e programas

reunião 16: 15/06/21 - Assista aos vídeos:

Hoje conversamos sobre um conceito que nos dará mais asas: listas. Uma variável lista lst com n elementos é um apelido para um sequência de variáveis [lst[0], lst[1], lst[2], ..., lst[n-1]]. Isso nos permite resolver mais problemas de uma maneira bem compacta. O que ajuda muito é o fato de índice de lst poder ser uma variável. Hoje conversamos sobre:

  • lista vazia: lst = []
  • concatenação de lista: [4, True, None] + [1, 2, 3] == [4, True, None, 1, 2, 3]
  • comprimento de listas: len(lst) é o número de itens na lista lst
  • índice de listas: vão de 0 a len(lst)-1
  • Exercício: sequência invertida
  • inverte.py: listas, operador + de concatenação de listas, construção de listas, lista vazia, índices
  • Exercício: frequências
  • frequencias.py: operador * concatenação iterada de listas, por exemplo, 37 *[0]
  • veja essa simulação aqui
  • Rabiscos e programas

reunião 15: 10/06/21 - Assista aos vídeos:

O objetivo dessa reunião foi explorar funções com vários valores de entrada e saída e treinar o pensamento computacional para usar representações de dados diferentes. Para melhorar a precisão do resultado do cálculo do número harmônico Hn, sugerimos a mudança de representação de reais (em ponto flutuante) para frações. Por fim, apresentamos mais algumas dicas de como usar módulos em Python, com ajuda das funções dir() e help().


reunião 14: 08/06/21 - Assista aos vídeos:

Continuamos a explorar o conceito de funções, funções que recebem múltiplos parâmetros de entrada e funções que retornam mais de um valor. O uso dessas funções em seus programas pode ser realizado por meio de uma atribuição múltipla dos valores retornados.

Vimos também que a representação interna de números reais (usando ponto flutuante) é limitada, o que pode causar variações nos resultados por acúmulo e propagação de erros em somas e subtrações. Por causa dessa falta de precisão, é necessário considerar uma certa tolerância ao comparar números reais. Vimos que uma forma de minimizar a propagação de erros em somas é operar os números pequenos antes de incluir os valors maiores.


reunião 13: 01/06/21 - Assista aos vídeos:

Reforçamos o uso de funções em Python. Contrastamos o uso de programas com e sem funções e mostramos como reusar arquivos com funções previamente escritas em outros programas usando o comando import.


reunião 12: 27/05/21 - Assista aos vídeos:

Introduzimos o conceito de função como forma de melhorar a estrutura dos programas e mostramos como elas podem ser criadas e utilizadas em Python. Recomendamos que os programas que você desenvolver usando funções sigam o esqueleto de programa como sugerido.


reunião 11: 25/05/21 - Assista aos vídeos:

Demos mais um passo na combinação das ideias vistas até aqui. A decomposição de problemas visa simplificar problemas até conseguirmos resolvê-los. Isso se aplica também a repetições, que podem ser encaixadas ou seja, colocadas uma dentro de outra.


reunião 10: 20/05/21 - Assista aos vídeos:

O contexto de um bloco de programa é definido pelas variáveis utilizadas nesse bloco. Escolher as variáveis e definir o comportamento de cada uma é fundamental para resolver os problemas computacionais. Um truque bastante útil é utilizar indicadores de passagem, as vezes chamadas de bandeiras (do inglês flags).
O comportamento de uma bandeira é indicar que um evento ocorreu ou não. Essa informação é compacta e pode ser facilmente utilizada em outros blocos do programa.


reunião 09: 18/05/21 - Assista aos vídeos:

Nessa reuniãos começamos a combinar comandos de repetição com alternativas, ainda de forma simples para treinar a decomposição do pensamento. A linguagem natural é ambígua e, assim como nas ciências, os exemplos em geral revelam e esclarecem o enunciado. O entendimento do problema em geral passa por um entendimento dos exemplos fornecidos e a capacidade de generalizar a partir de poucos exemplos.


reunião 08: 13/05/21 - Assista aos vídeos:

Discutimos testes. Pensar nos testes é importante para saber quais os elementos delicados que podem “bugar” um programa e que merecem um cuidado maior. Quando o programa “não funciona”, repensar e imaginar outras soluções pode ajudar. Continuamos a falar sobre o comando while e mostrar que vários problemas podem ser resolvidos basicamente seguindo a mesma estrutura iterativa, onde a cada iteração o programa se aproxima mais do resultado, calculando, por exemplo, uma somatória.


reunião 07: 11/05/21 - Assista aos vídeos:

Introduzimos mais um fundamento computacional: o raciocínio iterativo. Para isso, introduzimos o comando de repetição while.


reunião 06: 06/05/21 - Assista aos vídeos:

Hoje continuamos a discurtir sobre como pensar e organizar alternativas para solucionar problemas computacionais por meio dos comandos if, if-else e if-elif-else.


reunião05: 04/05/21 - Assista aos vídeos:

Hoje discutimos mais detalhes sobre as expressões lógicas e a precedência de expressões com operadores aritméticos, relacionais e lógicos. Começou a introduzir formas de pensar em problemas com alternativas usando os comandos if e if-else.


reunião 04: 29/04/21 - Assista aos vídeos:

Hoje introduzimos:

  • expressões relacionais, que permitem comparar valores (como igual, diferente, maior, menor etc.); e
  • expressões lógicas, que permitem combinar várias comparações, usando os operadores and, or e not.
  • o operador % resto de divisão.

Os seguintes exercícios foram utilizados:


reunião 03: 27/04/21 - Assista ao vídeo:

Hoje apresentamos o conceito de variável e alguns comandos básicos de programação em Python:

  • Comando de atribuição: =
  • Função de saída de texto: print()
    • Tipo texto ou string delimitado apóstrofes ’ ou aspas " (tanto faz)
    • formatação usando um f no início da string: f" {var1} e {var2}"
  • Função de entrada de texto: input()
  • Função que revela o tipo de um objeto ou variável: type()
  • Funções de conversão de tipo: int(), float()

Começamos a usar o iPython no Spyder.


reunião02: 22/04/21 - Assista aos vídeos:

Hoje apresentamos o Nano para entender conceitos sobre linguagens de programação de alto e baixo nível, compiladores e interpretadores, e o que é programação e computação. Também batemos muito papo sobre computadores.

Para a próxima reunião:


reunião 01: 20/04/21 - Assista aos vídeos:

Parte 1 e Parte 2

Apresentamos o curso e testamos algumas ferramentas que gostaríamos de usar, como as enquetes e salas de reunião.

Modifié le: jeudi 22 juillet 2021, 12:20