Casa > E > Eu Sou Novo. Porque É Que O Def Main() Continua A Impedir O Código De Seguir Em Frente?

Eu sou novo. Porque é que o def main() continua a impedir o código de seguir em frente?

Localizando as amostras de código que você'já postou. Entenda o def main(): introduz um bloco indentado de código como a definição de uma função sem argamassa chamada main. Nesse ponto python memorizou o que você quer dizer com main. Lembrar a definição doesn't significa correr o código no bloco indentado sob def. A linha não indentada após o bloco de código é a próxima coisa a fazer por Python depois de memorizar a sua definição de main. Essa próxima linha invoca main fazendo o Python sorrir silenciosamente e dizer Hey! Eu conheço uma rotina chamada main. Ele quer que eu a chame sem argumentos. Main não espera argumentos então I'fará essa chamada e se principal for bom, você'estará executando seu programa. Agora lá'há alguma estranheza no seu main, mas nós'vamos voltar a isso.

Na segunda amostra de código você novamente dá uma definição de main() mas note a última linha. É uma chamada de main, mas it's indentada de modo que it's parte do bloco de código sendo definido, mas ao contrário do primeiro exemplo após a definição do bloco de código de main, o próximo passo é o fim do arquivo. Python pode resmungar silenciosamente sobre como é irritante ser solicitado a se lembrar de uma definição e nunca precisar dela antes do final do semestre. Tendo chegado ao fim com algumas coisas memorizadas mas nada pedindo para executar o código definido, Python sai e imediatamente esquece a sua definição de main. Você conhece algum aluno que exiba comportamento similar no final do semestre?

Voltando ao primeiro exemplo de código. Olhe para a última linha da definição de principal. It's duplamente indentados sob um outro sob o def. It's uma chamada recursiva condicional de main e eu duvido muito que você realmente queira a recursividade aqui. Um péssimo datilógrafo no teclado poderia transbordar a pilha com chamadas recursivas. Acho que o que você realmente quer é um laço que continua pedindo ao usuário para escolher uma fazenda até que ele tenha feito uma escolha válida

A minha sugestão é simplificar o código. Você poderia pedir ao usuário um farmtype e verificar se trim(farmtype) está na farmlist. Continue perguntando em um loop até que o usuário dê um farmtype válido. Então você poderia ter um dicionário digitado por farmtype com valores de linhas instantâneas para parabenizar o usuário por ter escolhido a farmtype.

Em vez de ter uma farmlist e dicionário separados digitados por farmtype (o que seria uma dor de cabeça de manutenção, pois adicionar um novo tipo de farm requer adicionar o novo tipo de farm tanto à lista quanto ao dicionário), seria melhor verificar se o usuário's farmtype é uma chave válida no dicionário da sua farm's. Repare quanta repetição existe no seu se .... elif... elif tree? Ao capturar o que difere de ramo para ramo em um dicionário, muito menos código é necessário. Um princípio de bom código é DRY - Don't Repeat Yourself.

Want some fun? Ao invés de um loop que continua pedindo ao usuário para tentar novamente, codifique as respostas cada vez mais snippy. Se o usuário pode't conseguir acertar em 3 tentativas sugere que ele procure ajuda profissional e o programa fecha.

Obrigado para o A2A. Espero ter respondido a sua pergunta e dar-lhe um pouco de revisão de código grátis.

Divertir-se.

De Acie

Você pode fazer tudo num Chromebook que você pode fazer em um laptop? :: Que vantagens tem o pau c menor do controlador GameCube sobre ter dois pauzinhos analógicos regulares?