Wiederholungsrechenzeichen in Python

# -*- coding: utf-8 -*-
# Wiederholungsrechenzeichen alias Metaoperatoren alias Hyperoperatoren mit Invers

#Logarithmus nimmt 1. Argument des Exponentials und gibt 2. Argument zurück.

#Mit 0 kann es aber noch nicht so gut umgehen, also nur "einfache" Zahlen (positiv "natürlich").

#log_1(1) gibt 0 aus, was als Fehlermeldung zu werten ist.

#Meta-Operator n-ter Stufe
def MO(a,n,b):     #a (|^n) b
    r=a
    if (n<1):
        r+=1        
    if (n==1):
        r=a+b 
    if (n==2):
        r=a*b
    if (n==3):
        r=a**b
    if (n>3):
        for i in range(1,b): #b-1 mal, also z.B.: a°a°a mit b=3, dann 2-mal °a ausführen
            r=MO(a,n-1,r)    #a und r vertauscht damit bei Exponential "unten angebaut" wird   
            #print r
    #print "MO Ergebnis="+str(r)
    return r
    
    
#Inverser Meta-Operator n-ter Stufe
def IMO(r,n,l):     # r (|v n) l
    z=0
    if (n<1):
        z=r-1       
    if (n==1):
        z=r-l 
    if (n==2):
       while (r>0):
            r=r-l
            z+=1
            #print z
            #print r 
    if (n==3):
        while (r>1):
            r=r/l
            z+=1
            #print z
            #print r
    if (n>3):
        while (r>1):
            r=IMO(r,n-1,l)
            z+=1
            #print z
            #print r
    return z
  
    
#Test        
#jetzt richtig
for i in range(1,4):
    for j in range(1,4):
        for k in range(1,4):
            print i,j,k,IMO(MO(i,j,k),j,i)