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
5 changes: 5 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[flake8]
ignore = E203, E266, E501, W503, F403, F401
max-line-length = 79
max-complexity = 18
select = B,C,E,F,W,T4,B9
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ venv/
ENV/
env.bak/
venv.bak/
.vscode

# Spyder project settings
.spyderproject
Expand Down
9 changes: 9 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
default_stages: [commit, push]
default_language_version:
python: python3.11
repos:
- repo: https://github.com/pre-commit/mirrors-autopep8
rev: "v2.0.2"
hooks:
- id: autopep8
types: ["python"]
70 changes: 38 additions & 32 deletions codebreaker.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,40 @@
trueNumber = "1010";
NUMBER_TO_GUESS = '1356'


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_

def guess_number(self, number: str = None) -> bool:
"""Attempts to guess a number entered and returns a result.

Args:
number (str optional): Number you want to guess. Defaults to None.

Returns:
bool: Returns True if the guessed number is correct.
Returns a string indicating the correctness of
each digit with 'X' representing a correct digit
in the correct position, and '_' representing a
correct digit in the wrong position.
Returns an error message if the number is not
valid or the number to guess is not defined.
Raises:
ValueError: Innapropiate argument value
"""
if NUMBER_TO_GUESS == '':
raise ValueError

if number is None or len(number) != 4:
raise ValueError

if number == NUMBER_TO_GUESS:
return True

result_track_correct = ''
result_track_incorrect = ''

for idx in range(len(NUMBER_TO_GUESS)):
if (number[idx] == NUMBER_TO_GUESS[idx]):
result_track_correct += 'X'
elif number[idx] in NUMBER_TO_GUESS:
result_track_incorrect += '_'
return result_track_correct + result_track_incorrect
26 changes: 14 additions & 12 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
from codebreaker import Codebreaker

intentos_totales = 10
TOTAL_ATTEMPTS = 5
attempts = 1
codebreaker = Codebreaker()

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('Play Codebreaker!')

while attempts <= TOTAL_ATTEMPTS:
try:
number = input('Guess the four digit number: ')
resolve = codebreaker.guess_number(number)
print(resolve)
if resolve:
print('You win!!')
break
attempts += 1
except ValueError:
print('Number cant be empty or its length is incorrect')
18 changes: 18 additions & 0 deletions requeriments.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
autopep8==2.0.2
cfgv==3.3.1
click==8.1.3
distlib==0.3.6
filelock==3.12.0
flake8==6.0.0
identify==2.5.24
mccabe==0.7.0
mypy-extensions==1.0.0
nodeenv==1.8.0
packaging==23.1
pathspec==0.11.1
platformdirs==3.5.1
pre-commit==3.3.2
pycodestyle==2.10.0
pyflakes==3.0.1
PyYAML==6.0
virtualenv==20.23.0