diff --git a/main.py b/main.py new file mode 100644 index 0000000..cece5ce --- /dev/null +++ b/main.py @@ -0,0 +1,143 @@ +# Pystermind 1.0 +# By Wholesomedonut + +# Read below for how-to-play, or input ? after running + +import random + +""" Dummy class for Errors""" +class Error(Exception): + pass + +""" Length of user input > or < 4 """ +class LengthException(Error): + pass + +""" Reports incorrect guess content """ +class ColorException(Error): + pass + + +secret = [] +guess = [] +clue = [] +game_continue = True + +debug = False # Turn this flag on for easy debug prints, if that's your jam. + +colors = ['r', 'b', 'g', 'y'] # Can easily be something else. +# Doesn't have to be 4 things, doesn't have to be colors. + +rules = """ +Input a string of 4 letters, representing colors. +r = red +b = blue +g = green +y = yellow + +You will receive output from your guess that will tell you what you got right +and what you got wrong. + +* = correct color in correct location +~ = correct color and wrong location +# = incorrect color in incorrect location +""" + + +def generateSecret(secret): + for i in range(0, len(colors)): + secret.append(random.choice(colors)) + + if debug: + print(secret) + + return secret + + +def checkGuess(guess): + if len(guess) > len(colors): + raise LengthException("Your guess is too long.") + elif len(guess) < len(colors): + raise LengthException("Your guess is too short.") + + for i in guess: + print('i:', i) + if i not in colors: + raise ColorException("You are not guessing from r, g, b, or y.") + + +def compare(secret, guess, clue): + clue = [] + for i in range(0, len(secret)): + if guess[i] == secret[i]: + clue.append('*') + elif guess[i] in secret: + clue.append('~') + else: + clue.append('#') + + if debug: + out = ('Your guess: %s,\nthe secret: %s') % (guess, secret) + print(out) + + return clue + + +def calc(secret, guess, clue): + tmp = '' + if tmp.join(clue) == '****': + print('You won!') + else: + print('Not quite right.') + print('Your clue:', clue) + + +generateSecret(secret) +print(rules) + +while game_continue: + guess = [] + + temp = input('Choose your colors. Input \'?\' for help: ') + if debug: + print('Temp =', temp) + guess = list(temp) + if debug: + print('Guess =', guess) + if debug: + print('Secret = ', secret) + temp = '' + + if '?' in guess and len(guess) == 1: + print(rules) + guess = '' + continue + elif 'q' in guess and len(guess) == 1: + print('Bye!') + game_continue = False + break + + # Will obviously continue if you don't quit. + + try: + if game_continue: + checkGuess(guess) + clue = compare(secret, guess, clue) + # Finds differences between guess and secret + calc(secret, guess, clue) + # Calculates if you won or not and outputs it. + + except LengthException as e: + print('Error:', e) + + except ColorException as e: + print('Error:', e) + + cont = input('Try again? y/n: ') + if cont == 'y': # Regenerates secret and clears variables. + generateSecret(secret) + guess = [] + elif cont == 'n': + game_continue = False + print('Bye!') + break