Skip directly to content

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.

Aula 2 (introdução ao Turtle)

 

Conceitos

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

  1. Fazer um programa para desenhar um quadrado de lado 50
  2. Fazer um programa para desenhar um quadrado de lado 100
  3. … em um lugar aleatório da tela
  4. … pintar 2 quadrados em lugares aleatórios
  5. … pintar um quadrado de verde e outro de vermelho
  6. pintar 3 quadrados …
  7. 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

star.png

espiral.png

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

  • o que são listas
  • criação
    • [4,2,7,8,10]
  • alteração
    • l1 = 27
  • que operações podem ser feitas
    • concatenação ([1,2]+[3,4])
    • repetição ([1,2]*3)
    • indexação (v2)
    • tamanho (len(v))
    • iteração (for e in v:)
  • métodos
    • v.append(5)
  • rever exemplo do gráfico

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

Footnotes:

1

DEFINITION NOT FOUND.

2

DEFINITION NOT FOUND.

Date: 2018/2

Author: Jomi F. Hübner

Created: 2018-10-16 Tue 09:20

Emacs 25.1.1 (Org mode 8.2.10)

Validate