type up bagels.py from book
This commit is contained in:
parent
f5be8b1fec
commit
534d6ba5da
87
bagels.py
Normal file
87
bagels.py
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
"""Bagels, by Al Sweigart """
|
||||||
|
import random
|
||||||
|
|
||||||
|
NUM_DIGITS = 3 # (!) Try setting this to 1 or 10
|
||||||
|
MAX_GUESSES = 10 # (!) Try setting this to 1 or 100
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print('''Bagels a deductive logic game.
|
||||||
|
By Al Swiegart
|
||||||
|
|
||||||
|
|
||||||
|
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:
|
||||||
|
#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 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 string of NUM_DIGITS unique random digits."""
|
||||||
|
numbers = list('0123456789')
|
||||||
|
random.shuffle(numbers)
|
||||||
|
|
||||||
|
# Get first NUM_DIGITS in the list for the secret number:
|
||||||
|
secretNum = ''
|
||||||
|
for i in range(NUM_DIGITS):
|
||||||
|
secretNum += str(numbers[i])
|
||||||
|
return secretNum
|
||||||
|
|
||||||
|
def getClues(guess, secretNum):
|
||||||
|
"""Returns pico, fermi, bagels clues for guesses."""
|
||||||
|
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' # There are no correct digits at all.abs
|
||||||
|
else:
|
||||||
|
# Sort clues into alphabetical order to change order of clues
|
||||||
|
clues.sort()
|
||||||
|
# Make single string from clues:
|
||||||
|
return ' '.join(clues)
|
||||||
|
|
||||||
|
# If the program is run instead of imported, run the game:
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
Loading…
x
Reference in New Issue
Block a user