Jump to content

Ajuda trabalho Python


BooM
 Share

Recommended Posts

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 by BooM
Link to comment
Share on other sites

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

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. unsure.png

Link to comment
Share on other sites

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. unsure.png

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

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. happy.png

Link to comment
Share on other sites

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



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.

smile.png

Edited by BooM
Link to comment
Share on other sites

  • 6 months later...

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

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

#!/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 by doctore
Link to comment
Share on other sites

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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

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.