Jump to content

Recommended Posts

Posted

Boa tarde , tenho uma duvida num exercício de python.

import math

def soma_raizes(n):
  square_root = reduce(lambda x,y:x+math.sqrt(y),range(1,n+1))
  return square_root
  print(soma_raizes(3))

def lista_soma_raizes(n):
  ...

Basicamente o que a primeira função (soma_raizes) faz , é receber um numero(n) e retornar a soma das raízes até esse numero.

A minha dúvida está na segunda função(lista_soma_raizes) , que o que faz é basicamente isto: [ √ 1, √ 1 + √ 2, √ 1 + √ 2 + √ 3, . . . , Σ n i=1 √ i] usando a primeira função.

A minha dúvida está no facto de ao usar o reduce apenas aparecer o resultado final e não os passos (como um for) em programação iterativa.

Alguém me pode esclarecer?

Cumprimentos

Posted

@Joãop123

Já tentaste consultar a documentação da função reduce()? Se perceberes como funciona, torna-se muito simples compreender o porquê de não aparecer nenhum passo intermédio e apenas o resultado final (o próprio nome da função é indicativo disso mesmo).

Posted
16 minutos atrás, pwseo disse:

@Joãop123

Já tentaste consultar a documentação da função reduce()? Se perceberes como funciona, torna-se muito simples compreender o porquê de não aparecer nenhum passo intermédio e apenas o resultado final (o próprio nome da função é indicativo disso mesmo).

Sim já estive a ver a documentação e parece-me que aqui deveria usar um map() , estou correto?

Posted

Sim, podes utilizar a função map() em vez do lambda relativamente complexo que tens ali. Tenta imaginar o fluxo de dados: primeiro, envias a lista de números para a função map() que vai aplicar math.sqrt() a cada elemento, e depois envias o resultado disso para a reduce(), que vai «reduzir» (ou colapsar) um par de cada vez, somando cada par.

  • 1 month later...
Posted

Você pode fazer isso com map ou com list comprehensions:

[reduce(lambda x,y: x+math.sqrt(y), range(1,x+1),0) for x in range(1,n+1)]

Reduce sempre retorna um único elemento. Esta solução é ineficiente, mas acho que você esta praticando o uso de reduce, certo?

Ela sempre trabalha com 2 valores de entrada. O primeiro é o resultado anterior e o segundo o elemento atual.

A solução tradicional seria:

sraizes = []
soma = 0
for x in range(1,n+1):
    soma += math.sqrt(x)
    sraizes.append(soma)

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.