Here is my solution to the Programming Praxis problem for Dec. 18, 2012. It is written in Python, which proved to be quite straightforward.
The task:
Implement the Petals Around The Rose Game! (see link for more details)
My solution:
# Author: Will Clausen
#
# Date: Jan. 14, 2013
#
# This program will implement the Petals Around the Rose game.
# Doing so will solve the Programming Praxis problem from
# Dec. 18, 2012.
# http://programmingpraxis.com/2012/12/18/petals-around-the-rose/
import random
def PetalsAroundTheRose():
# Start by printing the introduction
print "Let's play 'Petals Around The Rose.' "
print "The name of the game is significant. "
print "At each turn I will roll five dice, "
print "then ask you for the score, which "
print "will always be zero or an even number. "
print "After you guess the score, I will tell "
print "you if you are right, or tell you the "
print "correct score if you are wrong. The game "
print "ends when you prove that you know the "
print "secret by guessing the score correctly "
print "six times in a row."
# Now make a counter to keep track of how many times
# the player has submitted a correct answer.
count = 0
while count < 6:
# Start the game by rolling five dice
rolls = ""
rollsL = []
for dice in range(5):
nextRoll = random.randint(1, 6)
rolls += " " + str(nextRoll)
# Handy to have these in a list for scoring
rollsL += [nextRoll]
print
print "The five dice are: " + rolls + "."
# Get user input about the score and make sure it's valid
guess = userInput()
# Check to make sure the input is valid
guess = checkInput(guess)
# Check the guess against the actual score
actual = score(rollsL)
if int(guess) == actual:
count += 1
print "Correct"
else:
count = 0
print "The correct score is " + str(actual) + "."
# Print out congratulations and closing remarks
print
print "Congratulations! You are now a member "
print "of the Fraternity of the Petals Around "
print "The Rose. You must pledge never to "
print "reveal the secret to anyone."
# Helper function for computing the score of the rolls
# in the game. This function reveals the secret!
def score(rolls):
score = 0
for x in rolls:
if x%2:
score += x-1
return score
# Helper function that gets and returns valid user input
def userInput():
guess = str(raw_input("What is the score? "))
guess = checkInput(guess)
return guess
# Helper function that checks the input to ensure it is only
# numerical and repeatedly prompts the user for input that is
# only numerical if the input fails the checks.
def checkInput(guess):
check = 0
while check < len(str(guess)):
if not guess[check].isdigit():
# This index will be corrected after this conditional.
check = -1
guess = str(raw_input("Please input only a number: "))
check += 1
if check == 0:
print "Please input SOMETHING! "
guess = userInput()
return guess