Gravações, rabiscos, exercícios e programas das reuniões anteriores
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.
-
- 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.
- Exercício: conte minas para escrever uma função
cont_minas()
- Exercício: campo minado para escrever uma função
init_mapa()
campo_minado.py
contém solução dos exercícios- rabiscos e programas
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()
estr_matriz()
trabalhando - Exercício: leia de arquivo e exiba imagem para ver
leia_natriz()
,exiba_matriz()
eexiba_imagem()
em serviço - Exercício: gire imagem para escrever funções
gire_horizontal()
egire_vertical()
- Exercício: rode imagem para escrever funções
rode_dir()
erode_esq()
matriz.py
: contém todas as funções que fizemos e cogitamos fazer, inclusivegire_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.
- Exercício: matrizes simétricas para escrever uma função
simetrica()
simetrica.py
: verifica se uma matriz é simétrica percorrendo a matriz linha por linha- Exercício: linhas iguais a val para escrever uma função
linhas_val()
linhas_val.py
: conta o número de linhas que possui apenas um dado valor- Exercício: colunas iguais a val para escrever uma função
colunas_val()
colunas_val.py
: conta o número de colunas que possui apenas um dado valor- Exercício: diagonais iguais a val para escrever uma função
diagonais_val()
diagonais_val.py
: retornaTrue
se nas diagonais principal e secundaria todos os elementos são de um dado valor- veja aqui uma simulação simples que mostra como estamos representando as matrizes
- rabiscos e programas
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()
).
- Exercício: shell2 para escrever uma função
init_dicionario()
- Exercício: shell2 plus para escrever uma função
maior_valor()
- Exercício: shell2 de luxe para escrever uma função
csv_para_dict()
shell.py
: contém uma solução de todos os exercícios- rabiscos e programas
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çãoinit_dicionario()
- Exercício: shell de luxe
shell_de_luxe.py
: solução do exercícioshell_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çãoindice()
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 textodicio_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.
- Exercício: maior prefixo
prefixo.py
: uma solução do exercício, constroi e retorna uma string- Exercício: leitora csv
split.py
: lê uma linha em que os campos estão separados por vírgulas e exibe cada um dos campossplit_de_luxe.py
: lê uma arquivo em que cada linha tem campos separados por vírgulas- rabiscos e programas
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 comfor 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 comwhile
, toma cuidado com validade do índices e ainda usa fatias;t = s.strip()
é a versão nativa de Python equivalente at = limpe(s)
- veja aqui uma simulação em que uma string é percorrida com
for ... in range()
e em que é usado o operadorin 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.
- Exercício: risque multiplos
risque.py
: solução com a função mutadorarisque_multiplos()
- Exercício: crivo de Eratóstenes
eratostenes.py
: solução com as funçõesmain()
,eratostenes()
erisque_multiplos()
- veja aqui uma simulação com uma função mutadora
- rabiscos e programas
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.
- Exercício: soma e fatia
soma_fatia.py
: solução do primeiro exercício, tem a fuçõessoma()
efatia()
- Exercício: fatia de soma máxima
somamax.py
: encontra uma fatia de soma máxima usando a funçãosum()
e fatias nativas do Python- veja aqui uma simulação da nossa função
fatia()
- veja aqui uma simulação das fatias nativas e a diferença entre apelidos e clones
- rabiscos e programas
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çãomain()
- Exercício: médias de provas com funções
medias_com_funcoes.py
: tem além da funçãomain()
as funções:leia_nota()
que retorna uma lista,media_notas()
que recebe uma lista e retorna a média de seus valores emaiores_media()
que recebe uma lista e uma valorval
e retorna uma lista com os valores emnotas
que são maiores queval
- 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 listalst
- índice de listas: vão de
0
alen(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
.
- Slides em pdf
- Rabiscos em pdf
- Exercício: potência: vamos resolver na próxima reunião.
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
enot
. - 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.
- Slides [PDF]
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.
- Slides - Exercício Nano Computador
- Slides - Pensamento Computacional [PDF] – fim da introdução
Para a próxima reunião:
reunião 01: 20/04/21 - Assista aos vídeos:
Apresentamos o curso e testamos algumas ferramentas que gostaríamos de usar, como as enquetes e salas de reunião.
- Slides - Bem Vindos
- Leia o Capítulo 1 - Pensamentos [PDF]
- Siga as instruções do Laboratório para instalar Python no seu computador.