Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# pre-commit run --all-files
repos:
- repo: https://github.com/pre-commit/mirrors-autopep8
rev: '' # Use the sha / tag you want to point at
hooks:
- id: autopep8
- repo: https://github.com/pycqa/flake8
rev: '' # pick a git hash / tag to point to
hooks:
- id: flake8
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ y genera un Pull Request con tus cambios.
4. Un "X" significa que has adivinado correctamente un número en la posición correcta dentro de la secuencia.
5. Un "_" significa que has adivinado correctamente un número, pero en una posición incorrecta dentro de la secuencia.
6. Utilizando esta retroalimentación, deberás deducir la secuencia correcta.
Por ejemplo, si tu intento es "1234" y recibes una retroalimentación de "XX__",significa que has adivinado correctamente dos numero en posición y dos están el la posición incorrecta.
Por ejemplo, si tu intento es "1234" y recibes una retroalimentación de "XX__", significa que has adivinado correctamente dos números y están en la posición correcta y otros dos también fueron adivinados correctamente pero están en la posición incorrecta.
7. Con base en la retroalimentación recibida, realiza nuevos intentos ajustando tus suposiciones hasta que logres adivinar la secuencia correcta.
8. Continúa haciendo intentos y recibiendo retroalimentación hasta que logres descifrar la secuencia completa.

Expand Down
81 changes: 49 additions & 32 deletions codebreaker.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,51 @@
trueNumber = "1010";
"""
This module defines the Codebreaker class. It imports the
random Python module to generate digits randomly for the "right_number"
variable.
"""
import random


class Codebreaker:

def adivinar(self, numero=None):
if trueNumber == '':
return 'Number is not defined'

if numero is None or len(numero) != 4 or 'e' not in list(numero):
return "error"

if numero == trueNumber:
return True

resultadoX = ''
resultado_ = ''
arrayNumber = []

for x in len(numero):
if(arrayNumber[numero[x]] == True):
return 'error'

arrayNumber[numero[x]] = True

numero = list(numero)

for index, x in numero:
if trueNumber[index] == numero[index]:
resultadoX+='X'

elif x in trueNumber:
resultado_='_'

return resultadoX+resultado_
""" This class defines the Codebreaker object. """

def __init__(self):
"""
This method initializes the "right_number" variable to a string
converted from a 4 digit random number without repeated digits.
"""
self.right_number = str(''.join(random.sample("0123456789", 4)))

def guess_opponent_number(self, number=None):
"""
This method takes two parameters, self and number (with a default
value of None). It will test if the "number" entered by the user
matches the class' "right_number" variable, and if not, return an
"X" for each digit guessed correctly and in the right position,
and "_" for each number order guessed correctly but in the wrong
position.
"""

if number is None or len(number) != 4 or not number.isdecimal():
raise TypeError
if number == self.right_number:
return True

ok_number_ok_position = ''
ok_number_bad_position = ''
found_digits = [False for i in range(10)]

for digit in number:
if found_digits[int(digit)]:
raise ValueError
found_digits[int(digit)] = True

number = list(number)

for index, digit in enumerate(number):
if self.right_number[index] == number[index]:
ok_number_ok_position += 'X'
elif digit in self.right_number:
ok_number_bad_position += '_'

return ok_number_ok_position + ok_number_bad_position
39 changes: 26 additions & 13 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,31 @@
"""
This module will import the Codebreaker module and ask the user to enter a
4 digit number.
"""

from codebreaker import Codebreaker

intentos_totales = 10
# pylint: disable-msg=C0103
codebreaker = Codebreaker()
guess_number = 1

intento = 0

print('Jugar Codebreaker!')

while intento != intentos_totales:
number = input('Numero:');
resolve = codebreaker.adivinar(number)
print(resolve)
if resolve == True:
print('You win!!')
break

print('Let\'s play Codebreaker!')

while True:
number = input('Try to guess the 4 digit number (enter \'q\' to quit): ')
if number == 'q':
break
try:
result = codebreaker.guess_opponent_number(number)
except ValueError:
print("The number can't contain repeated digits!.")
except TypeError:
print("Please enter a 4 digit number!.")
else:
if not isinstance(result, str) and result:
print('You won! Number of guesses:', guess_number)
break
print(f'Incorrect! You\'ve guessed {guess_number} times.')
if len(result) > 0:
print(f'Hint: {result}')
guess_number += 1