Notas da P1

Notas da P1

por Marcelo Queiroz -
Número de respostas: 11

Boa noite, pessoal!

As notas da P1 estão no PACA. Quem quiser fazer a revisão da prova poderá fazê-lo amanhã no final da manhã (assim que acabar a segunda aula, +/- 11:45).

Abraços,

Marcelo

P.S.: e aquele exercício com strings da aula de hoje? perceberam o erro da segunda implementação?

 

Em resposta à Marcelo Queiroz

Re: Notas da P1

por Caio Túlio de Deus Andrade -

Olá, professor. Aonde será feita a revisão das notas? 

Em resposta à Caio Túlio de Deus Andrade

Re: Notas da P1

por Marcelo Queiroz -

Opa, que distração! Obrigado por avisar. Será na minha sala (205-C).

Abraço,

Marcelo

Em resposta à Marcelo Queiroz

Re: Notas da P1

por Caio Túlio de Deus Andrade -

Ah, professor, mais uma coisa : às quartas, o professor Yoshi aplica exercícios em sala ao fim da aula, então a aula termina de fato em torno das 12h. Tem como ver a nota nesse horario? Obrigado!

Em resposta à Marcelo Queiroz

Re: Notas da P1

por Bento Bruno Pereira -

Se eu não estou me enganando com o código o erro é que, se nós chegamos ao final da string1 e o último elemento não é o caracter que estamos procurando, ele vai colocar este último caracter e adicionar o nosso contador de 1. Nesse momento, o contador = len(string1) e saímos do while. Assim, o if será executado, para checar se string1[contador] == caracter. Porém, a string1 só vai até o index len(string1) - 1, logo será um erro de index out of range

Em resposta à Bento Bruno Pereira

Re: Notas da P1

por Marcelo Queiroz -

Olá!

Vale a pena lembrar qual era o código mesmo, afinal não fizemos nada no computador hoje... eu mesmo nem anotei o que estava na lousa. Achava que era algo +/- assim:

resultado = ""
i = 0
for c in str2:
    while i<len(str1) and s
tr1[i]!=c:
        resultado += str1[i]
        i += 1
    if i<len(str1):

        resultado += coringa
        i += 1

nesse caso, o if serviria para nos certificarmos de que o caractere c foi encontrado antes da string 1 acabar; mas como você disse que a condição do if era str1[i]==c, então nesse caso você está certo, vai dar um erro de indexação pois não estaríamos checando se i<len(str1); uma possível solução seria corrigir o if para o formato acima. Assim, quando a string 1 acabar (i==len(str1)), o laço externo vai apenas terminar de "consumir" os caracteres da string 2 (dava pra usar um break também).

Se alguém tiver anotado as duas soluções que eu escrevi na lousa e puder compartilhar aqui no fórum, agradeço!

SÓ QUE não era esse o erro que eu estava pensando quando propus que vocês diagnosticassem essa segunda solução... ou seja, o código tinha mais de um erro, e ainda não funciona!! piscando

Mais papites?

Abraços,

Marcelo

 

Em resposta à Marcelo Queiroz

Re: Notas da P1

por Rodrigo Lessinger -

O problema é o caso contrário, se consumir toda a string 2 ele não vai completar com o restante da string 1 se ela ainda tiver caracteres

 

Teria que verificar depois se percorremos todos os indices, se não, teria que adicionar os índices de i até o fim da string 1

Em resposta à Marcelo Queiroz

Re: Notas da P1

por Gabriel Brandão de Almeida -

As duas soluções que vimos em sala:

#1

resultado = ""
i = 0
for c in str1:
if i<len(str2) and str2[i]==c:
resultado += coringa
i += 1
else: resultado += c
 
#2
resultado = ""
i = 0
for c2 in str2:
while i<len(str1) and str1[i]!=c2:
resultado += str1[i]
i += 1
if i<len(str1): 
resultado += coringa
i += 1

Na solução 2, o problema ocorre quando todos os caracteres de str2 são encontrados e substituídos pelo coringa. Quando isso acontece, o que sobra da str1 não é copiado para o resultado após o fim do for.

Em resposta à Gabriel Brandão de Almeida

Re: Notas da P1

por Gabriel Brandão de Almeida -

Para resolver isso, nós podemos adicionar ao fim do código a verificação :

if len(resultado)!=len(str1): resultado += str1[len(resultado):]