MAC2166 - Introdução à Computação

23/03/2017 - 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 número 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 *, divisão /, divisão inteira // e resto da divisão inteira %, 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 [8]:
def main():
    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)

#--------
main()
Digite um numero: 23
Digite um numero: 78
23 é menor que 78

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

In [9]:
def main():
    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)

#--------
main()
Digite um numero: 23
Digite um numero: 78
23 é menor que 78

É 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 caractere # 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 [10]:
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 [11]:
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 [12]:
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 4.1

Faça um programa que, dados um número inteiro n, n>0, e n notas de uma turma de MAC2166, determine 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.83

Solução

In [13]:
def main():
    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 é %.2f " %(soma/n_salvo))


#----------
main()
Digite o número de alunos: 5
Digite uma nota: 3.5
Digite uma nota: 9.8
Digite uma nota: 5.6
Digite uma nota: 7.75
Digite uma nota: 6
A média da turma é 6.53 

Problema 4.2

Dados um número inteiro n, n>0, e uma sequência com n médias de MAC2166, 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

2 alunos em recuperação

1 alunos reprovados

1 alunos excelentes

Solução parcial (item 1)

In [14]:
def main():
    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)

#----------
main()
Digite o número de alunos: 6
Digite uma média: 2.3
Digite uma média: 3.0
Digite uma média: 5.0
Digite uma média: 6.5
Digite uma média: 8.7
Digite uma média: 4.9
Total de alunos aprovados:  3

Solução parcial (item 2)

In [15]:
def main():
    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)

#----------
main()
Digite o número de alunos: 6
Digite uma média: 2.3
Digite uma média: 3
Digite uma média: 5
Digite uma média: 6.5
Digite uma média: 8.7
Digite uma média: 4.9
Total de alunos aprovados:  3
Total de alunos de recuperacao:  2

Solução parcial (item 3)

In [17]:
def main():
    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)

#----------
main()
Digite o número de alunos: 6
Digite uma média: 2.3
Digite uma média: 3
Digite uma média: 5
Digite uma média: 6.5
Digite uma média: 8.7
Digite uma média: 4.9
Total de alunos aprovados:  3
Total de alunos de recuperacao:  2
Total de alunos reprovados:  1

Solução parcial (item 4)

In [18]:
def main():
    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)

#----------
main()
Digite o número de alunos: 6
Digite uma média: 2.3
Digite uma média: 3
Digite uma média: 5
Digite uma média: 6.5
Digite uma média: 8.7
Digite uma média: 4.9
Total de alunos aprovados:  3
Total de alunos excelentes:  1
Total de alunos de recuperacao:  2
Total de alunos reprovados:  1

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 [19]:
'''
Programa que lê um inteiro positivo n e imprime uma mensagem
indicando se ele é ou não triangular
'''
def main():
    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))

#----------
main()
Determina se um número n é triangular

Digite o valor de n: 120
120 é o produto 4*5*6

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