J
Jason Friedman
I am teaching Python to a class of six-graders as part of an after-school
enrichment. These are average students. We wrote a non-GUI "rocket
lander" program: you have a rocket some distance above the ground, a
limited amount of fuel and a limited burn rate, and the goal is to have the
rocket touch the ground below some threshold velocity.
I thought it would be neat, after a game completes, to print a graph
showing the descent.
Given these measurements:
measurement_dict = { # time, height
0: 10,
1: 9,
2: 9,
3: 8,
4: 8,
5: 7,
6: 6,
7: 4,
8: 5,
9: 3,
10: 2,
11: 1,
12: 0,
}
The easiest solution is to have the Y axis be time and the X axis distance
from the ground, and the code would be:
for t, y in measurement_dict.items():
print("X" * y)
That output is not especially intuitive, though. A better visual would be
an X axis of time and Y axis of distance:
max_height = max(measurement_dict.values())
max_time = max(measurement_dict.keys())
for height in range(max_height, 0, -1):
row = list(" " * max_time)
for t, y in measurement_dict.items():
if y >= height:
row[t] = 'X'
print("".join(row))
My concern is whether the average 11-year-old will be able to follow such
logic. Is there a better approach?
enrichment. These are average students. We wrote a non-GUI "rocket
lander" program: you have a rocket some distance above the ground, a
limited amount of fuel and a limited burn rate, and the goal is to have the
rocket touch the ground below some threshold velocity.
I thought it would be neat, after a game completes, to print a graph
showing the descent.
Given these measurements:
measurement_dict = { # time, height
0: 10,
1: 9,
2: 9,
3: 8,
4: 8,
5: 7,
6: 6,
7: 4,
8: 5,
9: 3,
10: 2,
11: 1,
12: 0,
}
The easiest solution is to have the Y axis be time and the X axis distance
from the ground, and the code would be:
for t, y in measurement_dict.items():
print("X" * y)
That output is not especially intuitive, though. A better visual would be
an X axis of time and Y axis of distance:
max_height = max(measurement_dict.values())
max_time = max(measurement_dict.keys())
for height in range(max_height, 0, -1):
row = list(" " * max_time)
for t, y in measurement_dict.items():
if y >= height:
row[t] = 'X'
print("".join(row))
My concern is whether the average 11-year-old will be able to follow such
logic. Is there a better approach?