1
resposta

index

Olá, foi apresentado o uso do find() e que seria possível acessar a posição de caracteres do string por exemplo:

palavra = "dados"
print(palavra.find("d",1))
    //2

No entanto o que foi apresentado para encontrar a posição do caractere foi o for:

    index = 0
    for letra in palavra_secreta:
        if (chute.upper() == letra.upper()):
            print("Encontrei a letra {} na posição {}".format(letra, index))
        index = index + 1
    print("Jogando...")

o format só vai substituir chave pelo que eu coloco. Então se o index incrementa a cada letra porque se eu inserir no input a letra A a saída não será A 0 A 1 A 2 A 3 A 4 A 5 ?

Alguém poderia explicar por favor ?

1 resposta

Olá Lucas.

Primeiro a sua duvida, "se inserir no input a letra A a saída não será A 0 A 1 A 2 A 3 A 4 A 5 ?", isso não acontece porque só imprimimos na saída se entrarmos no if

        if (chute.upper() == letra.upper()):
            print("Encontrei a letra {} na posição {}".format(letra, index))

E só entramos nesse if quando o chute for igual a letra atual.

Agora quanto ao questionamento do find, o find não funciona para o nosso 'problema' porque ele encontra somente a primeira letra igual e retorna a sua posição, como podemos ver na documentação, então se uma palavra tem letras repetidas não conseguiríamos saber só utilizando ele.

palavra = "dados"
print(palavra.find("d",1)) //2

Quebrei a cabeça e consegui pensar em uma combinação de find e for, mas não vi nenhuma ganho e a logica ficou até mais complexa que a solução que o professor apresentou utilizando somente o for e o if.

palavra_secreta.upper()
chute.upper()

#ja que sempre somo 1 no index, para comecar de 0 devo setar ele como -1
index = -1 
#ja que o index comeca em -1 tenho que criar uma variavel que permita ele entrar no while
first = True 
#entra no while caso seja a primeira rodada e ou index direfente de -1
while index != -1 or first: 
    #registra que nao estamos mais na primeira rodada
    first = False 
    #retorna  a pos da primeira ocorrencia da letra e comeca a buscar apartir da pos do index
    index = palavra_secreta.find(chute,index+1)
    #-1 indica que o find não encontrou a letra na palavra_secreta
    if index != -1: 
        print("Encontrei a letra '{}' na posição {}".format(chute, index))

Resumidamente, esse código busca pelo chute na palavra_secreta utilizando o find e começa a sua busca pelo index, tive que incluir +1 porque se não ele ficava preso na primeira ocorrência da letra.

Não recomendo a solução acima, a solução do professor é bem mais legível e intuitiva, vamos analisa-la:

 index = 0
    for letra in palavra_secreta:
        if (chute.upper() == letra.upper()):
            print("Encontrei a letra {} na posição {}".format(letra, index))
        index = index + 1
    print("Jogando...")

Primeiro inicializamos a variável index com 0, isso porque a primeira letra que vamos olhar é a primeira da palavra, então de índice 0.

 index = 0

Depois temos o for, que vai percorrer toda a nossa palavra_secreta, sendo que a cada rodada a variável letra vai ser uma das letras da palavra respeitando a sequencia.

 index = 0
    for letra in palavra_secreta:

Agora temos o if, nele comparamos o nosso chute com a letra atual e se eles forem iguais entramos no if.

 index = 0
    for letra in palavra_secreta:
        if (chute.upper() == letra.upper()):

Se entrarmos no if, vamos imprimir a letra atual e o valor atual da variável index.

 index = 0
    for letra in palavra_secreta:
        if (chute.upper() == letra.upper()):
            print("Encontrei a letra {} na posição {}".format(letra, index))

Agora uma parte importante, independente se entramos ou não no if, passamos por essa linha que soma 1 no valor atual da variável index, e fazemos isso porque queremos que a variável index represente a letra atual que estamos, avançando sempre que o for alterar a letra que estamos olhando.

 index = 0
    for letra in palavra_secreta:
        if (chute.upper() == letra.upper()):
            print("Encontrei a letra {} na posição {}".format(letra, index))
        index = index + 1

No fim, quando tivermos passado por todas as letras da palavra secreta, o for termina e imprimimos a palavra Jogando.

 index = 0
    for letra in palavra_secreta:
        if (chute.upper() == letra.upper()):
            print("Encontrei a letra {} na posição {}".format(letra, index))
        index = index + 1
    print("Jogando...")

Espero ter respondido sua duvida, esclarecido sobre o find e sobre porque a solução do professor é a mais indicada. Se tiver alguma duvida não hesite em perguntar.

Bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software