Notas de Aula: Python [Introdução à Informática para Automação]
Roteiro original: http://jomi.das.ufsc.br/das5334/roteiro-aulas-python.html
Cada "aula" especificada abaixo pode durar mais de uma aula no laboratório.
Conteúdo
Aula 2 (introdução ao Turtle)
Conceitos
- linguagem programação
- turtle http://www.python.org/doc/current/library/turtle.html
- características (controla tartaruga; desenha na tela; …)
- comandos forward, right, penup, pendown, color, reset
- linux, idle, prompt do python
Exemplo Turtle
from turtle import * forward(10) color("Green") forward(20) right(90)
Exemplo random
from random import * randint(10,20) forward(randint(10,200))
Exercícios
- Fazer um programa para desenhar um quadrado de lado 50
- Fazer um programa para desenhar um quadrado de lado 100
- … em um lugar aleatório da tela
- … pintar 2 quadrados em lugares aleatórios
- … pintar um quadrado de verde e outro de vermelho
- pintar 3 quadrados …
- fazer rotinas para figuras a serem utilizadas no desenho de uma casa
Observações
- goto só vai (não sorteia)
- randint só sorteia (não vai)
- deixar rotinas para próxima aula
Aula 3 (variáveis e parâmetros)
Revisão
- conceitos vistos na última aula
- lunix, python, idle
- programa em python
- comandos para controlar a tartaruga
- parâmetro
- …
- Programação é a arte de programar. Beleza é fundamental!
- modularização
Objetivo
- parâmetros nas rotinas
- variáveis para guardar valores
- repetição simples
Programa 1
ver os programas de pintar casa que deveriam ser feitos depois da última aula (versao de agendas fixas e com agendas parametrizadas)
apresentar variáveis, rotinas e repetição numa rotina para retângulos.
from turtle import * from random import * def quadrado(x,y,t): penup() goto(x,y) pendown() for _ in range(4): forward(t) right(90) speed(0) quadrado(10,10,40) x = randint(10,150) y = randint(40,100) lado = randint(50,100) color("black", "red") begin_fill() quadrado(x,y,lado) end_fill()
Programa 2
a) desenhar _|-|_|-|....
[notar a repetição]
b) ir aumentando o tamanho das barras (de um delta) [que deve ser uma variável] [ou um valor dado em função do i do for]
Exercícios
Fazer rotinas com parâmetros para:
a) desenhar um triângulo equilatero com topo na posição (x,y) e de tamanho m. Exemplo:
triangulo(10,10,40)
b) Desenhar um polígono de n lados, cada segmento de tamanho t. Dica: o ângulo é dado por 360/nro de lados.
poligono(10,3)
c) re-escreva a rotina triangulo para usar a rotina polígono
d) fazer uma rotina para desenhar um triangulo de altura h e base b na posição (x,y)
e) desenhar as figuras
from turtle import * def quadrado(tam): for _ in range(4): forward(tam) right(90) speed(0) quadrado(100) def espiral(tam): for _ in range(18): quadrado(tam) right(20) espiral(100)
[obs.: figura difícil… programa pequeno!]
Aula 4 (condicional)
Revisão
- Evitar repetição de código
- usando for
- usando def
- Rever soluções para o triângulo isósceles
- mesmo problema e várias soluções (na tela é tudo igual, mas o programa pode ser bem diferente)
- destacar uso de parâmtros
Objetivo
- condicional
- expressões booleanas
Exemplo 1
from turtle import * from random import * def anda(): for _ in range(100): forward(4) right( randint(-50,50) ) x,y = pos() if x > 20: color( ( 255,0,0) ) # define vermelho usando RGB if x > 40: color("blue") if x <= 20: color("red") speed(0) shape("turtle") colormode(255) # para usar cores em RGB anda()
(obs.: "otimizar" os ifs com else)
(obs.: mostrar dir e help)
Exercício 1
Fazer a tartaruga andar aleatoriamente na tela mas ficar limitado horizontalmente entre -100 e 100.
Exercício 2
Idem, mas ficar dentro de um quadrado
Exercício 3
Fazer a tartaruga mudar de cor a cada 30 passos.
Exercício 4 (a)
Cada vez que a tartaruga cruzar para o lado esquerdo (x < 0) ou direito (x > 0) da tela, mudar de shape da seguinte forma: primeira mudança para "circle", segunda mudança para "square", terceira para "turtle", quarta para "circle", ….
Exercício 4 (b)
Fazer a tartaruga ter forma "turtle" quando estiver indo par ao norte e "circle" quando estiver indo para o sul.
Exercício 5
Procure na literatura todos os operadores relacionais que podem ser usados no Python.
Exercício 6
Procure na literatura todos os operadores lógicos que podem ser usados no Python e como eles funcionam.
Aula 5 (revisão)
- rever conceitos
- corregir exercícios 3 e 4(a) discutindo as soluções possíveis
- variável de estado
- testes (expressões lógicas vs aritméticas)
Exercício 1
Re-escreva os programas abaixo para remover a repetição de código e torna-los mais bonitos.
a)
print(1) print(1) print(1) print(1) print(1)
b)
print(1) print(1) print(1) print("a") print(1) print(1) print(1)
c)
print(1) print(2) print(3) print(4) print(5) print(6)
d)
print(1,6) print(2,5) print(3,4) print(4,3) print(5,2) print(6,1)
e)
print(1) print(2) print(3) print("a") print(4) print(5) print(6) print("a") print(7) print(8) print(9) print("a")
f)
print(1) print(2) print(3) print("a") print(1) print(2) print(3) print("a") print(1) print(2) print(3) print("a")
g)
print(1) print(2) print(4) print(8) print(16) print(32)
h)
print(1) print(1) print(2) print(3) print(5) print(8) print(13) print(21) print(34) print(55) print(89)
Aula 6 (loops)
Reescreva os seguintes programas usando while
a)
for i in range(100): print(i)
b)
for i in range(0,100,2): print(i)
c)
for i in range(100, 0, -1): print(i)
d)
for i in range(10): for j in range(10): print("{}*{}={}".format(i,j,i*j))
f) Faça um programa que imprime todos os números primos menores que 1000.
Aula 7 (gráficos)
Exemplo
from turtle import * speed(0) for x in range(400): y = sin(x/10.0)*10 goto(x,y)
Exercício 1
Faça a tartaruga desenhar uma parábola
Exercício 2
Considere 12 valores armazenados em 12 variáveis, faça a tartaruga desenhar os seguintes gráficos:
a) de linha
b) de barras (histograma)
Aula 8 (listas)
Conceito
Exemplo
Refazer o gráfico de barras da aula anterior usando uma lista com os 12 valores
Exercícios
a) Sendo s1 = [2,1,4,3] e s2 = ['c', 'a', 'b'], qual o resultado das seguintes operações?
- s1 + s2
- 3*s1 + 2*s2
- s1[ 1 ]
- s1[2 ** 2 - 1]
- s1 + [s2[-1]]
- s1.sort()
b) Faça um programa que imprime os números pares de uma lista dada.
c) Faça um programa que imprime a posição dos números pares de uma lista.
d) Faça um programa que imprime o maior número de uma lista.
e) Faça um programa que imprime a soma de todos os números de uma lista.
f) Faça um programa que imprime a média e o desvio padrão dos números de uma lista.
g) Faça um programa que verifica se um número está em uma lista. Depois procure na documentação do Python sobre o operador in.
h) Faça um programa para embaralhar os números de uma lista.
i) Faça um programa para imprimir os números primos que estão em uma lista.
j) Um algoritmo antigo para determinar todos os números primos até um determinado limite é Sieve of Eratosthenes. Procure como funciona esse algoritmo e o implemente em Python.
k) Quais são os outros métodos que podem ser usados com listas?
Exercício Turtle
Re-escreva o programa abaixo evitando os vários if para mudança de shape.
from turtle import * from random import * forma = 0 # variavel de estado # forma == 0 ==> shape == turtle # forma == 1 ==> shape == circle # forma == 2 ==> shape == square shape("turtle") for _ in range(1000): x_anterior,y = pos() forward(4) right( randint(-50,50) ) x,y = pos() if x < -50 or x > 50 or y < -50 or y > 50: pu() goto( randint(0,20), randint(0,20)) pd() if (x > 0 and x_anterior < 0) or (x < 0 and x_anterior > 0): # se passou por zero (indo ou vindo) if forma == 0: # shape eh turtle print("to ficando circle") shape("circle") elif forma == 1: # shape eh circle: print("to ficando square") shape("square") else: # shape eh square: print("to ficando turtle") shape("turtle") forma = (forma + 1) % 3
Aula 9 (matemática e funções)
Conceito
- Função matemática (mapeamento entre conjuntos, tem imagem e domínio)
- Função não é Rotina
Exemplos
- Soma de valores de uma lista
- Média
- Maior
- "Tem Valor"
- Fatorial (implementação iterativa vs recursiva)
- Fibonacci
Exercícios
- Desvio padrão
- Primo
- Embaralhar lista
Aula 10 (multi tartaruga)
Exemplo
# -*- coding: utf-8 -*- from turtle import * from time import * from random import * def anda(tart): if not fechado: tart.forward(1) tart.right( randint(-10,10) ) def semaforo(): global ultimaAtuSem, fechado if time() - ultimaAtuSem >= 2: fechado = not fechado ultimaAtuSem = time() if fechado: ts.color("red","red") else: ts.color("green","green") ts.fill(True) ts.circle(50) ts.fill(False) # # Cria algumas tartarugas que andam na tela e um semáforo # delay(0) t1 = Turtle() # criar uma tart t1.shape("turtle") t1.speed(1) t2 = Turtle() # criar uma tart t2.shape("circle") t2.right(90) t2.speed(1) ts = Turtle() # criar um semáforo ts.speed(0) ts.hideturtle() ts.penup() ts.goto(-100,100) # # Pra sempre fica chamando as tartarugas e os semáforos # (Obs. Eles não podem ficar em loop!!!) fechado = False ultimaAtuSem = time() while True: anda(t1) anda(t2) semaforo()
Exercício
Faça uma animação na tela onde haja uma estrada desenhada e carros passando por ela.
- Inicie com uma estrada reta onde o "carro" passa da esquerda para a direita, desaparece e reaparece no inicio da estrada, repetindo o ciclo. Depois acrescente cruzamentos (de 90 graus) onde o rumo tomado pelo carro é aleatório.
- Inicie fazendo a tartaruga percorrer o trajeto, depois mude para uma figura que seja um carro.
- Inclua um semáforo no cenário que muda de verde para vermelho a cada 3 segundos. Inicie com os carros não respeitando o semáforo, depois faça com que eles o respeitem.
- Inicie com um carro, depois acrescente vários carros andando ao mesmo tempo.
Aula 11 (teclado)
exemplo
from turtle import * from random import * def up(): setheading(90) def down(): setheading(270) def muda(): shape("turtle") def cor(): color( randint(0,255), randint(0,255), randint(0,255)) colormode(255) onkey(up, "Up") onkey(down, "Down") onkey(cor, "space") listen() ontimer(muda,2000) while True: fd(1)
exercícios
a) mudar de shape a cada 2 segundos enquanto durar a execução
b) Use o teclado para controlar o carro da aula anterior
Aula 12 (strings)
Conceitos
- lista de caracteres
- construídas com "
- indexado pela posição
- as operações são as mesmas de listas: concatenação, len, for, …
- caracteres ASCII (funções ord e chr)
Exemplo
nome = raw_input("Digite seu nome: ") # entrada de dados nome = nome.title() print( nome.center(70) ) for c in nome: # iteracao sobre todos os caracteres print(c) for c in nome: # mostra o valor numerico (ASCII de cada letra) print( ord(c) ) print(nome[0] + nome[-1]) meses = "JanFevMarAbrMaiJunJulAgoSetOutNovDez" print(meses[3:6]) for i in range(12): print(meses[i*3:i*3+3])
Exercícios
- qual o resultado da avaliação de "4" + "5"?
- como se chama a operação de acessar uma letra da string?
- quais os métodos que podem ser usados com strings?
- faça um programa que leia uma data como string no formato DD/MM/AAAA e imprima no formato AAAA-MM-DD.
- os numerologistas acreditam que o nome das pessoas tem um valor numérico associado. Esse valor é dado pela soma dos valores das letras, onde "a" vale 1, "b" vale 2, e assim por diante. Faça uma função que retorna o valor numérico de um nome.
- estude o método split para strings.
- faça um programa que leia uma frase e gere o acrônimo (sigla) correspondente. Por exemplo, se for digitado "random access memory", deve imprimir RAM.
- faça uma função que retorna o número de palavras em uma string.
- faça um programa que imprime os primeiros 100 "números Smith", veja uma explicação em https://www.youtube.com/watch?v=mlqAvhjxAjo e https://en.wikipedia.org/wiki/Smith_number.
Aula 13 (OBI)
Resolva os problemas da prova disponível em http://jomi.das.ufsc.br/das5334/prova2014.pdf. Os problemas são baseados na Olimpíada Brasileira de Informática