#
# é possível declarar uma função no código de outra função 
#
# o código a seguir exemplifica essa possibilidade 
#
def media_harmonica ( a , b ) :
# numero é nulo?
    def nulo ( numero ) :
        if ( numero == 0.0 ) :
           return True 
        if ( numero == 0 ) :
           return True 
        return False      
# qual é o reverso de número?
    def reverso_de ( numero ) :
        if nulo ( numero ) :
           return 0.0 
        return 1.0 / numero 
# qual é a média harmônica dos números <a> e <b>?
    def media ( a , b ) : 
        a_reverso = reverso_de ( a ) 
        b_reverso = reverso_de ( b ) 
        soma = a_reverso + b_reverso 
        soma_reverso = reverso_de ( soma ) 
        dobro = 2.0 * soma_reverso 
        return dobro
# em quais circunstâncias e como obter a media?
    def alternativas ( a , b ) :
        if nulo ( a ) :
           return 0.0 
        if nulo ( b ) :
           return 0.0 
        return media ( a , b ) 
# qual é a média harmônica dos números <a> e <b>?
    return alternativas ( a , b )
# fim da funcão
#
# ecoar retorno da função para testar seu funcionamento 
#
#
# teste 01
#
a = 0 
b = 0 
print ( f'media_harmonica ( { a } , { b } ) = { media_harmonica ( a , b ) } ')
#
# teste 02
#
a = 0 
b = 999 
print ( f'media_harmonica ( { a } , { b } ) = { media_harmonica ( a , b ) } ')
#
# teste 03
#
a = 999
b = 0
print ( f'media_harmonica ( { a } , { b } ) = { media_harmonica ( a , b ) } ')
#
# teste 04
#
a = 999
b = 999
print ( f'media_harmonica ( { a } , { b } ) = { media_harmonica ( a , b ) } ')
# A escrita realizada pela execução do código é: 
media_harmonica ( 0 , 0 ) = 0.0 
media_harmonica ( 0 , 999 ) = 0.0 
media_harmonica ( 999 , 0 ) = 0.0 
media_harmonica ( 999 , 999 ) = 999.0