BooM Posted April 8, 2012 Share Posted April 8, 2012 (edited) Boas, preciso de uma ajuda num trabalho a entregar até amanhã à noite. O trabalho pede para fazer um procedimento que recebe duas variáveis (strings, numéricas ou listas), compara a estrutura dessas variáveis e devolve True se: -Nenhuma das variaveis é uma lista. -As duas são listas, têm o mesmo número de elementos e cada elemento de uma tem a mesma estrutura que o elemento correspondente da outra. Edited April 10, 2012 by BooM Link to comment Share on other sites More sharing options...
HugojNeves Posted April 9, 2012 Share Posted April 9, 2012 def same_structure(a,: if is_list(a)==True: if is_list(==False: return False if len(a)==len(: i=0 while i<len(a): [b]ret=same_structure(a[i],b[i])[/b] i=i+1 else: return False else: if is_list(==False: return True [b]return ret[/b][/code] Não te dá o output esperado naquele caso em particular (self.same_structure([ 1, [ 0 ], 1 ] , [ 2, 5, 3 ])) porque estás sempre a sobrepor o ret, ou seja ficas sempre com o último valor do ret. Se te der um falso nas comparações lá do meio pode-se perder. Esse é o erro. O último funciona por "sorte", porque o que dá origem ao falso está no último elemento, e é esse ret a falso que retornas. Link to comment Share on other sites More sharing options...
BooM Posted April 9, 2012 Author Share Posted April 9, 2012 def same_structure(a,: if is_list(a)==True: if is_list(==False: return False if len(a)==len(: i=0 while i<len(a): [b]ret=same_structure(a[i],b[i])[/b] i=i+1 else: return False else: if is_list(==False: return True [b]return ret[/b][/code] Não te dá o output esperado naquele caso em particular (self.same_structure([ 1, [ 0 ], 1 ] , [ 2, 5, 3 ])) porque estás sempre a sobrepor o ret, ou seja ficas sempre com o último valor do ret. Se te der um falso nas comparações lá do meio pode-se perder. Esse é o erro. O último funciona por "sorte", porque o que dá origem ao falso está no último elemento, e é esse ret a falso que retornas. Mas tenho que usar o 'while ou um 'for para dar a volta à lista ou não pode ter mesmo o loop assim? Dá-me a impressão que nem sequer é preciso usar loop. Link to comment Share on other sites More sharing options...
HugojNeves Posted April 9, 2012 Share Posted April 9, 2012 Mas tenho que usar o 'while ou um 'for para dar a volta à lista ou não pode ter mesmo o loop assim? Dá-me a impressão que nem sequer é preciso usar loop. Isso de dar a volta à lista parece-me certo. Não te esqueças: estás a "ignorar" um falso lá pelo meio. Se nas comparações entre elementos for dando True, False, True, o que estás a retornar é True, e não é isso que queres. Link to comment Share on other sites More sharing options...
BooM Posted April 9, 2012 Author Share Posted April 9, 2012 Parece que já está a dar. Adicionei um 'If' depois de receber o 'ret' e substituí o 'while' por um 'for'. def same_structure(a,: if is_list(a)==True: if is_list(==False: return False if len(a)==len(: i=0 for i in range(0,len(a)): ret=same_structure(a[i],b[i]) if ret==False: return False else: return False else: if is_list(==False: return True return ret [/code] [color=#000000]True[/color] [color=#000000]True[/color] [color=#000000]False[/color] [color=#000000]True[/color] [color=#000000]False[/color] Se alguém tem alguma maneira diferente de fazer ou algum melhoramento, não hesite em responder. Obrigado Hugo. Link to comment Share on other sites More sharing options...
HugojNeves Posted April 9, 2012 Share Posted April 9, 2012 Era também essa a minha forma de resolver. Quanto ao "while" ou "for", é igual, mas se vais usar o "for" acho que podes cagar no "i=0". O último "return ret" também acho que podes meter "return True", acho que se chegar a esse return é porque será sempre True. Link to comment Share on other sites More sharing options...
BooM Posted April 9, 2012 Author Share Posted April 9, 2012 (edited) Ficou assim. Faltava o ultimo caso "if ( is_list ( a ) = False) and ( is_list ( b ) = True) return False" e acabou por não precisar do 'ret'. Acho que está bueno. Edited April 10, 2012 by BooM Link to comment Share on other sites More sharing options...
GODfromage Posted October 14, 2012 Share Posted October 14, 2012 Para esta linguagem de programação, um colega meu precisa do seguinte: a ideia e pedir um valor a e um valor b e enquanto a+b>vinte e quatro ele vai tirando vinte e quatro q e para dar sempre um valor de horas dentro do periodo do dia Link to comment Share on other sites More sharing options...
doctore Posted October 14, 2012 Share Posted October 14, 2012 Para esta linguagem de programação, um colega meu precisa do seguinte: a ideia e pedir um valor a e um valor b e enquanto a+b>vinte e quatro ele vai tirando vinte e quatro q e para dar sempre um valor de horas dentro do periodo do dia Não estou a perceber. Supondo que ele recebe como parametros a=15 e b= 17, qual é o resultado esperado? Link to comment Share on other sites More sharing options...
Archie Posted October 14, 2012 Share Posted October 14, 2012 A+B-24 Link to comment Share on other sites More sharing options...
GODfromage Posted October 14, 2012 Share Posted October 14, 2012 Foi a info que ele me deu. Que precisava que o programa enqt A + B fosse maior que 24, retirasse 24 e quando fosse melhor que 24 para não fazer nada. Isto pela lógica seria um while A+B >24 c = A+B -24, A+B <24, C = A+B pelo que percebi ele quer algo deste tipo mas nunca trabalhei com esta linguagem. Link to comment Share on other sites More sharing options...
doctore Posted October 14, 2012 Share Posted October 14, 2012 (edited) #!/usr/bin/python def horas_iter(a,: c = a + b while c > 24: c -= 24 return c def horas(a,: if a + b > 24: return horas(a+b-24,0) else: return a+b print horas(15,18); print horas_iter(15,18); print horas(23,1); print horas_iter(23,1); print horas(23,141); print horas_iter(23,141); print horas(23,25); print horas_iter(23,25);[/code] Edited October 14, 2012 by doctore Link to comment Share on other sites More sharing options...
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