Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida sobre divisão em pyton

Olá Professor, tudo bom? Assistindo suas aulas, fiquei com a seguinte dúvida: Consigo fazer a divisão de dois números inteiros e ter como retorno números inteiros e números decimais?

Exemplo:

def divide_numbers(x,y):
return x/y

O que eu deveria colocar para que os testes abaixo funcionassem corretamente? Tentei dessa forma e nem todos os testes funcionaram... também tentei com:

def divide_numbers(x,y):
return float(x/y)

e não funcionou :-(

test.assert_equals(divide_numbers(4, 2), 2)
test.assert_equals(divide_numbers(10, 2), 5)
test.assert_equals(divide_numbers(9, 4), 2.25)
test.assert_equals(divide_numbers(21, 5), 4.2)
test.assert_equals(divide_numbers(9, 3), 3)
test.assert_equals(divide_numbers(1, 100), 0.01)
3 respostas

Olá Yara, Boa tarde Tente fazer um teste no

test.assert_equals(divide_numbers(4, 2.0)

para ver o resultado

Olá Aron, boa tarde! Nesse caso passa, mas a ideia é passar em todos os testes. Sendo a divisão dos números inteiros retornarem como resultado um número inteiro ou decimal. Como poderia fazer um cálculo para comtemplar todas as situações?

test.assert_equals(divide_numbers(9, 4), 2.25)
test.assert_equals(divide_numbers(21, 5), 4.2)
test.assert_equals(divide_numbers(1, 100), 0.01)

Inclusive os casos acima? Agradeço a ajuda!

solução!

Oiii Yara, tudo bem ?

É possível sim. Podemos fazer a seguinte lógica:

  • Se o resultado da divisão entre dois números tiver resto zero, ou seja, eles forem divisíveis um pelo outro, podemos retornar um número inteiro.
  • Caso contrário, caso haja resto da divisão entre estes dois números, podemos retornar um número decimal.

O código ficaria da seguinte maneira:

def divide_numbers(x,y):
    if x%y == 0:
        return x/y
    else:
        return x/ float(y)

print(divide_numbers(4, 2))
print(divide_numbers(10, 2))
print(divide_numbers(9, 4))
print(divide_numbers(21, 5))
print(divide_numbers(9, 3))
print(divide_numbers(1, 100))

Observe que quando o resultado da divisão houver resto, fazemos um casting. Ele nada mais é do que uma maneira de mudar o tipo da variável para que a mesma seja do tipo queremos no momento. No trecho de código do else, como sabemos que dará um número com vírgula, fazemos então a divisão de um inteiro por um float, o que resulta em um float. Pegou a ideia?

Acredito que isto sanará o seu problema.

Qualquer dúvida estou a disposição. Espero ter ajudado. Bons estudos!!!