Guest Shad07 Posted April 10, 2016 at 06:16 PM Report #595080 Posted April 10, 2016 at 06:16 PM (edited) Boa Tarde, Precisava de uma ajuda: Edited April 24, 2016 at 04:23 PM by Shad07
pwseo Posted April 10, 2016 at 09:02 PM Report #595088 Posted April 10, 2016 at 09:02 PM Shad07, A primeira questão é relativamente simples: podes utilizar um dicionário onde armazenas a contagem de cada nome. Depois basta apresentar os resultados por ordem alfabética. A segunda questão é um pouco mais complexa, mas também nada de especial: primeiro tens que ordenar a lista por data, e fazer uma soma cumulativa das calorias. O que fizeste até agora?
Guest Shad07 Posted April 11, 2016 at 04:48 PM Report #595149 Posted April 11, 2016 at 04:48 PM (edited) @pwseo Até agora tenho isto para a primeira função: Mas não sei se será a melhor forma de fazer... Edited April 24, 2016 at 04:23 PM by Shad07
Guest Shad07 Posted April 11, 2016 at 05:10 PM Report #595150 Posted April 11, 2016 at 05:10 PM (edited) . Edited April 24, 2016 at 04:24 PM by Shad07
pwseo Posted April 11, 2016 at 05:36 PM Report #595152 Posted April 11, 2016 at 05:36 PM Shad07, Vamos com calma, parece que estás ali a fazer alguma confusão na definição da função e invocação da mesma. Tu já tinhas uma variável lista que continha os dados relevantes. Por esse motivo, a tua participacoes() seria antes definida assim: def participacoes(dados): return collections.Counter(zip(*dados)[0]) Por outro lado, a invocação seria assim: >>> participacoes(lista) Counter({'Ana': 4, 'Eva': 2, 'Dulce': 1}) Invocar a função com o argumento 'dados' (repara nas aspas que colocaste lá) é errado e no teu caso só funciona porque voltaste a definir a variável dados dentro da tua função. É esta confusão a que me refiro. O teu código leva-me ainda a colocar outra questão: tu percebes o que está a acontecer quando escreves zip(*dados)[0]? É uma operação composta razoavelmente complexa que me parece desnecessária. Consigo replicar a tua função da seguinte forma: def particip_pwseo(dados): return collections.Counter(elem[0] for elem in dados) >>> particip_pwseo(lista): Counter({'Ana': 4, 'Eva': 2, 'Dulce': 1}) Já agora, deixa-me perguntar-te: os resultados podem vir por qualquer ordem? Ou devem ser ordenados por ordem alfabética do nome? Agora falta pensares numa forma de devolver apenas os números. Mais uma vez, lê com atenção o que escrevi e pensa se compreendeste tudo... Em caso de dúvida não hesites. É melhor perguntares do que utilizares código que não compreendes.
Guest Shad07 Posted April 11, 2016 at 05:59 PM Report #595154 Posted April 11, 2016 at 05:59 PM (edited) . Edited April 24, 2016 at 04:24 PM by Shad07
pwseo Posted April 12, 2016 at 01:41 PM Report #595187 Posted April 12, 2016 at 01:41 PM Shad07, Vou tentar exemplificar sem te dar a solução directamente. Imagina o seguinte dicionário d que, como sabes, não é ordenado: >>> d = { 'd': 1, 'c': 2, 'b': 3, 'a': 4 } >>> d {'a': 4, 'd': 1, 'b': 3, 'c': 2} O que acontece se aplicarmos a função sorted() a d? >>> sorted(d) ['a', 'b', 'c', 'd'] A partir daqui, facilmente conseguimos extrair os números correspondentes pela ordem que obtivemos: resultados = [] for x in sorted(d): resultados.append(d[x]) # ou, de uma forma mais compacta: resultados = [ d[x] for x in sorted(d) ] Com esta solução não precisas de dict.items() (que sugeri numa thread semelhante). O dict.items() é porreiro mas o motivo pelo qual é porreiro fica um pouco fora do âmbito deste tópico.
Guest Shad07 Posted April 12, 2016 at 05:43 PM Report #595201 Posted April 12, 2016 at 05:43 PM (edited) . Edited April 24, 2016 at 04:24 PM by Shad07 indent, syntax highlight.
pwseo Posted April 12, 2016 at 07:06 PM Report #595205 Posted April 12, 2016 at 07:06 PM Shad07, Tu percebes qual é o papel do nome dados na definição da função participacoes()? Algo me diz que não estás muito à vontade com a definição de funções. E já tentaste testar o que o teu código faz passo-a-passo?
Guest Shad07 Posted April 12, 2016 at 07:52 PM Report #595210 Posted April 12, 2016 at 07:52 PM (edited) pwseo, Sinceramente estou um bocado baralhado Edited April 12, 2016 at 07:52 PM by Shad07
pwseo Posted April 12, 2016 at 08:01 PM Report #595212 Posted April 12, 2016 at 08:01 PM É conveniente que compreendas o que estás a fazer, caso contrário estás apenas a mexer em coisas complicadas sem saber o que fazem. O que aprendeste sobre a definição de funções?
Guest Shad07 Posted April 12, 2016 at 09:17 PM Report #595222 Posted April 12, 2016 at 09:17 PM (edited) . Edited April 24, 2016 at 04:24 PM by Shad07
pwseo Posted April 12, 2016 at 09:32 PM Report #595225 Posted April 12, 2016 at 09:32 PM Aprendi o básico: definir a função def(..), if's, while's, for's , ... Na função particpacoes o argumento dados tem de receber uma lista de tuplos tal como está acima: (...) Se a função recebe a lista como argumento, por que motivo te referes a ela directamente dentro da função? E outra questão: o que fazem, individualmente, estas linhas? resultado = [ lista[x] for x in sorted(lista) ] return collections.Counter(elem[0] for elem in resultado)
Guest Shad07 Posted April 12, 2016 at 09:49 PM Report #595228 Posted April 12, 2016 at 09:49 PM (edited) A 1ª linha faz com que a lista fique ordenada alfabeticamente A 2ª cria um dicionário Edited April 24, 2016 at 04:25 PM by Shad07
pwseo Posted April 13, 2016 at 08:04 PM Report #595275 Posted April 13, 2016 at 08:04 PM E a pergunta agora é simplesmente: consegues perceber por que motivo essas 2 operações por essa ordem resultam num erro? Que dúvidas tens em geral? Quais são os pontos de Python que menos compreendes (não especificamente neste problema). Fico com a impressão de que mesmo resolvendo este exercício, não compreendes de que forma o conseguiste.
Guest Shad07 Posted April 13, 2016 at 08:08 PM Report #595276 Posted April 13, 2016 at 08:08 PM Não percebo porque é que dá erro... Tenho mais dificuldades em é mesmo no criar a função, nunca sei por onde começar.
pwseo Posted April 13, 2016 at 08:26 PM Report #595278 Posted April 13, 2016 at 08:26 PM Então tens que fazer isso manualmente, numa linha de comandos do Python. Pegas na tua variável original, que chamaste de lista e vais aplicando o raciocínio até chegares ao resultado pretendido. Colocas o seguinte num ficheiro, por exemplo shad07.py: lista = [ ('Ana', 'Lisboa', 42195, '10-18', 2224), ('Eva', 'Nova Iorque', 42195, '06-13', 2319), ('Ana', 'Toquio', 42195, '02-22', 2403), ('Eva', 'Sao Paulo', 21098, '04-12', 1182), ('Ana', 'Sao Paulo', 21098, '04-12', 1096), ('Dulce', 'Toquio', 42195, '02-22', 2449), ('Ana', 'Boston', 42195, '04-20', 2187)] E agora invocas o interpretador assim: $ python -i shad07.py Agora tens pronto o ambiente para fazeres o que pretendes: >>> [ elem[0] for elem in lista ] ['Ana', 'Eva', 'Ana', 'Eva', 'Ana', 'Dulce', 'Ana'] >>> from collections import Counter >>> counts = Counter([ elem[0] for elem in lista ]) >>> counts Counter({'Ana': 4, 'Eva': 2, 'Dulce': 1}) >>> sorted(counts) ['Ana', 'Dulce', 'Eva'] >>> [ counts[x] for x in sorted(counts) ] [4, 1, 2] Agora tens que converter isto para uma função... mais que isto não posso fazer.
Guest Shad07 Posted April 14, 2016 at 08:36 PM Report #595320 Posted April 14, 2016 at 08:36 PM (edited) . Edited April 24, 2016 at 04:25 PM by Shad07
Guest Shad07 Posted April 14, 2016 at 09:15 PM Report #595326 Posted April 14, 2016 at 09:15 PM (edited) . Edited April 24, 2016 at 04:25 PM by Shad07
VivaPython Posted April 14, 2016 at 09:19 PM Report #595327 Posted April 14, 2016 at 09:19 PM shad07 , o que é q fizeste para te aparece isso? Que codigo usaste ?
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now