MAC2166 - Introdução à Computação

07/04/2014 - Aula 4

O tipo float e a função float()

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:

In [1]:
 
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'>

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.

In [2]:
 
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'>
In [3]:
 
num = (float("2"))
print(num, type(num))
2.0 <class 'float'>

O operador de divisão: /

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:

In [4]:
 
a = 3 / 4
print(a, type(a))
0.75 <class 'float'>
In [5]:
 
b = 4 / 2
print(b, type(b))
2.0 <class 'float'>
In [6]:
 
c = 2.56 / 2
print(c, type(c))
1.28 <class 'float'>
In [7]:
 
d = 2.56 / 4.35
print(d, type(d))
0.5885057471264369 <class 'float'>

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.

Execução condicional encadeada: if-elif-else

Podemos usar comandos if ou if-else de forma aninhada, como mostrado no exemplo a seguir.

In [ ]:
 
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)

Podemos substituir o uso de um if ou if-else aninhado em um else pelo elif, como mostrado a seguir:

In [ ]:
 
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)

É possível termos mais de um elif associado a um if. Além disso, também podemos ter if-elif sem um else.

Comentários de linha e comentários em bloco

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 #.

In [8]:
 
a = 1
print(a)
#a = a + 1
print(a)   # será que o valor de a foi modificado desde o print anterior?
1
1

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

In [9]:
 
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!

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:

In [10]:
 
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

Problema 7

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

Solução

In [ ]:
 
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)

Problema 8

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çã(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)

In [ ]:
 
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)

Solução do item 2)

In [ ]:
 
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)

Solução do item 3)

In [ ]:
 
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)
 

Solução do item 4)

In [ ]:
 
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)

Problema extra

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.

In [ ]:
 
'''
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))

Tópicos vistos na Aula 4

  • tipo float
  • função float() de conversão de str para float
  • 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

Referências e outros materiais para estudo