segunda-feira, 19 de setembro de 2016

Mais funções e operadores que dão jeito

Temos visto algumas funções de Python que já nos permitem obter algumas conversões interessantes. Mas existem outras funções de cariz mais matemático, que vale a pena abordar agora. Comecemos pelas seguintes:
>>> abs(-4)
4
>>> abs(-4.7)
4.7
>>> round(4.567)
5
>>> round(4.567, 2)
4.57
Como já deve ter percebido, a função abs() devolve o absoluto de um número, isto é, o número sem sinal. Na prática, converte números (inteiros ou decimais) negativos em números positivos.
A função round() arredonda números. Se o argumento for só um número, arredonda-o ao inteiro mais próximo. Com dois argumentos, o segundo é o número de casas decimais pretendidas. Nada de especial até aqui.
E continuamos com pow(). Na sua forma mais simples, pow(x, y) é outra maneira de escrever x**y, ou seja, x elevado a y. No entanto, pow(x, y, z) é o mesmo que x**y%z, isto é, x elevado a y, módulo z. Tenho a certeza que vai descobrir alguma utilidade para isto!...
E também temos divmod(). Esta função, como o próprio nome indica, dá o divisor e o módulo de dois números. Um exemplo explica melhor:
>>> 7 // 3
2
>>> 7 % 3
1
>>> divmod(7, 3)
(2, 1)
>>> divmod(4.8, 2)
(2.0, 0.7999999999999998)
Este último exemplo ilustra bem o problema de aproximações imperfeitas de números decimais. Claro que o resto deveria ser 0,8.
E agora temos uma função muito gira: eval(). Esta pega numa cadeia de caracteres e tenta avaliar se o seu conteúdo é uma expressão matemática válida. Mais um exemplo:
>>> eval('2*3 + 5')
11
>>> eval('2**8-1')
255
>>> x=6
>>> eval('x*4 - 7')
17
Se não for uma expressão matemática válida, dá erro... Mas já viu bem o último exemplo? Apesar de o x ser uma variável, dado que lhe foi atribuído um valor, x é corretamente avaliado dentro da expressão e a função consegue usá-lo para calcular o resultado final! Eu acho isto giro...
Muito bem, vamos passar para outro tipo de matemática, a lógica booleana. E vamos confirmar que em Python também existem os três típicos operadores de conjunção (and), disjunção (or) e negação (not):
>>> 1 and 1
1
>>> True or False
True
>>> not False
True
>>> not 0
True
Pois é, aqui temos de fazer uma ressalva muito importante: embora a lógica booleana apenas trabalhe com valores de Falso ou Verdadeiro, em Python há vários valores que são interpretados como Falso:

  • None (um valor especial que se pode atribuir a uma variável, que significa que não tem valor)
  • False (óbvio, não?)
  • zero em qualquer tipo numérico (0, 0.0, 0j)
  • Qualquer sequência vazia: '', [], (), {} (uma cadeia de caracteres vazia, uma lista vazia, e outros tipos de sequência que veremos mais tarde)
Todos os outros valores são considerados Verdadeiros. Mas o melhor mesmo é não inventar muito e tentar usar essencialmente True ou False como operandos destes operadores, para evitar resultados inesperados...
Claro que o local óbvio para usar os operadores acima é num comando if, onde poderá construir condições mais elaboradas com o auxílio destes operadores. Experimente!

Sem comentários:

Enviar um comentário