Nested decisions

4.6 Nested decisions

Learning objectives

By the end of this section you should be able to

  • Describe the execution paths of programs with nested if-else statements.
  • Implement a program with nested if-else statements.

Nested decision statements

Suppose a programmer is writing a program that reads in a game ID and player count and prints whether the user has the right number of players for the game.

The programmer may start with:

    if game == 1 and players < 2:
      print("Not enough players")
    if game == 1 and players > 4:
      print("Too many players")
    if game == 1 and (2 <= players <= 4):
      print("Ready to start")
    if game == 2 and players < 3:
      print("Not enough players")
    if game == 2 and players > 6:
      print("Too many players")
    if game == 2 and (3 <= players <= 6):
      print("Ready to start")

The programmer realizes the code is redundant. What if the programmer could decide the game ID first and then make a decision about players? Nesting allows a decision statement to be inside another decision statement, and is indicated by an indentation level.

An improved program:

    if game == 1:
      if players < 2:
        print("Not enough players")
      elif players > 4:
        print("Too many players")
      else:
        print("Ready to start")
    if game == 2:
      if players < 3:
        print("Not enough players")
      elif players > 6:
        print("Too many players")
      else:
        print("Ready to start")
    # Test game IDs 3-end

Checkpoint

Example: Poisonous plant identification

Concepts in Practice

Using nested if-else statements

1.
Consider the example above. Given leaf_count = 9 and leaf_shape = "teardrop", what is the output?
  1. Might be poison ivy
  2. Might be poison oak
  3. Might be poison sumac
2.
Given num_dancers = 49, what is printed?
if num_dancers < 0:
  print("Error: num_dancers is negative")
else:
  if num_dancers % 2 == 1:
    print("Error: num_dancers is odd")
  print(num_dancers, "dancers")
  1. Error: num_dancers is odd
  2. 49 dancers
  3. Error: num_dancers is odd
    49 dancers
3.
Given x = 256, y = 513, and max = 512, which of the following will execute?
if x == y:
  # Body 1
elif x < y:
  # Body 2
  if y >= max:
    # Body 3
  else:
    # Body 4
else:
  # Body 5
  1. Body 2
  2. Body 2, Body 3
  3. Body 2, Body 5
4.
Given x =118, y = 300, and max = 512, which of the following will execute?
if x == y:
  # Body 1
elif x < y:
  # Body 2
  if y >= max:
    # Body 3
else:
  # Body 4
else:
  # Body 5
  1. Body 2
  2. Body 3
  3. Error

Try It

Meal orders

Write a program that reads in a string, "lunch" or "dinner", representing the menu choice, and an integer, 1, 2, or 3, representing the user's meal choice. The program then prints the user's meal choice.

Lunch Meal Options

  • 1: Caesar salad
  • 2: Spicy chicken wrap
  • 3: Butternut squash soup

Dinner Meal Options

  • 1: Baked salmon
  • 2: Turkey burger
  • 3: Mushroom risotto

Ex: If the input is:
lunch
3

The output is:
Your order: Butternut squash soup