Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

"TypeError: 'int' object is not iterable" pq um inteiro não seria iterável?

Olá pessoal, de antemão desejo bons estudos a todes!

Estou tentando fazer melhorias no meu jogo de forca e decidi implementar a escolha de níveis. A ideia é que o usuário consiga escolher quantas tentativas terá baseando-se no nível escolhido.

Não entendi o erro.... Pq uma lista de inteiros não seria iterável, sendo que se trata de um número?

letras_acertadas = ["_" for letra in palavra_secreta] 
    letras_chutadas = []
    erros = []
    erros_ = [int(i) for i in erros]

    #ESCOLHENDO NÍVEL - EM CONSTRUÇÃO
    nivel =  int(input("Escolha seu nível\n(1) FÁCIL\n(2) MÉDIO\n(3) DIFICIL\n"))
    if (nivel) > 3:

        print("Escolha um nível válido!")
    else:
        print("Você escolheu o nível {}".format(nivel))

    if (nivel == 1):
        enforcou = erros_ == 15
    elif (nivel == 2):
        enforcou = erros_ == 10
    else:
        enforcou = erros_ = 5
...
else:
            erros += 1
            letras_chutadas.append(chute)   
            print("Letras incorretas foram chutadas até agora: {}".format(letras_chutadas))
                  # a representação acima é a mesma coisa que erros = erros + 1   
            print("Você errou. Não há {} na palavra secreta.\nRestam {} tentivas".format(chute,6-erros))

O ERRO: File "c:\Users\silva\PycharmProjects\jogos\forca.py", line 71, in jogo_forca erros += 1 TypeError: 'int' object is not iterable

e o código inteiro: import random

def jogo_forca(): #O "DEF" CRIA UMA FUNÇÃO CUSTOMIZADA PARA CHAMAR O JOGO EM OUTRO CÓDIGO

print ("*************************")
print ("*******BEM VINDE*********")
print ("***VAMO JOGAR FORCAAA***\n")


arquivo = open("palavras.txt","r")
palavras = []


for linha in arquivo:
    linha = linha.strip().upper()
    palavras.append(linha)

arquivo.close()


numero_index = random.randrange(0,len(palavras))
palavra_secreta = palavras[numero_index].upper()

letras_acertadas = ["_" for letra in palavra_secreta] #uso de list comprehension para tornar o uso do underscore dinâmic
letras_chutadas = []
erros = []
erros_ = [int(i) for i in erros]

#ESCOLHENDO NÍVEL - EM CONSTRUÇÃO
nivel =  int(input("Escolha seu nível\n(1) FÁCIL\n(2) MÉDIO\n(3) DIFICIL\n"))
if (nivel) > 3:

    print("Escolha um nível válido!")
    #continue
else:
    print("Você escolheu o nível {}".format(nivel))

if (nivel == 1):
    enforcou = erros_ == 15
elif (nivel == 2):
    enforcou = erros_ == 10
else:
    enforcou = erros_ = 5

enforcou = False 
acertou = False  


while (not enforcou and not acertou): #laço inicial do jogo 
    chute = input("\n**QUAL SEU CHUTE?**\n")
    chute = chute.strip().upper() 

    if len(chute)>1:
        print("Informe apenas uma letra")
        continue

    if (chute in palavra_secreta):
        index = 0
        for letra in palavra_secreta:
            if(chute.upper() == letra.upper()): 
                    letras_acertadas[index] = letra
            index +=  1
    else:
        erros += 1
        letras_chutadas.append(chute)   
        print("Letras incorretas foram chutadas até agora: {}".format(letras_chutadas)
        print("Você errou. Não há {} na palavra secreta.\nRestam {} tentivas".format(chute,6-erros))

    acertou = "_" not in letras_acertadas
    print(letras_acertadas)
if acertou:
    print("VOCÊ ACERTOU E FUGIU DA FORCA\n\n") 
else:
    print("Você perdeu! A palavra secreta é {}\n".format(palavra_secreta))


print("FIM DO JOGO")

Desde já valeu pela atenção pessoal!

1 resposta
solução!

Karol, segue o código debugado. Tomei a liberdade de finalizar o menu pra vc :)

import random

print("*************************")
print("*******BEM VINDE*********")
print("***VAMO JOGAR FORCAAA***\n")

arquivo = open("palavras.txt", "r")
palavras = []

for linha in arquivo:
    linha = linha.strip().upper()
    palavras.append(linha)

arquivo.close()

numero_index = random.randrange(0, len(palavras))
palavra_secreta = palavras[numero_index].upper()

letras_acertadas = ["_" for letra in palavra_secreta]
letras_chutadas = []
erros = 0 # Erros é um inteiro!
          # em algum momento vc pensou em faze-lo como lista, eu não veria o pq disso... se, por acaso,
          # isso for coerente para o seu codigo, então reescreva-o. Caso contrario, não faz sentido nesse contextp atual.



nivel = 4


                        # PRECISA COLOCAR ESSE MENU EM LOOP!!!!

enforcou = False
acertou = False

while(nivel > 0):
    if (nivel) > 3:
        nivel = int(input("Escolha seu nível\n(1) FÁCIL\n(2) MÉDIO\n(3) DIFICIL\n"))
    else:
        print("Você escolheu o nível {}".format(nivel))
        break

    if (nivel == 1):
        enforcou = erros == 15
    elif (nivel == 2):
        enforcou = erros == 10
    else:
        erros = 5

while (not enforcou and not acertou):
    chute = input("\n**QUAL SEU CHUTE?**\n")
    chute = chute.strip().upper()

    if len(chute) > 1:
        print("Informe apenas uma letra")
        continue

    if (chute in palavra_secreta):
        index = 0
        for letra in palavra_secreta:
            if(chute.upper() == letra.upper()):
                    letras_acertadas[index] = letra
            index += 1
    else:
        erros += 1
        letras_chutadas.append(chute)
        print("Letras incorretas foram chutadas até agora: {}".format(letras_chutadas)) # Essa linha de código estava errada. ATENCAO: sempre fechar parenteses!!!
        print("Você errou. Não há {} na palavra secreta.\nRestam {} tentivas".format(chute,6-erros))

    acertou = "_" not in letras_acertadas
    print(letras_acertadas)

if acertou:
    print("VOCÊ ACERTOU E FUGIU DA FORCA\n\n")
else:
    print("Você perdeu! A palavra secreta é {}\n".format(palavra_secreta))

print("FIM DO JOGO")

            # O LOOP AINDA CONTINUA INFINITO PARA O CASO DO JOGADOR PERDER SUAS TENTATIVAS.
            # VOCÊ AINDA PRECISAR CONSTRUIR E ALINHAR ESSA LOGICA AO RESTANTE DO CÓDIGO.

Como eu disse no comentário final, vc ainda precisa finalizar teu jogo. Ele ainda tem alinhamentos e lógicas a construir. Bem, eu também acabei de notar uma coisa: vc é de ciência da computação, correto? Caso positivo, sugiro a leitura do livro "Estrutura de dados usando C", de Tenenbaum (ele é O CARA da computação!). Notei, pelas tuas linhas de código, que você é bem curiosa e sabe se mover em muitas situações. No entanto, há espaço para melhorias. Você está mostrando dificuldade em analisar, visualizar e utilizar tipos de dados. E isso pode ser perigoso para alguém que pretenda seguir a cadeira de Backend (imagino que seja essa a vertente que está trilhando, correto?). Então, fica a dica. O python é LINDO. Mas, ele é bastante conciso, enxuto demais. Muito simplista (apesar de LINDO!!! repito hehe). A linguagem C é mais complexa, mais densa, mais analítica. Ela te "força" a aprender estruturas bem mais complicadinhas, o que, no final das contas, acaba te beneficiando no quesito raciocínio logico, por exemplo. Pense nisso. Talvez minhas dicas sirvam pra vc. (só mencionei isso pq vi que vc é estudante da área e me parece esforçada. Imaginei que valeria a pena comentar ;) ) .

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