I was doing a job and I ran into some problems. This code has a limitation: Whenever the player selects any number that has already been selected before, the code does not invalidate and is considered as an attempt. I would like a help to refine the code and whenever the player gives a kick that he has already given, the program should refuse it and send a message informing the player about this situation and asking him to try another kick. Obviously, that duplicate kick should not be counted with one of 10 attempts the player is entitled to. I thought about creating an array of 10 elements but I wrapped myself in how to run
# apresente jogo ao usuário
print('Você tem 10 chances de acertar o número que eu estou pensando.')
print('Trata-se de um valor entre 1 e 100. Então, vamos lá!')
print()
# gere número-alvo entre 1 e 100
from random import randint
alvo = randint(1, 100)
# inicialize indicador de acerto
acertou = False
# repita 10 vezes:
contador = 0
while contador <= 10:
# obtenha palpite do usuário
while True:
try:
palpite = int(input('Entre o seu palpite: ')
if palpite < 1 or palpite > 100:
raise ValueError
break
except ValueError:
print('Palpite inválido. Tente outra vez!')
contador = contador + 1
# se palpite atingiu o alvo:
if palpite == alvo:
# atualize indicador de acerto
acertou = True
# encerre o jogo
break
# senão:
else:
# comunique erro ao usuário
print('Errou! Tente novamente.\n' \
'Você ainda tem ', 10-contador, ' tentativa(s).')
print(40*'-'+'\n')
# encerre o jogo
if acertou: # comunique sucesso ao usuário
print('Parabéns!\n' \
'Você acertou o número após ', contador, ' tentativa(s).')
else:
# comunique fracasso ao usuário
print('Infelizmente, você fracassou.\n', \
'O número pensado era: ', alvo, ' \n', \
'Quem sabe a próxima vez!')
print('Até breve') # emita saudação final