Exercise 31: Making Decisions
In the first half of this book you mostly just printed out things called functions, but everything was basically in a straight line. Your scripts ran starting at the top and went to the bottom where they ended. If you made a function you could run that function later, but it still didn't have the kind of branching you need to really make decisions. Now that you have if, else, and elsif you can start to make scripts that decide things.
In the last script you wrote out a simple set of tests asking some questions. In this script you will ask the user questions and make decisions based on their answers. Write this script, and then play with it quite a lot to figure it out.
A key point here is that you are now putting the if-statements inside if-statements as code that can run. This is very powerful and can be used to create "nested" decisions, where one branch leads to another and another.
Make sure you understand this concept of if-statements inside if-statements. In fact, do the Study Drills to really nail it.
What You Should See
Here is me playing this little adventure game. I do not do so well.
- Make new parts of the game and change what decisions people can make. Expand the game out as much as you can before it gets ridiculous.
- Write a completely new game. Maybe you don't like this one, so make your own. This is your computer, do what you want.
Common Student Questions
- Can you replace elsif with a sequence of if-else combinations?
- You can in some situations, but it depends on how each if/else is written. It also means that Ruby will check every if-else combination, rather than just the first false ones like it would with if-elsif-else. Try to make some of these to figure out the differences.
- How do I tell if a number is between a range of numbers?
- Use && (and) to test if the number is x > 1 and x < 10. Also remember you can use <= (less-than-equal) and similar tests too.
- What if I wanted more options in the if-elsif-else blocks?
- Add more elsif blocks for each possible choice.