Porque a variável letras_acertadas é alterada na função marca_chute_correto quando passada como parâmetro? Porque a função vazia chamando a variável da erro mesmo sendo chamada dentro do escopo(while) da variável palavras_acertada?
Se eu passei um parâmetro com o mesmo nome de uma variável para uma função, eu não estaria criando uma nova variável com o mesmo nome válida apenas no escopo na função que é diferente da variável que está fora da função que tem o mesmo nome? Existem ponteiros em Python como os da linguagem C? Como é que essa variável passada como parâmetro age para ser alterada por uma função?
Meu código está igual com exceção da atribuição a letras_acertadas que não fiz uma função e já passei direto, segue o código, ele não da erro nenhum, quero apenas entender melhor seu funcionamento:
from random import randrange
def jogar():
imprime_mensagem_abertura()
palavra_secreta = carrega_palavra_secreta()
letras_acertadas = ['_' for letra in palavra_secreta]#Modo de usar o for em apenas uma linha, LIST COMPREHENSIONS!!
print(letras_acertadas)
enforcou = False
acertou = False
erros = 0
while(not enforcou and not acertou):
chute = pede_chute()
print(chute)
if(chute in palavra_secreta):
marca_chute_correto(chute, letras_acertadas, palavra_secreta)
else:
erros += 1
desenha_forca(erros)
enforcou = erros == 7
acertou = "_" not in letras_acertadas
print(letras_acertadas)
if(acertou):
imprime_mensagem_vencedor()
else:
imprime_mensagem_perdedor(palavra_secreta)
def imprime_mensagem_abertura():
print('*********************************')
print('***Bem vindo ao jogo da Forca!***')
print('*********************************')
def carrega_palavra_secreta():
palavras = []
with open("palavras.txt", "r", encoding="UTF-8") as arquivo:#with é usado para abrir arquivos e deixar o python
for linha in arquivo: #responsavel por fecha-lo automaticamente caso dê erro no programa
linha = linha.strip() #Pesquisar mais sobre with e a função open()
palavras.append(linha)
print(palavras)
palavra_secreta = palavras[randrange(len(palavras))].upper()
arquivo.close()
return palavra_secreta
def pede_chute():
chute = input('Qual letra? ').upper().strip()
return chute
def marca_chute_correto(chute, letras_acertadas, palavra_secreta):
index = 0
for letra in palavra_secreta:
if chute == letra:
letras_acertadas[index] = letra
index += 1
def imprime_mensagem_vencedor():
#OMITIDO
pass
def imprime_mensagem_perdedor(palavra_secreta):
#OMITIDO
pass
def desenha_forca(erros):
#OMITIDO
pass