Numbers and names
Variables, arithmetic, and driving an exact distance instead of counting seconds.
Do this lesson in the simulatorTyping the same number in five places is how mistakes happen. Python lets you name a number once and use the name.
A name for a number
from bugbot import *
connect()
# a name, and what it stands for
speed = 60
seconds = 1.5
forward(speed)
wait(seconds)
stop()
print("drove at", speed, "for", seconds, "seconds")
speed = 60 makes a variable. After that, speed means 60 everywhere in the program. Change the number once at the top and the whole program changes with it.
Names can hold the answer to a sum, too.
from bugbot import *
connect()
cm_per_second = 18
seconds = 2
print("that should be about", cm_per_second * seconds, "cm")
Python does the usual arithmetic: +, -, * for times, / for divide.
Driving an exact distance
Counting seconds is guesswork. Every driving command takes a distance instead, in centimetres, and the robot works out the timing itself.
from bugbot import *
connect()
# 20 cm forward, then stop by itself
forward(50, distance=20)
print("position now", position())
# 15 cm to the right, still facing the same way
right(50, distance=15)
print("position now", position())
stop()
distance=20 is a named argument: it says which 20 you mean. With a distance, the command waits until the robot has gone that far, so you do not need wait() after it.
It is still not perfect. The robot slides a little when it stops, and no two BugBots drift the same way. Getting from "about right" to "exact" is what Module 3 is for.
Task: two legs
Drive 40 cm forward, then 45 cm to the right, and stop in the green zone. Use distance= rather than counting seconds, and give the two distances names at the top.
from bugbot import *
connect()
first = 40
# your second distance here
forward(50, distance=first)
stop()
Challenges
- Do the same journey with the two legs the other way round. Does it end up in the same place?
- Make a variable
slow = 25and run the journey at that speed. Is it closer to the middle of the zone? - Print the distance travelled in metres, not centimetres, using
/ 100.