3. Lists and Loops
Store many values in order. Do the same thing to all of them without copy-pasting.
Summary
A list keeps values in order:
currents = [38.2, 41.0, 39.5, 31.4]
Tools for lists:
- Read one value with an index. Indexes start at 0:
currents[0]is38.2. currents[-1]reads the last value:31.4.- An index that is too big gives an
IndexError. len(currents)gives the count:4.currents.append(40.1)adds a value to the end.
A loop visits each value:
for c in currents: # each value in the list
print(c)
for i in range(4): # i = 0, 1, 2, 3
print(i)
for i, c in enumerate(currents): # index and value together
print(f'module {i}: {c} A')
tick = 0
while tick < 100: # repeats while the condition is true
tick += 1
Which one to use:
for x in list: you need the values. Most common.for i in range(n): you need to count, or index into the list.for i, x in enumerate(list): you need the index and the value.while: you do not know how many repeats. Be careful: a wrong condition loops forever.breakinside a loop exits it at once.
In robot code, do not use a bare while to wait for time to pass. The robot runs its loop 50 times per second, and a blocking while stops all of it. Waiting uses coroutines with yield (lesson 6).
In our robot code
robot/robot.py registers every subsystem with one loop instead of copy-pasted lines:
self.subsystems = [
self.drivetrain, self.poseEstimator,
self.intake, self.shooter, self.hopper,
]
for subsystem in self.subsystems:
self.scheduler.registerSubsystem(subsystem)
The hopper fuel simulation uses range:
for fuel_num in range(1, self.max_fuel_in_hopper + 1):
...
Try it
Run the code. Add 'climber' to the list. Run again.
The code operates in your browser. The page sends nothing to a server and saves your work on this computer. Press Ctrl+Enter to run it.
Exercises
3.1 Total current and hot modules
currents holds the amps of the four swerve modules.
PART A: add every current into total with a for loop. Do not use sum().
PART B: count the modules that use more than 40 amps into hot_count.
The code operates in your browser. The page sends nothing to a server and saves your work on this computer. Press Ctrl+Enter to run it.
3.2 Find the module with the most current
A swerve module that draws much more current than the others often has a mechanical problem. Find it.
PART A: set best_index to the index of the module with the most current.
PART B: set best_current to that module’s value.
The code operates in your browser. The page sends nothing to a server and saves your work on this computer. Press Ctrl+Enter to run it.
3.3 Count robot frames
One robot frame is 20 ms.
PART A: count tick up to 100 with a while loop.
PART B: set seconds to tick * 0.02.
The code operates in your browser. The page sends nothing to a server and saves your work on this computer. Press Ctrl+Enter to run it.
Next lesson: 4. Functions.