CSE 111: Programação com Funções

S01 - Atividades de Aprendizagem (1 de 2): Revisão de Python

O CSE 111 baseia-se nos conceitos do CSE 110. Para ser bem-sucedido, é importante que você se lembre e entenda os conceitos do CSE 110. Na aula  1, você fará uma revisão dos principais conceitos de programação do CSE 110.

Conceitos

Aqui está uma lista de conceitos e assuntos de programação Python do CSE 110 que você deve rever durante esta aula.

Comentários

Um comentário é uma anotação que ajuda a entender o código. O computador ignora comentários. Em Python, eles começam com # e vão até o fim da linha.

# Este é um comentário porque
# começa com o símbolo de hash (#).

Variáveis

Uma variável é um espaço na memória que armazena um valor e tem um nome e um tipo de dado. Em Python, usamos = para atribuir valores. Durante a execução, valor e tipo podem mudar.

comprimento = 5
tempo = 7.2
durante_voo = True
nome = "Maria"

Tipos de Dados

Python tem muitos tipos de dados, incluindo str, bool, int, float, list e dict. A maioria dos tipos de dados que você usará em seus programas no CSE 111 são mostrados na lista a seguir.

É possível converter dados entre diferentes tipos. Por exemplo, para transformar qualquer tipo de dado em uma str(), usamos a função str(). Para converter uma string em um número inteiro, utilizamos a função int(). Já para converter uma string em um número de ponto flutuante, usamos a função float().

As funções int() e float() são especialmente úteis quando trabalhamos com entradas do usuário, pois elas sempre são lidas como strings. Assim, podemos convertê-las para números, permitindo cálculos e outras operações. Veja o programa no exemplo 2 abaixo.

Entrada do Usuário

Em um programa Python, usamos a função input() para obter a entrada de um usuário em uma janela de terminal. A função input sempre retorna uma string.

texto = input("Por favor, digite seu nome: ")
cor = input("Qual sua cor favorita?")

Exibindo Resultados

Em Python, usamos a função print() para exibir informações na tela. A forma mais prática de mostrar texto e números juntos é usando uma string literal formatada (conhecida como f-string).

print(f"Frequência cardíaca: {avaliacao}")

O programa Python no exemplo 1 cria dez variáveis diferentes. Algumas das variáveis são do tipo str, algumas do tipo bool, algumas do tipo int e algumas do tipo float. O programa usa f-strings para exibir o nome, o tipo de dados e o valor de cada variável.

# Exemplo 1
# Cria variáveis de diferentes tipos de dados e então
# Exibe os nomes das variáveis, tipos de dados e valores.
a = "O nome dela é " # string
b = "Isabella" # string
c = a + b # string mais string forma string
print(f"a: {type(a)} {a}")
print(f"b: {type(b)} {b}")
print(f"c: {type(c)} {c}")
print()
d = False  # booleana
e = True   # booleana
print(f"d: {type(d)} {d}")
print(f"e: {type(e)} {e}")
print()
f = 15     # inteiro
g = 7.62   # ponto flutuante
h = f + g # inteiro mais ponto flutuante gera ponto flutuante
print(f"f: {type(f)} {f}")
print(f"g: {type(g)} {g}")
print(f"h: {type(h)} {h}")
print()
i = "True" # string por causa das aspas ao redor
j = "2.718" # string por causa das aspas ao redor
print(f"i: {type(i)} {i}")
print(f"j: {type(j)} {j}")
> python exemplo_1.py
a: <class 'str'> O nome dela é
b: <class 'str'> Isabella
c: <class 'str'> O nome dela é Isabella

d: <class 'bool'> False
e: <class 'bool'> True

f: <class 'int'> 15
g: <class 'float'> 7.62
h: <class 'float'> 22.62

i: <class 'str'> True
j: <class 'str'> 2.718

No exemplo 2, o programa Python cria seis variáveis diferentes, algumas do tipo string, algumas do tipo int e algumas do tipo float. As linhas 3–4 e 6–8 do exemplo 2 demonstram que, não importa o que o usuário digite, a função input() sempre retorna uma string. As linhas 11 e 12 mostram como usar as funções int() e float() para converter uma string em um número para que possam ser usados em cálculos.

# Exemplo 2
# A função input sempre retorna uma string.
k = input("Por favor, digite um número: ")        # string
m = input("Por favor, digite outro número: ")  # string
n = k + m # string mais string gera string
print(f"k: {type(k)} {k}")
print(f"m: {type(m)} {m}")
print(f"n: {type(n)} {n}")
print()
# As funções int e float convertem uma string em um número.
p = int(input("Por favor, digite um número: "))          # int
q = float(input("Por favor, digite outro número: "))  # ponto flutuante
r = p + q # inteiro mais ponto flutuante gera ponto flutuante
print(f"p: {type(p)} {p}")
print(f"q: {type(q)} {q}")
print(f"r: {type(r)} {r}")
> python exemplo_2.py
Por favor, digite um número: 6
Por favor, digite outro número: 4
k: <class 'str'> 6
m: <class 'str'> 4
n: <class 'str'> 64

Por favor, digite um número: 5
Por favor, digite outro número: 3
p: <class 'int'> 5
q: <class 'float'> 3.0
r: <class 'float'> 8.0

Aritmética

Python tem muitos operadores aritméticos, incluindo potência (**), negação (-), multiplicação (*), divisão (/), divisão inteira (//), módulo (%), adição (+) e subtração (-).

O operador de potência (**) às vezes é chamado de exponenciação e faz com que um computador eleve um número base a um expoente. Por exemplo, o seguinte código Python faz com que o computador calcule e armazene 125 na variável resultado porque o valor em x é 5 e o valor em y é 3, enquanto 5 ** 3 ou 53 ou 5 elevado ao expoente 3 é 125.

x = 5
y = 3
resultado = x ** y

O operador de módulo (%) calcula o resto da divisão. Por exemplo, o código Python abaixo armazena o número 2 na variável resultado. O valor de x é 17 e o de y é 3. A expressão 17 % 3 divide 17 por 3, resultando em 5 com resto 2.

x = 17
y = 3
resultado = x % y

Aqui estão mais alguns exemplos do resultado do operador módulo.

print(f"21 % 5 == {21 % 5}")
print(f"45 % 5 == {45 % 5}")
print(f"5 % 1 == {5 % 1}")
print(f"3 % 8 == {3 % 8}")
print(f"-3 % 8 == {-3 % 8}")
print(f"3 % -8 == {3 % -8}")
print(f"-3 % -8 == {-3 % -8}")
21 % 5 == 1
45 % 5 == 0
5 % 1 == 0
3 % 8 == 3
-3 % 8 == 5
3 % -8 == -5
-3 % -8 == -3

Para mais informações, leia as respostas nesta pergunta do Stack Overflow sobre o operador de módulo em Python e números negativos.

Precedência do Operador

Quando escrevemos uma expressão aritmética que contém mais de um operador, o computador executa os operadores de acordo com sua precedência, também conhecida como ordem das operações. Esta tabela mostra a precedência dos operadores aritméticos.

Operadores Descrição Precedência
( ) parênteses mais alta
** exponenciação (potência)
- negação |
*  /  //  % multiplicação, divisão, divisão inteira, módulo |
+  - adição, subtração
= atribuição mais baixa
Quando uma expressão aritmética inclui dois operadores com a mesma precedência, o computador avalia da esquerda para a direita. Por exemplo, em
x / y * c
, o computador primeiro divide x por y e depois multiplica o resultado por c. Para alterar a ordem de avaliação, você pode usar parênteses. O conteúdo dentro dos parênteses sempre será avaliado primeiro, pois tem a maior precedência.

Se esta é a primeira vez que você se depara com a precedência de operadores aritméticos, assista a este vídeo da Khan Academy: Introdução à Ordem das Operações (12 minutos).

O programa Python no exemplo 3 recebe a entrada do usuário e a converte em dois números nas linhas 7 e 8. Então, na linha 10, o programa calcula o comprimento de um cabo a partir dos dois números. Por fim, na linha 13, o programa usa uma f-string para exibir o comprimento arredondado para duas casas decimais.

# Exemplo 3
# Considerando a distância que um cabo deve percorrer e a distância
# que ele afundará no meio, este programa calcula o
# comprimento do cabo.
# Obtém as entradas do usuário e converte de
# strings para números de ponto flutuante.
distancia = float(input("Distância que o cabo deve percorrer, em metros: "))
afundar = float(input("Distância que o cabo afundará, em metros: "))
# Usa os números para calcular o comprimento do cabo.
comprimento = distancia + (8 * afundar**2) / (3 * distancia)
# Exibe o comprimento do cabo no
# terminal para o usuário ver.
print(f"Comprimento do cabo, em metros: {comprimento:.2f}")
> python exemplo_3.py
Distância que o cabo deve percorrer, em metros: 500
Distância que o cabo afundará, em metros: 18.5
Comprimento do cabo, em metros: 501.83

No exemplo 3, a aritmética escrita na linha 13 vem de uma fórmula bem conhecida. Considerando a distância que um cabo deve percorrer e a distância vertical que o cabo poderá ceder ou afundar no meio, a fórmula para calcular o comprimento do cabo é:

comprimento = distancia +
8 afundar2
3 distancia

Operadores Abreviados

A linguagem de programação Python inclui muitos operadores de atribuição ampliada, também conhecidos como operadores abreviados. Todos os operadores abreviados têm a mesma precedência que o operador de atribuição (=). Aqui está uma lista de alguns operadores abreviados do Python:

**=  *=  /=  //=  %=  +=  -=

Para entender o que os operadores abreviados fazem e por que o Python os inclui, imagine um programa que calcula o preço de uma pizza. O preço de uma pizza grande com queijo e sem outros ingredientes é R$10.95. O preço de cada ingrediente, como presunto, calabresa, azeitonas e abacaxi, é R$1.45. Aqui está um pequeno programa de exemplo que pergunta ao usuário o número de ingredientes e calcula o preço de uma pizza:

# Exemplo 4
# Calcula o preço total de uma pizza.
# O preço base de uma pizza grande é R$10.95
preco = 10.95
# Pergunta ao usuário a quantidade de ingredientes.
quantidade_de_ingredientes = int(input("Quantos ingredientes? "))
# Calcula o custo dos ingredientes.
preco_por_ingrediente = 1.45
custo_dos_ingredientes = quantidade_de_ingredientes * preco_por_ingrediente
# Adiciona o custo dos ingredientes ao preço da pizza.
preco = preco + custo_dos_ingredientes
# Exibe o preço para o usuário ver.
print(f"Preço: R${preco:.2f}")
> python exemplo_4.py
Quantos ingredientes? 3
Preço: R$15.30

O computador obtém o valor da variável preco (que é 10.95), soma o valor armazenado em custo_dos_ingredientes e armazena o resultado novamente na variável preco. O Python oferece uma forma abreviada para isso: o operador +=, que combina adição (+) com atribuição (=). Assim, podemos reescrever a linha 11 desta maneira:

preco += custo_dos_ingredientes

Esta instrução com o operador abreviado é equivalente à instrução na linha 11 do exemplo 4, ou seja, as duas instruções fazem com que o computador faça a mesma coisa. O exemplo 5 contém o mesmo programa do exemplo 4, mas usa o operador abreviado += na linha 11.

# Exemplo 5
# Calcula o preço total de uma pizza.
# O preço base de uma pizza grande é R$10.95
preco = 10.95
# Pergunta ao usuário a quantidade de ingredientes.
quantidade_de_ingredientes = int(input("Quantos ingredientes? "))
# Calcula o custo dos ingredientes.
preco_por_ingrediente = 1.45
custo_dos_ingredientes = quantidade_de_ingredientes * preco_por_ingrediente
# Adiciona o custo dos ingredientes ao preço da pizza.
preco += custo_dos_ingredientes
# Exibe o preço para o usuário ver.
print(f"Preço: R${preco:.2f}")
> python exemplo_5.py
Quantos ingredientes? 3
Preço: R$15.30

Instruções If

Em Python, usamos instruções if para fazer com que o computador tome decisões; As instruções if também são chamadas de instruções de seleção, pois o computador seleciona um grupo de instruções para executar e ignora o outro grupo de instruções.

Existem seis operadores de comparação que podemos usar em uma instrução if:

< menor que
<= menor ou igual
> maior que
>= maior ou igual
== igual a
!= não é igual a

O exemplo 6 verifica se um número é maior que 500.

# Exemplo 6
# Obtém o saldo da conta do usuário como um número.
saldo = float(input("Digite o saldo da conta: "))
# Se o saldo for maior que 500, então
# calcule e adicione juros ao saldo.
if saldo > 500:
  juros = saldo * 0.03
  saldo += juros
# Exibe o saldo.
print(f"saldo: {saldo:.2f}")
> python exemplo_6.py
Digite o saldo da conta: 350
saldo: 350.0
> python exemplo_6.py
Digite o saldo da conta: 525
saldo: 540.75

Se você escreveu programas em outras linguagens de programação, como JavaScript, Java ou C++, sempre usou chaves para marcar o início e o fim do corpo de uma instrução if. Entretanto, observe no exemplo 6 que as instruções if em Python não usam chaves. Em vez disso, digitamos dois-pontos (:) após a comparação da instrução if, conforme mostrado na linha 6. Em seguida, recuamos todas as instruções que estão no corpo da instrução if, conforme mostrado nas linhas 7 e 8. O corpo da instrução if termina com a primeira linha de código que não é recuada, como a linha 10.

Pode parecer estranho não usar chaves para marcar o início e o fim do corpo de uma instrução if. No entanto, o método Python nos força a escrever código em que o recuo corresponde à funcionalidade ou, em outras palavras, a maneira como recuamos o código corresponde à maneira como o computador executará o código.

Instruções if… elif… else

Cada instrução if pode ter uma instrução else, como mostrado no exemplo 7 na linha 11. Podemos combinar else e if na palavra-chave elif, como mostrado nas linhas 7 e 9.

# Exemplo 7
# Obtém o custo de um item do usuário.
custo = float(input("Por favor, digite o custo: "))
# Determina uma taxa de desconto com base no custo.
if custo < 100:
  taxa = 0.10
elif custo < 250:
  taxa = 0.15
elif custo < 400:
  taxa = 0.18
else:
  taxa = 0.20
# Calcula o valor do desconto
# e o custo com desconto.
desconto = custo * taxa
custo -= desconto
# Exibe o custo com desconto para o usuário.
print(f"Após o desconto, você pagará {custo:.2f}")
> python exemplo_7.py
Por favor, digite o custo: 300
Após o desconto, você pagará 246.00

Operadores Lógicos

Python inclui dois operadores lógicos: as palavras-chave and e or, que podemos usar para combinar duas comparações. Python também inclui o operador lógico "not". Observe que em Python os operadores lógicos são literalmente as palavras: and, or e not, e não símbolos como em outras linguagens de programação:

if motorista >= 54 or (motorista >= 32 and passageiro >= 54):
  mensagem = "Aproveite o passeio!"

Precisa de mais ajuda?

Se tiver alguma coisa na lista anterior que você não conhece bem, vale a pena revisar. Aqui estão algumas maneiras de revisá-los:

Resumo

Durante esta aula, você vai rever os conceitos de programação que aprendeu no CSE 110. Esses conceitos incluem como fazer o seguinte:

Atividade

Objetivo

Escrever um programa em Python que receba a entrada de um usuário, use variáveis, execute operações aritméticas e exiba os resultados para o usuário.

Declaração do Problema

Ao se exercitar fisicamente para fortalecer seu coração, você deve manter sua frequência cardíaca dentro de uma faixa por pelo menos 20 minutos. Para encontrar essa faixa, subtraia sua idade de 220. Essa diferença é sua frequência cardíaca máxima por minuto. Seu coração simplesmente não baterá mais rápido que esse máximo (220 − idade). Ao se exercitar para fortalecer seu coração, você deve manter sua frequência cardíaca entre 65% e 85% da frequência cardíaca máxima.

Tarefa

Escreva um programa em Python chamado frequencia_cardiaca.py que pergunte a idade de uma pessoa e calcule e exiba a frequência mais lenta (65% da frequência máxima) e a mais rápida (85% da frequência máxima) necessárias para fortalecer o coração. Para começar, copie e cole o código abaixo em seu programa e use-o como um esboço enquanto escreve o restante. Observe que, em um programa Python, uma string entre aspas triplas no topo do arquivo atua como um comentário para todo o programa.

 """
Quando você se exercita fisicamente para fortalecer seu coração,
deve manter sua frequência cardíaca dentro de uma faixa por pelo menos 20
minutos. Para encontrar essa faixa, subtraia sua idade de 220. Essa
diferença é sua frequência cardíaca máxima por minuto. Seu coração
simplesmente não baterá mais rápido que esse máximo (220 - idade).
Ao se exercitar para fortalecer seu coração, você deve manter sua
frequência cardíaca entre 65% e 85% da frequência cardíaca máxima.
"""
    

Procedimento de Teste

Verifique se seu programa funciona corretamente seguindo cada etapa deste procedimento de teste:

  1. Execute seu programa e digite a entrada mostrada abaixo. Certifique-se de que a saída do seu programa corresponda à saída abaixo.
    > python frequencia_cardiaca.py
    Por favor, digite sua idade: 23
    Ao se exercitar para fortalecer o coração, você deve
    manter sua frequência cardíaca entre 128 e 167 batimentos por minuto.
  2. Execute seu programa usando sua idade ou a idade de um dos seus pais. Use uma calculadora para garantir que a saída esteja correta.

Exemplo de Solução

Quando terminar seu programa, consulte o exemplo de solução para comparar com o seu.

Primeiro, procure concluir o programa sem olhar o exemplo de solução. No entanto, se já tiver trabalhado nele por bastante tempo e ainda estiver com dificuldades, sinta-se à vontade para usá-lo como apoio para finalizar seu programa.

Ponderar

Durante esta tarefa, você escreveu um programa em Python que recebe a entrada de um usuário, usa variáveis, executa operações aritméticas e exibe os resultados para o usuário. Como você deve ter aprendido a escrever esse tipo de programa no CSE 110, esta tarefa pode ter sido bem fácil. Se esta tarefa foi difícil para você, reveja os conceitos do CSE 110 e os programas que escreveu durante o curso.

Links Úteis: