-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBagels.py
More file actions
86 lines (68 loc) · 2.81 KB
/
Bagels.py
File metadata and controls
86 lines (68 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import random
NUM_DIGITS = 3
MAX_GUESSES = 10
def main():
print('''Bagels: A deductive logic game.
By Al Sweigart al@inventwithpython.com
I am thinking of a {}-digit number with no repeated digits.
Try to guess what it is. Here are some clues.
When I say: That means:
Pico One digit is correct but in the wrong position
Fermi One digit is correct and in the right position
Bagels No digit is correct!
For example: if the secret number was 248 and your guess was 843, the
clues would be Fermi Pico.'''.format(NUM_DIGITS))
while True: # Main game loop
# This stores the secret number the player needs to guess:
secretNum = getSecretNum()
print('I have thought up a number.')
print('You have {} guesses to get it.'.format(MAX_GUESSES))
numGuesses = 1
while numGuesses <= MAX_GUESSES:
guess = ''
# Keep looping until they enter a valid guess:
while len(guess) != NUM_DIGITS or not guess.isdecimal():
print('Guess #{}: '.format(numGuesses))
guess = input('> ')
clues = getClues(guess, secretNum)
print(clues)
numGuesses += 1
if guess == secretNum:
break # They're correct, so break out of this loop
if numGuesses > MAX_GUESSES:
print('You ran out of guesses.')
print('The answer was {}.'.format(secretNum))
# Ask the player if they want to play again
print('Do you want to play again? (Yes or No)')
if not input('> ').lower().startswith('y'):
break
print('Thanks for playing!')
def getSecretNum():
"""Returns a string made up of NUM_DIGITS unique random digits"""
numbers = list('0123456789') # Create a list of digits 0 to 9
random.shuffle(numbers) # Shuffle them into random order
secretNum = ''
for i in range(NUM_DIGITS):
secretNum += str(numbers[i])
return secretNum
def getClues(guess, secretNum):
"""Returns a string with the Pico, Fermi, Bagels for a guess
and secret number pair."""
if guess == secretNum:
return 'You got it!'
clues = []
for i in range(len(guess)):
if guess[i] == secretNum[i]:
# A correct digit is in the correct place
clues.append('Fermi')
elif guess[i] in secretNum:
# A correct digit is in the incorrect place
clues.append('Pico')
if len(clues) == 0:
return 'Bagels'
else:
# Sort the clues alphebetically so it doesn't give the information away
clues.sort()
return ' '.join(clues)
if __name__ == '__main__':
main()