Resolvendo equações do segundo grau com Python

Meu amigo Vicente Marçal me escreveu:

Bem, sei que és professor de Python, além de amante da linguagem e, por isso, acabei fazendo pesquisas sobre ela e estou estudando por conta, mais por hobby do que por qualquer outra coisa. Então, num tempinho livre que vc tiver, avalie esse meu pequeno script o qual disponibilizei na comunidade Viva o Linux:
http://www.vivaolinux.com.br/script/Raizes-de-Funcao-Quadratica, ele é bem simples, mas gostaria muito de sua opinião a respeito.

Eu respondi, e pedi a ele autorização para publicar minha resposta aqui. Como ele autorizou, lá vai. Vamos começar pelo arquivo, baskara.py:

# -*- encoding: utf-8 -*-
'''
Funções matemáticas para equações do segundo grau.
'''
from math import sqrt
 
def baskara(a,b,c):
  '''
  Função que fornece as raízes de uma equação do segundo grau.
  No caso de não haver raízes, retorna uma tupla vazia.
  Exemplos:
  >>> baskara(1,5,4)
  (-1.0, -4.0)
  >>> baskara(1,4,4)
  (-2.0,)
  >>> baskara(4,4,4)
  ()
  >>> baskara(0,4,2) # se a é zero, temos uma equação do primeiro grau
  (-0.5,)
  '''
  a,b,c=float(a),float(b),float(c)
  if(a==0):return (-c/b,)
  delta=b**2-4*a*c
  if delta<0:return ()
   if delta==0:return (-b/(2*a),)
   return ((-b+sqrt(delta))/(2*a),(-b-sqrt(delta))/(2*a))
  
 if __name__=="__main__":
   # Se rodou o arquivo diretamente, sem importar, roda os testes.
   import doctest
   doctest.testmod()
 

 

E meus comentários:

Cara, para que tanto underline? O underline no python indica que algo é especial. Underlines no começo indicam algo privado, em que você não deve mexer. No começo e no fim, indicam um nome especial, criado pela linguagem. No caso de sua função, não há necessidade de underline em nada, nem no nome da função, nem nos parâmetros.

Segue anexa minha implementação. Os pontos a notar:

1. Docstring. Aquele formato de comentários que eu estou usando serve para que o Python entenda que eles são documentação. Coloque meu arquivo em algum lugar em sua máquina, rode o Python e execute:

import baskara
help(baskara)

Você vai entender.

2. Doctest. Se você reparar, na docstring da função há um trecho de exemplo que parece uma sessão do shell interativo. Está lá assim de propósito. Esperimente quebrar a função. Por exemplo, modifique a linha que calcula o delta, trocando o número 2 por 3. Em seguida execute:

python baskara.py

Ele vai rodar os testes automáticos. Você deve ver três erros.

E é isso aí, boa sorte com o Python, é uma linguagem que vale a pena estudar.