장음표시 사용
181쪽
Apronoa Computacao com Python Documentatiori, Versao q.
22. 7 20. T A arvore oos animais
Nesta sequo. dese OlVemos uni pequeno programa que usa uma arVOre para representar uma base de conliecimento O programa interage com o usuario para criar uma MVOre de perguntas e de nomes de animai S. Segue uma amostra da lancionali clade
No comeςo de cada rodada. o programa parte do topo da MVore e faZ a primetra pergunta. Dependendo da resposta ele segue peto titho esquerdo ou diret to e continua ate chegar numa milia. Neste ponto ele arrisca um palpite. Se opalpite nao for correto ele pergunta ao usuario o nome de uni novo animal e uma pergunta que distingue o palpite errado do novo animal. A seguir, adiciona uma celula a arVOre contendo a noVa pergunta e o novo animal.
182쪽
Apronoa Computacao com Python Documentatiori, Versao q.
A condiςao do laςo externo e que significa que ele continuara ate a execuςao de uni comando UT SHk, cnSΟ Ο usuario nao pense num animul. O laςo Mni Q interito caminita na arvore de cima para baixo. guiado pelas respostas do usuario. Quando uma nova celula e adicionada a arvore, a nova pergunta substitui a carga e os clois fit hos suo o novo animal ea caina Original. Uma fallia do programa e que no sair ele esquece ludo que the mi cuidadosamente ensinadol
183쪽
Apronoa Computacao com Python Documentatiori, Versao q.
pre-οrclem spreorder) Uma forma de percorrer uina arvore visitando cada celula antes dos seus fit hos notacuo prefixa spresae notation) Uma forma de escreVer unia expresSao matematica em que cada Operador apareceantes dos seus Operundos pos-Ordem spostorderi Uma forma de perconer urna amore visitando os iit hos de cada celula antes da propria celuia. in-οrclem inorder) Uma forma de percorrer urna arvore visitando a subarvore esquerda, seguida da ratZ e finalmenteda subarvore diretia.
184쪽
Enos de sintaxe suo produZidos por Python quando o interpretador esta traduZindo O codigo fonte em tecori Estes erros gerat mente indicam que existe algo errado com a sintaxe do programa. Exemplo: omitir o sinat de clois pontos :) no final de urna declaraςao Ips produZ a mensagem uni tanto redundante Sint HXETTOT: investici sint AX Erro de sintaxe: sintaxe invalida)
185쪽
Aprono a Computa octo com Python Documentatiori, Versao q.
ros de sintaxe sao gerat mente faceis de corrigi L bastando apenas que Voce de scubra Onde eles estuo. InfeliZmente as mens agens de erro gerat mente cludam pOuco. As mens agens mais comuns suo: Sunt a X ET TOT : invalici sunt δεκ Erro de sintaxe: sintaxe invalida) e SYnt AXETTOT: in Va ici tokon Erro de sintaxe: objeto invalido). nenhurna das duas e multo informatria. POr outro laclo a mensagem di Z a Voce Onde, no codigo do programa; oc Orreu O problema. Na Verclade, ela di Z a Voce Onde O Python encontrou O problema, que nao e necessariamente Onde o erro esta. As VeZes O erro e anterior a locali Zaςao da mens agem de erro gerat mente na linita precedente. Se Voce esta construindo O programa incremental mente, Voce tera uina boa ideia sobre Onde estura o erro. Estara naultima linita adicionada. Se Voce esta copiando codigo de uni liVro, comece comparando seu codigo ao codigo do lium de forma multo cuida-dosa. Verilique cada caracter. AO mesmo tempO lembre-se que o livro pode estar errado enlao Voce pode perseita- mente encontrar uni erro de sintaxe em um livro. Aqui estao algumas manetras de eVitar os erros de sintaxe mais comuns l. Certilique-se que Voce nao esta utili Zando uma palavra reservada de Python para um nome de VariaVel. 2. Verilique a existencia do sinat de clois pontos no final do cahecatho de cada declaraςao composta. incluindo as declaraς oes foT, Mni Θ, is, e Ict f. 3. Verilique se a endentaςao esta consistente. Voce pode endentar com espaςos ou com tabulaςoes, mas e methornao mistura-lOS. Cada ni Vel deVe ser ani Gado com a me Sina quanti clade. 4. Assegure-se de que cada String no codigo tentia as aspas correspondentes. 5. Se voce tem strings de multi linitas criadas usando tres aspas simples ou duplas) assegure-se de que Voce terminou a string apropriadamente. Uma string terminada de forma inapropriada ou nao terminada pode gerarum erro de invalici tokGn sobjem invalido) no final do seu programa, ou ele pode tratur a parte seguinte do programa como uma String ate chegar a proxima String. No segundo caso pode ser que o interpretador nemmesmo produZa Uma mens agem de erro l6. Um conjunto de parenteses, coichetes ou climes nao lachados correlamente faZ com que o Python continue coma proxima linita como parte da declaraςao anterior. Geralmente, uni erro Ocorre quase imediatamente na linhaseguinte. T. Verique o classico ao imes de mm dentio de unia condicionat. Se nacla functonar, Va para a proximn Seqno.
Se o compilador di Z que existe uni erro e Voce nao o Ve, isto pode ser por que Voce e o compilador nao estuo Oiliando para o me sino codigo. Verilique seu ambiente para se assegurar que o programa que Voce esta editando e o mesmoque o Python esta tentando executar. Se Voce nao esta certo. tente colocar uni erro de sintaxe obvio e deliberado noinscio do programa. Agora execute ou importe) O programa noVamente. Se o compilador nao encontrar Ο ΠΟVΟ erro proVaVel mente existe algo de errado com a manetra como o ambiente esta configurado.
186쪽
Apronoa Computacao com Python Documentatiori, Versao q.
Se isto aconiecer. uma Dordagem e iniciar noVamente com um novo programa como 'Hello ridi V. e se assegurarde que Voce consegue colocar um programa conliecido para executar. Entao gradual mente adicione as partes do novo programa ao programa que esta lanci Onando.
Uma VeZ que seu programa esta siniaticamente correto, O interpretador do Python pode importa-lo e comeςar a executa-lo. Ο que poderia dar errado
23. 2.2 n. 2.2 Meu pros rama trava
Se voce acha que tem una laςo infinito e desconlia de qual seja laςo causador do problema adicione urna declaraquo print no final do laςo que imprima os valores das variaveis na condiςao e o Valor da condiςao. Por exemplo
187쪽
Aprono a Computa octo com Python Documentatiori, Versao q.
Se Voce nao esta certo de como o seu programa esta fluindo. adicione declaraςoes O in t ao inscio de cada funςaoconi uina mens agem semelliante a Ventrando na funςao f OO'. onde fOO e o nome da funςao Agora quando Voce executar o programa, sera exibido um rastro de cada fui no a medida em que ela e in Vocada.
188쪽
Apronoa Computacao com Python Documentatiori, Versao q.
MyError Erro cle Chave): Voce esta tentando acessar iam elemento de una dicionario uti ligando uni valor de chaveque o dicionario naΟ Contem. ΛttrihuteError Erro cle Λtrihuto): Voce esta tentando acessar iam atributo ou melodo que nao existe em uni P et . IndexError Erro de Inclice): O indice que voce esta usando para acessar uma lista String ou tupla nao existeno objeto ou seja, e maior que seu comprimento menos um. Imediatamente antes do ponto do erro, adicione unia delaraςao print para mostrar o Valor do indice e o comprimento do GHem. O GHem e do tamantio correto o indice 2Sta com o Valor adequado
Um dos problemas com o uso de declaraςoes Print para a depuraςao e que a saida pode ficu confusa. dificultando a depuraςao. ao inves de facilitar. Ha duas coisas que poclem ser fellas: simplificar a saida ou simplificar o programa.
Para Simplificar a saida, Voce pode remoVer ou comentar as declaraqoes Print que nao estuo cludando. ou combina-las. . ainda. formatar a saida para facilitar o entendimento. Para simplificar o programa, existem Varias coisas que Voce pode faZer Primetro; reduZa o problema no quat o programa esta traballiando. Por exemplo. se Voce estu Ordenando um arria'. Ordene um ' array' Dequeno. Se Oprograma recebe enuada do usuario; de a ele a entrada mais Simples capaZ de causar o problema. Segundo, limpe o programa. RemoVa codigo inutii e reorgani Ze o programa para toma-lo lao facit de ter quanto possiVel. Por exemplo, se Voce suspelta que o problema esta numa parte profundamente aninhada do programa, tentemescreVer aqvela parte com uma estrutura mais Simples. Se Voce Suspelta de urna funςao longa. tente dividi-la emfunςoes menores e testa-las sepurndumente. Multas VeZes o processo de encontrar o caso de teste minimo leVa Voce no erro. Se Voce descobri r que o programa functona em tima si tuaςao, mas nao em tra. Voce j a tem uma boa dica a respello do que esta acontecendo. De forma semelliante; mescrever pedaςOs de codigo pode uda a encontrar erros sutis. Se Voce faZ uma alteraςao que Voce pensa que nao alata o programa, e ela alata, Voce tambem tem uma dica.
23. 3 A. 3 Erros oe se mantica
De certa forma, os erros de semantica Sao os mais disiceis de depurar porque o compilador e o sisterna de tempode execuςao nao fornecem informaqoes sobre o que esta errado. Somente Voce Sabe o que o programa deVe faZer, e somente Voce sabe que ele nao esta faZendo isto. O primetro passo e faZer uina conexao entre o texto do programa e o comportamento que Voce esta Vendo. Voce precisa de uina impotese sobre o que o programa esta real mente faZendo. Uma das coisas que di ficultam e que os computadores traballiam multo rapido. Voce sen re defriara que a veloci clade do programa pudesse ser diminuida para a Veloci clade humana. e com alguns depuradores Voce pode. Mas O tempo que leVa para inseri r umas pOucas declaraqOes print bem colocadas e geral mente mais curto quando comparado a configurar uni depurador, inseri r e remover brea sinu, e 'caminitar ' peto
23. 3. 4 A. 3. et Meu pros rama nao functoria
Voce deveria se faZer as seguintes perguntas Ha alguma coisa que o programa deveria faZer. mas que nao parece que estv acontecendo
189쪽
Aprono a Computa octo com Python Documentatiori, Versao q.
Nao esta acontecendo alguma coisa que nao deVeria aconiecer Encontre o codigo no seu programa que executan funςao e Vria se ele esta executando no momento errado ou de forma errada. Uma parte do codigo esta prodii indo o elatio e sperado Cetilique-se que Voce entende O codigo em questuo, e speciat mente se ele emolVe chamadas de funcoes ou melodos em outros modulos da lingvagem. Leia a documentaqao das funcoes e modulos que Voce e Sta utili Zando. Teste as funςoes escrevendo casos Simples de teste everificando os resultados Para programar Voce precisa ter uni modeto mental de como seus programas traballiam. Se Voce escreve um programaque nao faZ aquilo que Voce espera, e multo conium que o problema nao estria no programa, mas sim no seu modet o
A mellior manetra de corrigi r seu modeto mental e quebrar o programa em seus componentes gerat mente as funςOese melodos) e testar cada componente de forma independente. Uma VeZ que Voce tentia encontrado a di ferenςa entre seu modeto e a reali clade, Voce pode re sol Ver o problema Viamente, componentes devem ser desen OlVidos e testudo a medida que o seu programa Vai ganliando Vida. Se Voce encontra uni problema, haVera uina pequena quanti clade de novo codigo com functonamento incerto.
Escrever expressoes complexas e legat se elas forem legi veis, mas pode ser dificii de depurar. Gerat mente e vina boa
A versao explicita e mais facit de ter pois os nomes das variaveis fornecem documentaςao adicional. e e mais facildepurar. ja que Voce pode Verificar os tipos das VariaVeis intermediarias e mostrar seus Valores. Um Outro problema que pocle ocorrer com expressoes longas e que a ordem de avaliaςao pode nao ser o que Voce espera. Por exemplo. se Voce esta traduZido a expressao X g ui XXX faZer a equaςao matematica) para Python. voce
190쪽
Apronoa Computacao com Python Documentatiori, Versao q.
Agora Voce tem a Oportuni clade de mostrar o Valor de qt contrados antes de devolve-lo.
Isto acontece. Mesmo os melliores programadores en acam de VeZ em quando. s VeZes Voce traballia num programapor tanto tempo que nao consegue Ver o erro. Um par fresco de Othos e o que se precisa. Antes de traZer mais alguem; certi lique-se de que Voce tentia esgotado as tecnicas descritas aqui. Seu programa deveser tuo simples quanto possi Vel e Voce deVe estar traballiando com a mai S simples das entradas que causam O erro. Voce deve ter declaraςoes prini nos iugares apropriados sem comprometer a compreensivi clade da saida do programa). Voce tem que entender o problema o susiciente para descreVe-lo concisamente. Quando Voce trouxer alguem pra cludar. asSegure-se de clar a este alguem a informaςao que ele precisa Se existe unia mensagem de erro, o que e ela e que parte do programa ela indica Quat mi a ultima coisa que voce feZ antes deste erro aconiecer Quais foram as ultimas linitas de codigo que Voce 2SCreVeU ou quat e o novo caso de teste que fallia O que voce ja tentou ate o momento. e o que Voce aprendeu Quando Voce encontrar um erro gaste um segundo para pensar sobre o que Voce poderia faZer para encontra-lo mais rapido. Da proxima VeZ que Voce Ver algo similar Voce tera condiςoes de encontrar o erro mais rapidamente.