Writing the "Camel Game" with Python
Bad instructions

Perhaps the lab is instructing you specifically to write code in a certain way just for learning purposes, but there is some questionable advice in the instructions that I would recommend disregarding.

Printing the game instructions using multiple print statements is poor practice.  Combining the instructions into one long triple-quoted string is more readable and efficient.

Introducing a done flag variable is a bad idea in general.  If your goal is to direct the execution of code in a loop, use statements like continue, break, return, or raise.  Setting a variable just to have it tested later is needlessly indirect.  In fact, I would say that for this exercise, a done flag fails to capture enough state information for a realistic game.  (More on that below.)

Logic

The input is case-insensitive.  To avoid code repetition, you should immediately normalize the input to lowercase (or uppercase, as the instructions suggest):

user_choice = input("Your choice? ").upper()


There are five menu options, plus the "Quit" option.  Of those five, two are "instantaneous", and three involve the passage of time.  Of the three options that involve passage of time, two cause you to cover some distance.  The code should therefore be structured such that similar code is placed together.  Also, you should avoid generating and discarding random numbers that you aren't going to use (for example, fullSpeed = random.randrange(10, 21) when the user hasn't even decided to make a move).

# Quit
if user_choice == "Q":
    break

# Status check
elif user_choice == "E":
    print(…)

# Drink from canteen
elif user_choice == "A":
    if canteen == 0:
        print("You're out of water.")
    else:
        canteen -= 1
        thirst = 0
        print(…)

# Stop for the night
elif user_choice == "D":
    natives_traveled += random.randrange(7, 15)
    camel_fatigue = 0
    print(…)

# Moderate speed
elif user_choice == "B":
    natives_traveled += random.randrange(7, 15)
    miles_traveled += random.randrange(5, 13)
    camel_fatigue += 1
    thirst += 1

# Full speed
elif user_choice == "C":
    natives_traveled += random.randrange(7, 15)
    miles_traveled += random.randrange(10, 21)
    camel_fatigue += random.randrange(1, 4)
    thirst += 1


It's odd how you write variable *= 0 when you could just set variable = 0.

By my interpretation, it should not be possible to stumble across an oasis while resting for the night.  It would be even more realistic (and easier to code) if the probability of finding an oasis were proportional to the distance covered, but I don't get to make the rules.

When evaluating the situation at the end of the loop, I would place the position checks first, then the health checks, then any applicable warnings.  You don't really care about the natives drawing near or finding an oasis if you've already crossed the finish line.  You can also simplify the thirst and fatigue checks if you test for death first.  (By the way, in Python, you can also write double-ended inequalities like 5 &lt; camelFatigue &lt;= 8.)

# Position checks
if miles_traveled &gt;= 200:
    print("You made it across the desert!")
    break
elif natives_traveled &gt;= miles_traveled:
    print("The natives caught and beheaded you.\nYou're dead!")
    break

# Health checks
# 1 in 20 chance of finding an oasis
if user_choice != "D" and random.randrange(20) == 0:
    camel_fatigue, thirst, canteen = 0, 0, 3
    print("You have found…")
elif thirst &gt; 6:
    print("You died of dehydration!")
    break
elif camel_fatigue &gt; 8:
    print("Your camel is dead.")
    break

# Warnings
if natives_traveled &gt;= miles_traveled - 15:
    print("The natives are drawing near!")
if thirst &gt; 4:
    print("You are thirsty")
if camel_fatigue &gt; 5:
    print("Your camel is getting tired.")