Ir ao conteúdo
  • Cadastre-se

Python Exercício de listas e comparação Python


Ir à solução Resolvido por Midori,

Posts recomendados

questao6.png.dba6a9d6cba2113306091b398ac84176.png

 

Na minha cabeça esse código que eu fiz faz sentido, mas como eu sei que tá bem errado deixo p alguém corrigir se possível.

@Midorime salva de novo  kkkk é a última agora

*Tá retornando a True quando era pra retornar False

def questao(capmax,seq):
  i = 0
  j = 0
  while i<len(seq):
    soma = 0
    if seq[i+1]-seq[j+1]<=capmax:
      soma = soma + seq[i]
      i = i + 2
      else:
        soma = soma - seq[i]
        j = j + 1
        
  return (soma<=capmax)

print(questao(10,[0,5,2,7,3,3,5,2,7,0]))
        
  

 

Link para o comentário
Compartilhar em outros sites

@Felipe2719    creio que mesmo no python não se pode usar essa syntaxe no return , e seu código poderia ser assim  :

def questao(capmax, seq):
    i = 0
    j = 0
    while i < len(seq):
        soma = 0
        if seq[i + 1] - seq[j + 1] <= capmax:
            soma = soma + seq[i]
            i = i + 2
        else:
            soma = soma - seq[i]
            j = j + 1


    if soma <= capmax :
        return soma
    else:
        return capmax

print(questao(10, [0, 5, 2, 7, 3, 3, 5, 2, 7, 0]))

 

Link para o comentário
Compartilhar em outros sites

@Felipe2719     realmente você tem razão , agora que observei que o erro é de identação mesmo , o return está no início da linha , quando deveria estar na coluna na mesma posição do while , por que o return é da função , e seria assim  :

def questao(capmax, seq):
    i = 0
    j = 0
    while i < len(seq):
        soma = 0
        if seq[i + 1] - seq[j + 1] <= capmax:
            soma = soma + seq[i]
            i = i + 2
            else:
            soma = soma - seq[i]
            j = j + 1
    return (soma <= capmax)

print(questao(10, [0, 5, 2, 7, 3, 3, 5, 2, 7, 0]))

 

 

Link para o comentário
Compartilhar em outros sites

12 horas atrás, Felipe2719 disse:

Na minha cabeça esse código que eu fiz faz sentido, mas como eu sei que tá bem errado deixo p alguém corrigir se possível.

Com essa lista e capacidade está retornando corretamente True, mas se testar com lista [0,5,2,10,3,3,5,2,7,0] também vai retornar True quando devia ser False.

 

Acho mais fácil acumular a soma com o cálculo da quantidade de pessoas que entram e saem, assim só precisa de um if para comparar com a capacidade máxima,

soma += -seq[pos] + seq[pos + 1]

 

Com a lista [0,5,2,10,3,3,5,2,7,0] este é o resultado da quantidade de pessoas no elevador a cada loop: 5, 13, 13, 10 e 3. Veja que no segundo a soma já passou a capacidade máxima de 10 e a função já pode retornar False.

 

 

Link para o comentário
Compartilhar em outros sites

def questao(capmax,seq):
  pos = 0
  
  while pos<len(seq):
    soma = 0
    if soma<=capmax:
    soma+= seq[pos] + seq[pos + 1 ]
    pos = pos + 2
  return (capmax<=soma)

continua retornando a true pra qualquer valor :c

acho que o meu problema é na hora de retornar ou fazer a comparação do if, se eu troco um dos dois ou sempre da false ou sempre da true

Link para o comentário
Compartilhar em outros sites

  • Solução

@Felipe2719 Dessa forma não está acumulando a soma já que sempre atribui 0 a cada loop. E a soma deve ser comparada com capmax após o cálculo. O código corrigido,

 

def questao(capmax,seq):
    pos = 0
    soma = 0
    while pos < len(seq):
        soma += -seq[pos] + seq[pos + 1]
        if soma > capmax:
            return False
        pos += 2
    return True

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...