Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exercice Codebreaker corrections with pep 8 #23

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
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
99 changes: 73 additions & 26 deletions codebreaker.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,81 @@
trueNumber = "1010";
"""
Module wiht the Codebreaker Class
"""

class Codebreaker:

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

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

if numero == trueNumber:
return True
class CodeBreaker:
def __init__(self) -> None:
self.hidden_number = ''

resultadoX = ''
resultado_ = ''
arrayNumber = []
def get_random_num(self):
return ''.join(random.sample("123456789", 4))

for x in len(numero):
if(arrayNumber[numero[x]] == True):
return 'error'
def set_hidden_number(self, hidden_number=None):
"""
This function assings the hidden number to the parameter self
in case hidden number values none generates a new hidden
number
"""
if hidden_number is None:
hidden_number = self.get_random_num()

try:
self.is_valid_len_number(hidden_number)
self.is_a_number(hidden_number)
self.does_not_contain_repeated_digits(hidden_number)

arrayNumber[numero[x]] = True

numero = list(numero)
except Exception as e:
raise e

self.hidden_number = hidden_number

def play(self):
attempt = 1

print('Lets play Code Breaker!')
print('Try to guess the hidden number')

for index, x in numero:
if trueNumber[index] == numero[index]:
resultadoX+='X'
while True:
print(f'guess number {attempt}: ')
number = input('')
answer = self.guess_number(number)
print(f'Answer: {answer}')

elif x in trueNumber:
resultado_='_'
if answer == 'XXXX':
print(f'Congratulations! You have won in {attempt} attempts')
return attempt

attempt += 1

def guess_number(self, number=None):
guess_position = ''
guess_digit = ''

return resultadoX+resultado_
for(index, digit) in enumerate(number):
if digit == self.hidden_number[index]:
guess_position += 'X'
elif digit in self.hidden_number:
guess_digit += ''

return guess_position + guess_digit

def is_valid_len_number(self, number):
if len(number) != 4:
raise Exception('This is not a valid length number')

return True

def is_a_number(self, number):
if not number.isdecimal():
raise Exception('You must type a 4 digit number')

return True

def does_not_contain_repeated_digits(self,number):
for digit in number:
if number.count(digit) > 1:
raise Exception("It can't contain repeated digits")

return True

50 changes: 38 additions & 12 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,44 @@
from codebreaker import Codebreaker
import os
from codebreaker import CodeBreaker

intentos_totales = 10
codebreaker = Codebreaker()

intento = 0
def clean():
# For Windows
if os.name == 'nt':
_ = os.system('cls')

print('Jugar Codebreaker!')
# For macOS and Linux
else:
_ = os.system('clear')

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

if __name__ == '__main__':
codebreaker = CodeBreaker()
action = input('Do you wanna play? (1) Play, (2) Exit: ')

while action == '1':
print('Player 1')
hidden_number = input('Type the hidden number: ')
codebreaker.set_hidden_number(hidden_number)
clean()
print('Player 2')
attempt_player_2 = codebreaker.play()

print('--------------------')
print('Player 2')
hidden_number = input('Escriba el número oculto: ')
codebreaker.set_hidden_number(hidden_number)
clean()
print('Player 1')
attempt_player_1 = codebreaker.play()

print('--------------------')
if attempt_player_1 > attempt_player_2:
print('Player 1 wins')
elif attempt_player_1 < attempt_player_2:
print('Player 2 wins')
else:
print('It\'s a TIE!')

print('--------------------')
action = input('Continue? (1) Continue, (2) Exit: ')