Ao escrever programas grandes, você pode se deparar com dois problemas:
1) o programa pode ser muito grande e incompreensível;
2) você terá que usar o mesmo trecho de código em lugares diferentes do programa.

Programadores reais dividem seu programa em pequenos pedaços - sub-rotinas (procedimentos). Cada sub-rotina resolve uma pequena tarefa. 

Em linhas gerais, a descrição da sub-rotina é a seguinte:
 
def name():
    comandos

Os comandos de procedimento são recuados. Um procedimento pode conter quaisquer construções dentro de si.
O nome do procedimento (name) pode ser qualquer um, consistindo de caracteres latinos e números, mas deve começar com uma letra ou sublinhado (_) e não conter um espaço.

Se você deseja executar todos os comandos contidos em um procedimento, basta especificar o nome desse procedimento no programa entre parênteses. Por exemplo, para o procedimento name() descrito acima, a chamada ficaria assim.

defname():   # Primeiro, descrevemos o procedimento. Isso deve ser feito antes do programa principal
    comandos

nome()   # Neste ponto, especificando o nome do procedimento, serão executados os comandos descritos no procedimento acima.
para baixo
para baixo
nome()   # comandos do procedimento serão executados aqui novamente.


Na verdade, ao criar um procedimento, ensinamos o robô a executar novos comandos que não constam em seu sistema de comandos!