x
MAC2166 - Introdução à Computação
x
07/04/2014 - Aula 4
x
O tipo float
e a função float()
x
Nas últimas aulas, fizemos vários exercícios envolvendo números inteiros. Vimos que o tipo de dados associado a valores que são números inteiros é o int. Nesta aula, exercitaremos o uso de números reais. O tipo de dados em Python associado a números reais é o float
(que vem de floating-point).
Podemos expressar um valor do tipo real usando diferentes notações:
a = 0.0003
print("a =", a, ", tipo de a:", type(a))
b = 3e-4
print("b =", b, ", tipo de b:", type(b))
a = 0.0003 , tipo de a: <class 'float'> b = 0.0003 , tipo de b: <class 'float'>
x
Do mesmo modo que podemos transformar um valor do tipo string para um valor do tipo inteiro usando a função int
, também podemos transformar um valor do tipo string para um valor do tipo real usando a função float
.
num = float("3.75231")
print("%.2f" %(num)) # '%.2f' se refere a um num. real com duas casas depois da vírgula
print(type(num))
3.75 <class 'float'>
num = (float("2"))
print(num, type(num))
2.0 <class 'float'>
x
O operador de divisão: /
x
O operador /
realiza a divisão de dois números.
O resultado da operação de divisão é sempre um número do tipo float
(mesmo quando o quociente não tem casas decimais). Veja os exemplos a seguir:
a = 3 / 4
print(a, type(a))
0.75 <class 'float'>
b = 4 / 2
print(b, type(b))
2.0 <class 'float'>
c = 2.56 / 2
print(c, type(c))
1.28 <class 'float'>
d = 2.56 / 4.35
print(d, type(d))
0.5885057471264369 <class 'float'>
x
Regras de precedência dos operadores matemáticos
Agora que já vimos uma porção de operadores matemáticos, é pertinente falar sobre as regras de precedência que regem a ordem de avaliação das operações dentro de uma expressão matemática. Python segue a mesma convenção usada na matemática; a ordem de avaliação dos operadores, do de maior precedência para o de menor precedência, é a seguinte:
- Parênteses
- Exponenciação
- Multiplicação e divisão, que possuem a mesma precedência
- Adição e subtração, que possuem a mesma precedência
Usamos parênteses para forçar que uma expressão seja avaliada em uma determinada ordem desejada. Ex.: 2 * (3-1) = 4
, mas 2 * 3 - 1 = 5
.
Operadores com a mesma precedência são avaliados da esquerda para a direita. Ex: 10 / 2 * 2 = 10
e 10 / (2 * 2) = 2.5
. Mas há uma exceção para essa regra: a exponenciação. Ex: 2**3**2
equivale a 2**(3**2)
que é 512; note que isso é diferente de (2**3)**2
, que é 64.
Quando você estiver escrevendo uma expressão matemática e ficar na dúvida quanto às regras de precedência dos operadores, então use parênteses para garantir que a ordem de avaliação será correta. Com isso, você evitará possíveis erros.
x
Execução condicional encadeada: if-elif-else
x
Podemos usar comandos if
ou if-else
de forma aninhada, como mostrado no exemplo a seguir.
x = int(input("Digite um numero: "))
y = int(input("Digite um numero: "))
if x < y:
print(x, "é menor que", y)
else:
if x > y:
print(x, "é maior que", y)
else:
print(x, "é igual a", y)
x
Podemos substituir o uso de um if
ou if-else
aninhado em um else
pelo elif
, como mostrado a seguir:
x = int(input("Digite um numero: "))
y = int(input("Digite um numero: "))
if x < y:
print(x, "é menor que", y)
elif x > y:
print(x, "é maior que", y)
else:
print(x, "é igual a", y)
x
É possível termos mais de um elif
associado a um if
. Além disso, também podemos ter if-elif
sem um else
.
x
Comentários de linha e comentários em bloco
x
Em aulas anteriores, vimos que o caracter #
marca o início de um comentário de linha em Python, ou seja, tudo que está entre o caracter #
e o final da linha será ignorado pelo interpretador.
Veja o exemplo a seguir; nele, o segundo comando de atribuição de valor à variável a
é ignorado por estar depois do caracter #
.
a = 1
print(a)
#a = a + 1
print(a) # será que o valor de a foi modificado desde o print anterior?
1 1
x
Quando o primeiro #
de uma linha aparece dentro de uma string, então ele não será entendido como o início de um comentário de linha
print("Um caracter # dentro de uma string não inicia um comentário!")
Um caracter # dentro de uma string não inicia um comentário!
x
Para criar comentários que abrangem mais de uma linha, é mais conveniente usarmos a sequência de caracteres '''
para delimitar o início e o fim do bloco de comentário. Veja o exemplo abaixo:
a = 1
''' Este o início de um comentário em bloco
a = a + 1
A linha acima não modificará o valor da variável a,
por que ela está dentro do bloco de comentário! '''
print(a)
1
x
Problema 7
x
Dados um número inteiro n
, n>0
, e n
notas de uma turma de MAC2166, determinar a média da turma. Por exemplo, para a sequência
6
2.3 7.5 0.5 5.1 8.7 4.9
o seu programa deve escrever:
A média da turma é 4.833333333333333
x
Solução
n = int(input("Digite o número de alunos: "))
n_salvo = n
soma = 0.0
while n > 0:
nota = float(input("Digite uma nota: "))
n = n - 1
soma = soma + nota
print("A média da turma é ", soma/n_salvo)
x
Problema 8
x
Dados um número inteiro n
, n>0
, e uma sequência com n
médias de MAC, determinar:
1. quantos alunos aprovados (média ≥ 5.0);
2. item 1. + quantos alunos em recuperação (3.0 ≤ média ≤ 5.0);
3. item 2. + quantos alunos reprovados (média < 3.0); e
4. item 3. + quantos alunos excelentes (média ≥ 8.0).
Por exemplo, para a sequência
6
2.3 3.0 5.0 6.5 8.7 4.9
Temos:
3 alunos aprovados
1 alunos excelente
2 alunos em recuperação
1 aluno reprovado
Solução do item 1)
n = int(input("Digite o número de alunos: "))
conta_aprovados = 0
while n > 0:
media = float(input("Digite uma média: "))
n = n - 1
if media >= 5.0:
conta_aprovados = conta_aprovados + 1
print("Total de alunos aprovados: ", conta_aprovados)
x
Solução do item 2)
n = int(input("Digite o número de alunos: "))
conta_aprovados = 0
conta_recuperacao = 0
while n > 0:
media = float(input("Digite uma média: "))
n = n - 1
if media >= 5.0:
conta_aprovados = conta_aprovados + 1
elif media >= 3.0:
conta_recuperacao = conta_recuperacao + 1
print("Total de alunos aprovados: ", conta_aprovados)
print("Total de alunos de recuperacao: ", conta_recuperacao)
x
Solução do item 3)
n = int(input("Digite o número de alunos: "))
conta_aprovados = 0
conta_recuperacao = 0
conta_reprovados = 0
while n > 0:
media = float(input("Digite uma média: "))
n = n - 1
if media >= 5.0:
conta_aprovados = conta_aprovados + 1
elif media >= 3.0:
conta_recuperacao = conta_recuperacao + 1
else:
conta_reprovados = conta_reprovados + 1
print("Total de alunos aprovados: ", conta_aprovados)
print("Total de alunos de recuperacao: ", conta_recuperacao)
print("Total de alunos reprovados: ", conta_reprovados)
x
Solução do item 4)
n = int(input("Digite o número de alunos: "))
conta_aprovados = 0
conta_excelentes = 0
conta_recuperacao = 0
conta_reprovados = 0
while n > 0:
media = float(input("Digite uma média: "))
n = n - 1
if media >= 5.0:
conta_aprovados = conta_aprovados + 1
if media >= 8.0:
conta_excelentes = conta_excelentes + 1
elif media >= 3.0:
conta_recuperacao = conta_recuperacao + 1
else:
conta_reprovados = conta_reprovados + 1
print("Total de alunos aprovados: ", conta_aprovados)
print("Total de alunos excelentes: ", conta_excelentes)
print("Total de alunos de recuperacao: ", conta_recuperacao)
print("Total de alunos reprovados: ", conta_reprovados)
x
Problema extra
x
Dizemos que um número inteiro positivo é triangular se ele é o produto de três números inteiros consecutivos. Por exemplo, 120
é triangular, pois 4 × 5 × 6
é igual a 120
.
Dado um número inteiro positivo n
, verificar se n
é triangular.
Obs.: Este problema corresponde ao exercício 10 da lista de exercícios sobre inteiros.
'''
Programa que lê um inteiro positivo n e imprime uma mensagem
indicando se ele é ou não triangular
'''
print("Determina se um número n é triangular\n")
# leia o valor de n
n = int(input("Digite o valor de n: "))
i = 1
while i * (i+1) * (i+2) < n:
i = i + 1
if i * (i+1) * (i+2) == n:
print("%d é o produto %d*%d*%d" %(n,i,i+1,i+2))
else:
print("%d não é triangular" %(n))
x
Tópicos vistos na Aula 4
- tipo
float
- função
float()
de conversão destr
parafloat
- operador de divisão
/
- regras de precedência de operadores matemáticos
- mais execução condicional
if
- mais execução alternativa
if-else
- execução condicional encadeada
if-elif-else
x
Referências e outros materiais para estudo
- Computer Science Circles >> http://cscircles.cemc.uwaterloo.ca/
- Think Python - How to Think Like a Computer Scientist >> http://www.greenteapress.com/thinkpython/thinkpython.html
- Projeto MacMulti - Listas de exercícios (Introdução à Computação) >> http://www.ime.usp.br/~macmulti/exercicios/