From 7686b9d255d8dccbe2e1f45fb758816a3a56db8a Mon Sep 17 00:00:00 2001 From: joselofierro Date: Sun, 28 May 2023 10:05:11 -0500 Subject: [PATCH 1/3] =?UTF-8?q?Aplica=20PEP=208,=20a=C3=B1ade=20hook=20pre?= =?UTF-8?q?-commit=20y=20modifica=20el=20proyecto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .flake8 | 5 +++ .gitignore | 1 + .pre-commit-config.yaml | 9 ++++++ codebreaker.py | 71 ++++++++++++++++++++++------------------- main.py | 21 ++++++------ requeriments.txt | 18 +++++++++++ 6 files changed, 82 insertions(+), 43 deletions(-) create mode 100644 .flake8 create mode 100644 .pre-commit-config.yaml create mode 100644 requeriments.txt diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..b9a569e --- /dev/null +++ b/.flake8 @@ -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 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 68bc17f..0c4c411 100644 --- a/.gitignore +++ b/.gitignore @@ -127,6 +127,7 @@ venv/ ENV/ env.bak/ venv.bak/ +.vscode # Spyder project settings .spyderproject diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..805f964 --- /dev/null +++ b/.pre-commit-config.yaml @@ -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"] diff --git a/codebreaker.py b/codebreaker.py index ae8aa27..7e0dc2c 100644 --- a/codebreaker.py +++ b/codebreaker.py @@ -1,34 +1,41 @@ -trueNumber = "1010"; +from typing import Union +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 adivinar(self, number: str = None) -> Union[bool, str]: + """Attempts to guess a number entered and returns a result. + + Args: + number (str optional): Number you want to guess. Defaults to None. + + Returns: + Union[bool, str]: 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. + """ + if NUMBER_TO_GUESS == '': + return 'Number to guess is not defined' + + if number is None or len(number) != 4: + return 'Number is empty or length of numbers is wrong' + + if number == NUMBER_TO_GUESS: + return True + + resultTrack = '' + + for idx in range(len(NUMBER_TO_GUESS)): + if (number[idx] == NUMBER_TO_GUESS[idx]): + resultTrack += 'X' + elif number[idx] in NUMBER_TO_GUESS: + resultTrack += '_' + else: + resultTrack += '#' + + return resultTrack diff --git a/main.py b/main.py index a3e1ccd..7cb1389 100644 --- a/main.py +++ b/main.py @@ -1,18 +1,17 @@ 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 - - +while ATTEMPTS <= TOTAL_ATTEMPTS: + number = input('Adivina el número de 4 cifras: ') + resolve = codebreaker.adivinar(number) + print(resolve) + if resolve is True: + print('You win!!') + break + ATTEMPTS += 1 diff --git a/requeriments.txt b/requeriments.txt new file mode 100644 index 0000000..52a2536 --- /dev/null +++ b/requeriments.txt @@ -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 From 77140313450afe974d97d277b95deba409f5b4d4 Mon Sep 17 00:00:00 2001 From: joselofierro Date: Thu, 1 Jun 2023 21:56:58 -0500 Subject: [PATCH 2/3] fix: Aplica cambios de code review --- codebreaker.py | 23 +++++++++++------------ main.py | 23 +++++++++++++---------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/codebreaker.py b/codebreaker.py index 7e0dc2c..7eadd76 100644 --- a/codebreaker.py +++ b/codebreaker.py @@ -1,41 +1,40 @@ -from typing import Union NUMBER_TO_GUESS = '1356' class Codebreaker: - def adivinar(self, number: str = None) -> Union[bool, str]: + 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: - Union[bool, str]: Returns True if the guessed number is correct. + 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 == '': - return 'Number to guess is not defined' + raise ValueError if number is None or len(number) != 4: - return 'Number is empty or length of numbers is wrong' + raise ValueError if number == NUMBER_TO_GUESS: return True - resultTrack = '' + result_track_correct = '' + result_track_incorrect = '' for idx in range(len(NUMBER_TO_GUESS)): if (number[idx] == NUMBER_TO_GUESS[idx]): - resultTrack += 'X' + result_track_correct += 'X' elif number[idx] in NUMBER_TO_GUESS: - resultTrack += '_' - else: - resultTrack += '#' - - return resultTrack + result_track_incorrect += '_' + return result_track_correct + result_track_incorrect diff --git a/main.py b/main.py index 7cb1389..c271530 100644 --- a/main.py +++ b/main.py @@ -1,17 +1,20 @@ from codebreaker import Codebreaker TOTAL_ATTEMPTS = 5 -ATTEMPTS = 1 +attempts = 1 codebreaker = Codebreaker() -print('Jugar Codebreaker!') +print('Play Codebreaker!') -while ATTEMPTS <= TOTAL_ATTEMPTS: - number = input('Adivina el número de 4 cifras: ') - resolve = codebreaker.adivinar(number) - print(resolve) - if resolve is True: - print('You win!!') - break - ATTEMPTS += 1 +while attempts <= TOTAL_ATTEMPTS: + try: + number = input('Guess the four digit number: ') + resolve = codebreaker.guess_number(number) + print(resolve) + if resolve is True: + print('You win!!') + break + attempts += 1 + except ValueError: + print('Number cant be empty or its length is incorrect') From 576eb36fd6ea3887e3b544dcec67c922f160074d Mon Sep 17 00:00:00 2001 From: joselofierro Date: Thu, 1 Jun 2023 21:58:56 -0500 Subject: [PATCH 3/3] fix: Aplica correcciones de code review --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index c271530..d7d741e 100644 --- a/main.py +++ b/main.py @@ -12,7 +12,7 @@ number = input('Guess the four digit number: ') resolve = codebreaker.guess_number(number) print(resolve) - if resolve is True: + if resolve: print('You win!!') break attempts += 1