prize17-4, Exercise 2: Stride in B-flat bass = {"Bb": ("Bb1", "F2"), "Eb": ("Eb2", "Bb2")} chord = {"Bb": "Bb-D-F", "Eb": "Eb-G-Bb"} for name in ("Bb", "Eb"): low, alt = bass[name] print(name, "|", low, chord[name], alt, chord[name]) Output (run and checked): Bb | Bb1 Bb-D-F F2 Bb-D-F Eb | Eb2 Eb-G-Bb Bb2 Eb-G-Bb Why it works: each chord needs a low root and a fifth above it. The fifth of B-flat is F, and the fifth of E-flat is B-flat. The number after each note name is its octave; 1 and 2 are low notes. Care: octave numbers are a choice. A pianist picks the ones that keep the bass below the chord.