WEEK06: indefinite (while) loops, more functions...
---------------------------------------------------------------
 W: more while loops, functions

ANNOUNCEMENTS:
 - quiz this Friday...functions!
 - lab 6 (typing tutor) due THURSDAY after break

REVIEW:

 - main loop from guessing game:

  num = randrange(1,11)
  user_guess = input("--> ")
  while num != user_guess:
    print "nope...try again."
    user_guess = input("--> ")

  print "G A M E  O V E R\n"

 - and here's another way to write that, using while TRUE construct:

  num = randrange(1,11)
  while True:
    user_guess = input("--> ")
    if user_guess == num:
      print "You got it!"
      break
    else:
      print "nope...try again."

  print "G A M E  O V E R\n"


more WHILE LOOPS practice:

  - can you write this program to simulate flipping a coin
    until we get 100 HEADS?

$ python coinflip.py 

I'm going to flip a coin over and over. I'll stop
after I get 100 heads. Hit return to begin...


flip:   1   result: Tails   numbers of heads so far: 0
flip:   2   result: Tails   numbers of heads so far: 0
flip:   3   result: Heads   numbers of heads so far: 1
flip:   4   result: Tails   numbers of heads so far: 1
flip:   5   result: Heads   numbers of heads so far: 2
flip:   6   result: Tails   numbers of heads so far: 2
flip:   7   result: Heads   numbers of heads so far: 3
flip:   8   result: Heads   numbers of heads so far: 4
flip:   9   result: Heads   numbers of heads so far: 5
flip:  10   result: Heads   numbers of heads so far: 6
...
and so on...
...
flip: 208   result: Heads   numbers of heads so far: 97
flip: 209   result: Heads   numbers of heads so far: 98
flip: 210   result: Heads   numbers of heads so far: 99
flip: 211   result: Tails   numbers of heads so far: 99
flip: 212   result: Heads   numbers of heads so far: 100


ANOTHER ONE:

 - imagine we have a program that uses lots of menus (like the 
   adventure game). Sometimes the choices are from 1-3, other times
   they might be 1-4 or more:

  What would you like to do??

    1. Start your CS homework
    2. Go to the library
    3. Poke the dragon

        ---> 0

Error..please enter an int from 1 to 3!!

 - it would be nice to have a general function that gets an integer
   from the user and checks to make sure it is valid. If it *is* valid,
   return the integer. If not, give the user another chance (hint: use
   a WHILE loop!)

 - write a function, getIntInRange, that gets *and* checks
   an input from the user. If the user enters an integer that
   is in the correct range (like 1-3 below), return the integer.
   If the user enters an invalid integer, tell them and ask
   again.

$ python getIntInRange.py 

  What would you like to do??

    1. Start your CS homework
    2. Go to the library
    3. Poke the dragon
  
        ---> 0

Error..please enter an int from 1 to 3!!

        ---> 44

Error..please enter an int from 1 to 3!!

        ---> 3

Your hair is now on fire.

   Here's an example of how you might call this function
   from a main program:

  print menu
  choice = getIntInRange(1,3)
  if choice == 1:
    print "\nSuper!! You get an A+!!\n"
  elif choice == 2:
    print "\nOK...have fun.\n"
  elif choice == 3:
    print "\nYour hair is now on fire.\n"

   So getIntInRange() does the getting and the checking,
   and only returns when it has received valid input from the user.

BONUS: make your getIntInRange() function work (not crash) no matter
what the user enters...

$ python adventureWithFunctions.py 

  You are in a dimly lit computer room. A lab that is worth
  50% of your grade is due in 4 hours. What do you want
  to do?

    1 Start work on your lab
    2 Go play ultimate frisbee with your friends
    3 Take a nap on the CS couches

  
          ---> hello                       # strings don't crash it
please enter an integer from 1 to 3 
          ---> -4
please enter an integer from 1 to 3 
          ---> 1
-=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=-

  An evil ninja offers you all of the solutions
  to the lab that's due in 3 hours. What do you want to do?

    1 Take the solutions and thank her
    2 Ignore her and keep working on your CS homework
    3 Take a nap on the CS couches
    4 Go watch videos on the internet

  
          --->     2                       # even leading spaces don't cause problems


Congratulations!! You finish your homework on time
and get an A in the class.