Eine einfache Lösung könnte so aussehen:

for op1 in range(2):
  for op2 in range(2):
    print op1, op2, op1 and op2

(Weiterführend:) Es wäre elegant, das in eine Funktion zu packen, der dann übergeben werden kann, welchen logischen Operator sie verwenden soll. Das geht natürlich (sogar auf mehrere Arten), aber wir brauchen dazu Sprachelemente, die wir noch nicht hatten. Mal als Ausblick folgender Vorschlag:

def printTruthTable(oper):
  """prints the truth table for the logical operator oper.  oper is a
  string containing the operator as understood by python's evaluation
  engine.
  """
  for op1 in range(2):
    for op2 in range(2):
      print op1, op2, eval("%d %s %d"%(op1, oper, op2))

printTruthTable("and")
printTruthTable("or")

– mit eval kann man also offenbar Python-Ausdrücke in Strings auswerten.