Salida de la función de impresión Python varias veces

Estoy haciendo un progtwig para lograr un cierto desafío de python . Creé el progtwig, y ​​básicamente hace todo lo que necesito que haga, excepto que tiene una peculiaridad extraña; imprime la salida que quiero varias veces.

cmdname = input("Enter the name of your command.\n>") print("Enter options one by one. If the option has an argument, put a * at the end of the option. When done entering options, enter \"q\".") oplist = "" oplist += cmdname + " " def prgm(): global oplist while 2 + 2 == 4: user = input(">") if user[0] == "-": if "*" in user: oplist += user[0:len(user) - 1] + " " print("Now, enter the option's argument.") user = input(">") oplist += user[0:len(user) - 1] + " " print("Option successfully added.") prgm() else: oplist += user + " " print("Option successfully added.") prgm() elif user == "q": print("Enter the command argument.") user = input(">") oplist += user else: print("Error. You didn't enter an option.") prgm() break print(oplist) prgm() 

La cantidad de veces que se imprime el resultado parece depender de cuántas opciones especifique el usuario, pero no sé por qué. Además, cuando ejecuto el progtwig en IDLE, si imprimo manualmente (oplist) una vez finalizada la función, IDLE imprime la salida una vez en una línea, como pretendía. ¿Por qué exactamente ese es el caso?

Mueva print(oplist) fuera de la función, a la última línea del progtwig. Dado que está utilizando la recursión, esta línea se llama varias veces.