Voltar ao inícioComputação · 8º ano · Mudar de matéria
Começar grátis
8º ano · Computação
Programação e robótica · Programação textual

Programação textual com Python

Antes de começar, convém dominares: Programação por blocos (6º ano do Ensino Fundamental (Anos Finais))
Antes de começar, convém dominares: Algoritmos e pensamento computacional (6º ano do Ensino Fundamental (Anos Finais))

Até agora você arrastava blocos coloridos no Scratch ou no App Inventor. Agora vai escrever as mesmas ideias com texto: cada linha é uma ordem exata e o computador a executa do jeito que está escrita, sem adivinhar o que você queria dizer. Será que um programa de texto consegue calcular o frete de uma loja virtual sem errar? No fim da página você vai saber.

Do bloco ao texto

Um algoritmo é uma sequência de passos para resolver um problema. Nos blocos, cada passo era uma peça encaixada. No Python, cada passo é uma linha de texto. As ideias são as mesmas: guardar valores (variáveis), decidir (se… senão), repetir (laços) e agrupar passos com nome (funções). Se você já programou no Scratch ou no App Inventor, vai reconhecer cada uma delas, como nas aulas do 6º ano.

Nos blocos No Python
bloco «defina variável» pontos = 0
bloco «diga» / «mostre» print("Olá")
bloco «pergunte» input("Nome: ")
bloco «se… senão» if / else
bloco «repita 10 vezes» for
bloco «repita até que» while

Variáveis, tipos de dado e entrada/saída

Variável como caixa com etiqueta: três linhas de código criam a caixa pontos com um 0, somam 1 e mostram o valor na tela. Código 1 pontos = 0 2 pontos = pontos + 1 3 print(pontos) Variável (caixa) pontos 0 → 1 guarda 0 lê, soma 1, guarda 1 Tela

O sinal = no Python não é uma igualdade da matemática: é uma ordem de guardar. Por isso pontos = pontos + 1 não é erro: o computador primeiro calcula o lado direito (lê o valor antigo e soma 1) e só depois guarda na caixa.

Numa loja virtual, por exemplo: 13 pode ser a quantidade de itens no carrinho (int), 3.75 o preço de um item em reais (float), "Ana" o nome da cliente (str) e True a informação «pagamento aprovado» (bool).

Rastreio: acompanhar variáveis linha a linha

Para prever o que um programa faz, construa uma tabela com o valor de cada variável depois de cada linha. É o chamado teste de mesa.

Pratica★☆☆Por começar
Explique o que é uma variável recorrendo à comparação com uma caixa com etiqueta e descreva o que faz cada linha: puntos = 0, puntos = puntos + 1, print(puntos). Que…

Explique o que é uma variável recorrendo à comparação com uma caixa com etiqueta e descreva o que faz cada linha: puntos = 0, puntos = puntos + 1, print(puntos). Que valor aparece na tela e por que razão não é um erro somar algo a uma variável que «já tinha» um valor?

Resolver
Pratica★☆☆Por começar
Classifique estes valores de acordo com o tipo de dados (inteiro, decimal, texto ou booleano) e dê um exemplo de uso para cada tipo em um programa de uma loja: 13, 3,75,…

Classifique estes valores de acordo com o tipo de dados (inteiro, decimal, texto ou booleano) e dê um exemplo de uso para cada tipo em um programa de uma loja: 13, 3,75, "Ana", True.

Resolver
Pratica★☆☆Por começar
Explique o que fazem as instruções input() e print() em Python, qual é a diferença entre elas e escreva um programa de duas linhas que peça o seu nome e o cumprimente…

Explique o que fazem as instruções input() e print() em Python, qual é a diferença entre elas e escreva um programa de duas linhas que peça o seu nome e o cumprimente usando-o.

Resolver
Pratica★★☆Por começar
Preveja a saída deste programa sem executá-lo, acompanhando o valor das variáveis linha a linha: a = 4, b = 3, a = a + b, b = a - b, print(a), print(b). Escreva o…

Preveja a saída deste programa sem executá-lo, acompanhando o valor das variáveis linha a linha: a = 4, b = 3, a = a + b, b = a - b, print(a), print(b). Escreva o rastreio completo (quanto vale cada variável após cada linha) e não apenas o resultado.

Resolver
Pratica★★☆Por começar
Escreva um programa de três linhas que peça o nome e a idade de uma pessoa e escreva uma frase completa usando-os (por exemplo, «A Mei tem 14 anos»). Explique que tipo…

Escreva um programa de três linhas que peça o nome e a idade de uma pessoa e escreva uma frase completa usando-os (por exemplo, «A Mei tem 14 anos»). Explique que tipo de dado o input() sempre devolve e para que serve o int() ao pedir a idade.

Resolver

Condicionais: `if`, `elif`, `else`

Pense numa regra do dia a dia: «se chover, levo o guarda-chuva; se não, levo os óculos de sol». Em pseudocódigo:

se chover:

    levar guarda-chuva

senão:

    levar óculos de sol
Código em Python com uma condicional if/else: se idade for maior ou igual a 12 mostra "Pode", e se não, "Ainda não". As linhas de cada bloco têm recuo. idade = int(input("Idade: ")) if idade >= 12: print("Pode") else: print("Ainda não") ← condição se for verdadeira ← se não se for falsa

As comparações do Python são: == (igual), != (diferente), <, >, <= e >=. O resultado de uma comparação é sempre True ou False.

Pratica★☆☆Por começar
A figura mostra um fluxograma e, ao lado, o programa que faz o mesmo, mas com a condição escondida. Escreva a condição que falta na linha do if (deve comparar a variável…

A figura mostra um fluxograma e, ao lado, o programa que faz o mesmo, mas com a condição escondida.

início pedir a idade idade ≥ 12? sim você pode participar não falta pouco edad = int(input("Edad: ")) if ?: print("Puedes") else: print("Aún no")

Escreva a condição que falta na linha do if (deve comparar a variável edad com $12$), explique o que faz int(input("Edad: ")) e por que as linhas dentro do if e do else têm recuo (indentação) para a direita.

Resolver
Pratica★☆☆Por começar
Explique o que é uma estrutura condicional com um exemplo do seu dia a dia (se chover, levo o guarda-chuva; se não, os óculos de sol) e escreva-a em três linhas de…

Explique o que é uma estrutura condicional com um exemplo do seu dia a dia (se chover, levo o guarda-chuva; se não, os óculos de sol) e escreva-a em três linhas de pseudocódigo: condição, o que acontece se for verdadeira e o que acontece se for falsa.

Resolver
Pratica★☆☆Por começar
Este programa tem três erros típicos: nome = input("O teu nome: ), if nome = "Fátima", print("Olá"). Encontre cada erro (umas aspas por fechar, um = que deveria ser == e…

Este programa tem três erros típicos: nome = input("O teu nome: ), if nome = "Fátima", print("Olá"). Encontre cada erro (umas aspas por fechar, um = que deveria ser == e explique a diferença), reescreva o programa corrigido e indique qual mensagem de erro o computador daria em cada caso.

Resolver
Pratica★★☆Por começar
Escreva um programa que peça um número e diga se ele é positivo, negativo ou zero. Indique qual estrutura você usa (uma condicional com dois ramos ou três), quais…

Escreva um programa que peça um número e diga se ele é positivo, negativo ou zero. Indique qual estrutura você usa (uma condicional com dois ramos ou três), quais comparações você faz e teste-o mentalmente com os valores $7$, $-3$ e $0$.

Resolver
Pratica★★☆Por começar
Um programa converte a nota numérica em classificação: menos de $5$ é «insuficiente», de $5$ a $6{,}9$ é «suficiente» e de $7$ em diante é «bom». Escreva o programa com…

Um programa converte a nota numérica em classificação: menos de $5$ é «insuficiente», de $5$ a $6{,}9$ é «suficiente» e de $7$ em diante é «bom». Escreva o programa com if, elif e else, explique por que a ordem das condições importa e o que aconteceria se a primeira condição fosse nota > 5.

Resolver

Laços: `for` e `while`

Exemplos do cotidiano: dar dez voltas no pátio da escola é um for (você sabe quantas). Continuar remando até chegar à margem é um while (você repete até uma condição mudar).

Comparação entre um laço for e um laço while: o for repete dez vezes o print(3 * i), com i de 0 a 9; o while mostra n de 5 até 1 e para quando a condição n maior que 0 deixa de ser verdadeira. for: vezes fixas for i in range(10): print(3 * i) 10 voltas, 10 linhas na tela while: até que... n = 5 while n > 0: print(n) n = n - 1 mostra 5, 4, 3, 2, 1
Pratica★☆☆Por começar
Explique a diferença entre um laço for (repetir um número conhecido de vezes) e um laço while (repetir enquanto uma condição for verdadeira), e dê um exemplo cotidiano…

Explique a diferença entre um laço for (repetir um número conhecido de vezes) e um laço while (repetir enquanto uma condição for verdadeira), e dê um exemplo cotidiano de cada um: dar dez voltas no pátio da escola versus continuar remando até chegar à margem.

Resolver
Pratica★★☆Por começar
Escreva um laço for que mostre a tabuada do $3$ (do $3 \cdot 1$ ao $3 \cdot 10$), indique quantas vezes se repete o corpo do laço e explique o que você mudaria para…

Escreva um laço for que mostre a tabuada do $3$ (do $3 \cdot 1$ ao $3 \cdot 10$), indique quantas vezes se repete o corpo do laço e explique o que você mudaria para mostrar a tabuada do $7$ sem reescrever todo o programa.

Resolver
Pratica★★☆Por começar
Leia este programa e explique o que ele faz: n = 5, while n > 0:, print(n), n = n - 1, e no final print("Já está!"). Escreva a saída completa na tela e justifique o que…

Leia este programa e explique o que ele faz: n = 5, while n > 0:, print(n), n = n - 1, e no final print("Já está!"). Escreva a saída completa na tela e justifique o que aconteceria se esquecêssemos a linha n = n - 1.

Resolver
Pratica★★☆Por começar
Um colega escreve um programa que pede senhas até acertar: chave = "", while chave != "sol":, e dentro dele apenas print("incorreta"). Explique por que o programa nunca…

Um colega escreve um programa que pede senhas até acertar: chave = "", while chave != "sol":, e dentro dele apenas print("incorreta"). Explique por que o programa nunca termina, que linha falta dentro do laço (pedir a chave novamente) e a regra geral sobre os laços while: algo precisa poder alterar a condição.

Resolver
Pratica★★★Por começar
Para selecionar os classificados de um torneio de robótica, são lidas cinco pontuações (de $0$ a $10$). Um colega propôs este código para contar quantas são iguais ou…

Para selecionar os classificados de um torneio de robótica, são lidas cinco pontuações (de $0$ a $10$). Um colega propôs este código para contar quantas são iguais ou superiores a $5{,}0$:

aprobados = 0

for i in range(5):

    nota = float(input("Introduce nota: "))

    if nota >= 5:

        aprobados = aprobados + 1

    else:

        aprobados = 0

print("Total de aprobados:", aprobados)
  1. a) Preveja o que será mostrado na tela se o usuário digitar sucessivamente as notas: $6{,}0$, $8{,}0$, $4{,}0$, $9{,}0$ e $7{,}0$. Justifique por que o resultado final não é o esperado, localizando o erro de lógica na estrutura condicional.
  2. b) Corrija o código e modifique-o para que descarte da contagem as notas inválidas (menores que $0$ ou maiores que $10$), mostrando uma mensagem de aviso específica sem somar nem reiniciar o contador.
Resolver

Funções

Escrever def saudar(): uma única vez e depois chamar saudar() onde precisar evita copiar as mesmas linhas várias vezes. Se houver um erro, você corrige em um só lugar.

Uma função como máquina: a mesma função area_quadrado recebe o valor 5 e devolve 25, e recebe 2.5 e devolve 6.25. chamada resultado def area_quadrado(lado): return lado * lado area_quadrado(5) area_quadrado(2.5) 25 5 × 5 6.25 2.5 × 2.5

O parâmetro (lado) é o nome que a função dá ao dado de entrada. O valor devolvido é o que o return entrega a quem chamou a função. Sem return, a função devolve None (nada útil).

Pratica★☆☆Por começar
Explique o que é uma função em um programa e que vantagem há em escrever uma vez def saudar(): e poder chamá-la várias vezes, em vez de copiar as mesmas linhas…

Explique o que é uma função em um programa e que vantagem há em escrever uma vez def saudar(): e poder chamá-la várias vezes, em vez de copiar as mesmas linhas repetidamente.

Resolver
Pratica★★☆Por começar
Analise esta função: def area_quadrado(lado): e, no interior, return lado * lado. Explique o que é o parâmetro, o que é o valor devolvido e o que seria escrito na tela…

Analise esta função: def area_quadrado(lado): e, no interior, return lado * lado. Explique o que é o parâmetro, o que é o valor devolvido e o que seria escrito na tela em cada chamada: print(area_quadrado(5)), print(area_quadrado(2{,}5)).

Resolver
Pratica★★★Por começar
Uma equipe desenvolve o software de um caixa registradora usando funções: a) Ao executar este código, o Python produz o erro: TypeError: unsupported operand type(s) for…

Uma equipe desenvolve o software de um caixa registradora usando funções:

def calcular_iva(precio):

    total = precio * 1.21

    pass  # O programador esqueceu-se de adicionar a última linha desta função

def aplicar_descuento(total, rebaja):

    resultado = total - rebaja

    return resultado

precio_base = 100.0

precio_con_iva = calcular_iva(precio_base)

precio_final = aplicar_descuento(precio_con_iva, 10.0)

print("Preço final:", precio_final)
  1. a) Ao executar este código, o Python produz o erro: TypeError: unsupported operand type(s) for -: 'NoneType' and 'float'. Interprete a mensagem e explique exatamente como o valor None viaja pelas variáveis do programa.
  2. b) Um colega afirma: «Para resolver basta mudar a linha da primeira função para print(precio * 1.21)». Refute a afirmação dele explicando a diferença funcional entre mostrar um valor na tela e retornar um valor para a chamada principal.
  3. c) Corrija o código e adicione uma função es_valido(precio) que retorne um valor booleano (True ou False) para verificar que o valor base não seja negativo antes de processá-lo.
Resolver

Erros de sintaxe e erros de lógica

Duas janelas de código: com um erro de sintaxe (aspas sem fechar) o programa não começa; com um erro de lógica (nota1 + nota2 / 2) ele roda, mas dá 7 em vez de 5. Erro de sintaxe input("Seu nome: ) não começa Erro de lógica media = nota1 + nota2 / 2 nota1 = 4 nota2 = 6 resultado: 7 esperado: 5 roda, mas resultado errado
Pratica★★★Por começar
Uma loja aplica a seguinte política: compras inferiores a $\text{R\$}\ 30$ pagam $4{,}\text{R\$}\ 50$ de frete; compras entre $\text{R\$}\ 30$ e $\text{R\$}\ 50$ têm…

Uma loja aplica a seguinte política: compras inferiores a $\text{R\$}\ 30$ pagam $4{,}\text{R\$}\ 50$ de frete; compras entre $\text{R\$}\ 30$ e $\text{R\$}\ 50$ têm frete grátis; compras superiores a $\text{R\$}\ 50$ têm frete grátis e um desconto de $10\ \%$ sobre o preço da compra.

Um aluno programou este código:

precio = float(input("Total compra: "))

if precio > 50:

    total = precio * 0.90

if precio >= 30:

    total = precio

else:

    total = precio + 4.50

print("Total a pagar:", total)
  1. a) Faça o teste de mesa com uma compra de $60{,}\text{R\$}\ 00$. Que preço final o programa imprime? Justifique por que ocorre esse erro de lógica ao encadear as condicionais.
  2. b) Reescreva o programa de forma correta utilizando uma estrutura condicional aninhada ou com elif, e inclua uma validação que avise se for digitado um preço negativo ou zero.
Resolver
Pratica★★★Por começar
Observe o seguinte programa, cujo objetivo é pedir a idade ao usuário e determinar se tem idade legal para votar (a partir dos $18$ anos completos): a) Se você tentar…

Observe o seguinte programa, cujo objetivo é pedir a idade ao usuário e determinar se tem idade legal para votar (a partir dos $18$ anos completos):

if edad >= "18":

print("Puedes votar")

edad = input("Dime tu edad: ")

else:

    print("No puedes votar")
  1. a) Se você tentar executar o programa como está, em que linha o interpretador de Python vai parar e por que motivo não chegará a executar a linha do input?
  2. b) Identifique e classifique todos os erros presentes, distinguindo entre erros de sintaxe (que impedem a compilação/interpretação) e erros de tipo ou de lógica durante a execução.
  3. c) Reescreva o código corrigido e introduza uma verificação para evitar que o programa falhe se o usuário digitar a idade com texto (por exemplo, escrevendo «dezoito»).
Resolver
Pratica★★★Por começar
Desenhe o algoritmo para um terminal de recarga e cobrança do refeitório escolar cumprindo os seguintes requisitos técnicos: O cartão parte de um saldo inicial de…

Desenhe o algoritmo para um terminal de recarga e cobrança do refeitório escolar cumprindo os seguintes requisitos técnicos:

  • O cartão parte de um saldo inicial de $20{,}\text{R\$}\ 00$ e cada refeição custa $4{,}\text{R\$}\ 50$.

  • Em um laço de repetição, o programa pergunta quantas refeições se pretende consumir no dia.

  • Se o saldo disponível não for suficiente para pagar a quantidade solicitada, a operação é cancelada, informa-se o valor que falta e o saldo não é modificado.

  • Se houver saldo suficiente, desconta-se o valor e verifica-se se o saldo restante é inferior a $5{,}\text{R\$}\ 00$, mostrando nesse caso o aviso «Saldo baixo: recarregue em breve».

  • O programa deve terminar automaticamente quando o saldo restante for menor que o preço de uma refeição individual ($4{,}\text{R\$}\ 50$).

  • Justifique que tipo de laço de repetição você utilizou e explique como evitar que um usuário digite um número negativo de refeições para aumentar artificialmente o seu saldo.

Resolver
Pratica★★★Por começar
Um sistema de classificação calcula a nota final aplicando os seguintes pesos: Trabalho de aula ($20\ \%$), Prática de laboratório ($30\ \%$) e Prova teórica ($50\ \%$).…

Um sistema de classificação calcula a nota final aplicando os seguintes pesos: Trabalho de aula ($20\ \%$), Prática de laboratório ($30\ \%$) e Prova teórica ($50\ \%$). O professor programou a fórmula assim:

trabajo = float(input("Nota trabalho: "))

taller = float(input("Nota laboratório: "))

examen = float(input("Nota prova: "))

nota_final = trabajo * 0.20 + taller * 0.30 + examen * 0.50 / 3

if nota_final > 5:

    print("Aprovado")

else:

    print("Reprovado")
  1. a) Preveja o resultado que o programa vai mostrar se o aluno obtiver $10{,}0$ nas três componentes. Interprete a prioridade de operadores para justificar o valor numérico errado que nota_final armazena.
  2. b) Justifique por que este erro é de lógica e não de sintaxe, e argumente por que os erros lógicos representam um risco muito maior em programas de engenharia ou controle do que os de sintaxe.
  3. c) Detecte um segundo erro lógico na condição do if em relação ao critério habitual de aprovação (aprovar com $5{,}0$) e escreva a versão definitiva do programa corrigido.
Resolver

Voltando à pergunta do início: sim, um programa de texto calcula o frete sem errar, desde que as condições estejam encadeadas na ordem certa (if/elif/else) e você confira o resultado com um teste de mesa.

Resumo

Ver todos os exercícios deste tema