Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Pensando computação com Pyton, Notas de estudo de Informática

Abordagem dos tópicos do Curso de Ciências da Computação usando uma linguagem simples, portável, procedural e orientada a objetos e atual: Pyton

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 16/11/2009

jocile-serra-9
jocile-serra-9 🇧🇷

4 documentos

1 / 247

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Capítulo 1: O caminho do programa
Tópicos
Capítulo 1: O caminho do pr ograma
Capítulo 1: O caminho do pr ograma
Capítulo 2: Variáveis, expressões e com andos
2.1 Valores e tipos
2.2 Variáveis
2.3 Nomes de variáveis e palavras reservadas
2.4 Comandos
2.5 Avaliando expressões
2.6 Operadores e operan dos
2.7 Ordem dos opera dores
2.8 Operações com strings
2.9 Composição
2.11 Glossá rio
Capítulo 2: Variáveis, expressões e com andos
2.1 Valores e tipos
2.2 Variáveis
2.3 Nomes de variáveis e palavras reservadas
2.4 Comandos
2.5 Avaliando expressões
2.6 Operadores e operan dos
2.7 Ordem dos opera dores
2.8 Operações com strings
2.9 Composição
2.11 Glossá rio
Capítulo 3: Funções
3.1 Chamadas de funções
3.2 Conversão en tre tipos
3.3 Coerção ent re tipos
3.4 Funções ma temáticas
3.5 Composição
3.6 Adicionando novas funções
3.7 Definições e uso
3.8 Fluxo de execução
3.9 Parâ metros e arg umentos
3.10 Variá veis e parâm etros são loca is
3.11 Diagr amas da pilha
3.12 Funções com resultados
3.13 Glossár io
Capítulo 3: Funções
Capítulo 4: Condicionais e recursã o
4.1 O operador m ódulo
4.2 Expressões booleana s
4.3 Operadores lógicos
4.4 Execução condicional
4.5 Execução altern ativa
4.6 Condicionais enca deados
4.7 Condicionais aninhados
4.8 A instr ução return
4.9 Recursividade
4.10 Diagra mas de pilha para funções recursivas
4.11 Recursividade infinita
4.12 Entra da pelo teclado
4.13 Glossár io
Capítulo 4: Condicionais e recursã o
4.1 O operador m ódulo
4.2 Expressões booleana s
4.3 Operadores lógicos
4.4 Execução condicional
4.5 Execução altern ativa
4.6 Condicionais enca deados
4.7 Condicionais aninhados
4.8 A instr ução return
4.9 Recursividade
4.10 Diagra mas de pilha para funções recursivas
4.11 Recursividade infinita
4.12 Entra da pelo teclado
4.13 Glossár io
Capítulo 5: Funções fr utíferas
5.1 Valores de r etorno
5.2 Desenvolvimento de program as
5.3 Composição
5.4 Funções boolean as
5.5 Mais r ecursividade
O Livro Completo — Como Pensar como um Comp... http://pensarpython.incubadora.fapesp.br/portal/liv...
1 de 247 04-11-2009 17:40
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe Pensando computação com Pyton e outras Notas de estudo em PDF para Informática, somente na Docsity!

Capítulo 1: O caminho do programa

Tópicos

Capítulo 1: O caminho do programa Capítulo 1: O caminho do programa Capítulo 2: Variáveis, expressões e comandos 2.1 Valores e tipos 2.2 Variáveis 2.3 Nomes de variáveis e palavras reservadas 2.4 Comandos 2.5 Avaliando expressões 2.6 Operadores e operandos 2.7 Ordem dos operadores 2.8 Operações com strings 2.9 Composição 2.11 Glossário Capítulo 2: Variáveis, expressões e comandos 2.1 Valores e tipos 2.2 Variáveis 2.3 Nomes de variáveis e palavras reservadas 2.4 Comandos 2.5 Avaliando expressões 2.6 Operadores e operandos 2.7 Ordem dos operadores 2.8 Operações com strings 2.9 Composição 2.11 Glossário Capítulo 3: Funções 3.1 Chamadas de funções 3.2 Conversão entre tipos 3.3 Coerção entre tipos 3.4 Funções matemáticas 3.5 Composição 3.6 Adicionando novas funções 3.7 Definições e uso 3.8 Fluxo de execução 3.9 Parâmetros e argumentos 3.10 Variáveis e parâmetros são locais 3.11 Diagramas da pilha 3.12 Funções com resultados 3.13 Glossário Capítulo 3: Funções Capítulo 4: Condicionais e recursão 4.1 O operador módulo 4.2 Expressões booleanas 4.3 Operadores lógicos 4.4 Execução condicional 4.5 Execução alternativa 4.6 Condicionais encadeados 4.7 Condicionais aninhados 4.8 A instrução return 4.9 Recursividade 4.10 Diagramas de pilha para funções recursivas 4.11 Recursividade infinita 4.12 Entrada pelo teclado 4.13 Glossário Capítulo 4: Condicionais e recursão 4.1 O operador módulo 4.2 Expressões booleanas 4.3 Operadores lógicos 4.4 Execução condicional 4.5 Execução alternativa 4.6 Condicionais encadeados 4.7 Condicionais aninhados 4.8 A instrução return 4.9 Recursividade 4.10 Diagramas de pilha para funções recursivas 4.11 Recursividade infinita 4.12 Entrada pelo teclado 4.13 Glossário Capítulo 5: Funções frutíferas 5.1 Valores de retorno 5.2 Desenvolvimento de programas 5.3 Composição 5.4 Funções booleanas 5.5 Mais recursividade

5.6 Voto de confiança (Leap of faith) 5.7 Mais um exemplo 5.8 Checagem de tipos 5.9 Glossário Capítulo 5: Funções frutíferas 5.1 Valores de retorno 5.2 Desenvolvimento de programas 5.3 Composição 5.4 Funções booleanas 5.5 Mais recursividade 5.6 Voto de confiança (Leap of faith) 5.7 Mais um exemplo 5.8 Checagem de tipos 5.9 Glossário Capítulo 6: Iteração Capítulo 6: Iteração Capítulo 7: Strings Capítulo 7: Strings Capítulo 8: Listas Capítulo 8: Listas Capítulo 9: Tuplas Capítulo 9: Tuplas Capítulo 10: Dicionários Capítulo 10: Dicionários Capítulo 11: Arquivos e exceções Capítulo 11: Arquivos e exceções Capítulo 12: Classes e objetos Capítulo 12: Classes e objetos Capítulo 13: Classes e funções Capítulo 13: Classes e funções Capítulo 14: Classes e métodos Capítulo 14: Classes e métodos Capítulo 15: Conjuntos de objetos Capítulo 15: Conjuntos de objetos Capitulo 16: Herança Capitulo 16: Herança Capítulo 17: Listas encadeadas Capítulo 18: Pilhas Capítulo 18: Pilhas Capítulo 19: Filas Capítulo 19: Filas Capítulo 20: Árvores Capítulo 20: Árvores

A meta deste livro é ensinar a você a pensar como um cientista da computação. Esta maneira de pensar combina algumas das melhores características da matemática, enge matemáticos, os cientistas da computação usam linguagens formais para representar idéias (especificamente, computações). Como engenheiros, eles projetam coisas, monta componentes e avaliando as vantagens e desvantagens de diferentes alternativas. Como cientistas naturais, eles observam o comportamento de sistemas complexos, formula

A mais importante habilidade para um cientista da computação é a solução de problemas. A solucão de problemas é a habilidade de formular questões, pensar criativame expressar uma solução de forma clara e precisa. Ocorre que aprender a programar é uma excelente oportunidade de praticar as habilidades da solução de problemas. É por i caminho do programa?.

Em um nível, você estará aprendendo a programar, uma habilidade útil por si mesma. Em outro nível, você estará usando a programação como meio para um fim. À medida tornará mais claro.

1.1 A linguagem de programação Python

A linguagem de programação que você estará aprendendo é Python. Python é um exemplo de uma linguagem de programação de alto nível ; outras linguagens de alto n falar são C, C++, Perl e Java.

Como você poderia deduzir a partir das palavras ?linguagem de alto nível?, também existem as ?linguagens de baixo nível?, às vezes chamadas de ?linguagens de máquina? o (?linguagens de montagem?). Dito de maneira simples, computadores só podem executar programas escritos em linguagens de baixo nível. Deste modo, programas escritos que ser processados antes que possam rodar. Este processamento extra toma algum tempo, o que é uma pequena desvantagem das linguagens de alto nível.

Mas as vantagens são enormes. Primeiro, é muito mais fácil programar em uma linguagem de alto nível. Programas escritos em uma linguagem de alto nível levam menos t mais curtos e fáceis de ler, e é mais provável que estejam corretos. Segundo, as linguagens de alto nível são portáveis , o que significa que elas podem rodar em tipos diferent ou nenhuma modificação. Programas em baixo nível só podem rodar em um único tipo de computador e precisam ser re-escritos para rodar em outro tipo.

Devido a estas vantagens, quase todos os programas são escritos em linguagens de alto nível. As de baixo nível são utilizadas somente para umas poucas aplicações especializ

Dois tipos de programas processam linguagens de alto nível, traduzindo-as em linguagens de baixo nível: interpretadores e compiladores. Um interpretador lê um progr alto nível e o executa, ou seja, faz o que o programa diz. Ele processa o programa um pouco de cada vez, alternadamente: ora lendo algumas linhas, ora realizando computaç

XXXfigura p.2a

Um compilador lê o programa e o traduz completamente antes que o programa comece a rodar. Neste caso, o programa escrito em linguagem de alto nível é chamado de traduzido é chamado de código objeto ou executável. Uma vez que um programa é compilado, você pode executá-lo repetidamente, sem que precise de nova tradução.

XXXfigura p.2b

Python não é tão indulgente. Se existir um único erro de sintaxe em qualquer lugar em seu programa, o interpretador Python exibirá uma mensagem de erro e terminará, e programa. Durante as primeiras semanas da sua carreira como programador, você provavelmente perderá um bocado de tempo procurando erros de sintaxe. Conforme gan cometerá menos erros e os encontrará mais rapidamente.

1.3.2 Erros em tempo de execução ( runtime errors )

O segundo tipo de erro é o erro de runtime, ou erro em tempo de execução, assim chamado porque não aparece até o momento em que você rode o programa. Estes erros são exceções porque eles normalmente indicam que alguma coisa excepcional (e ruim) aconteceu.

Erros de runtime são raros nos programas simples que você verá nos primeiros capítulos, assim levará algum tempo até que você encontre um.

1.3.3 Erros de semântica

O terceiro tipo de erro é o erro de semântica (mais comumente chamado erro de lógica). Se existe um erro de semântica em seu programa, ele vai rodar com sucesso, no s irá gerar quaisquer mensagens de erro, mas ele não fará a coisa certa. Fará alguma outra coisa. Especificamente, ele fará aquilo que você tiver dito a ele que faça.

O problema é que o programa que você escreveu não é aquele que você queria escrever. O significado do programa (sua semântica ou lógica) está errado. Identificar erros sem manhas porque requer que você trabalhe de trás para frente, olhando a saída do programa e tentando imaginar o que ele está fazendo.

1.3.4 Depuração experimental ( Debugging )

Uma das habilidades mais importantes que você vai adquirir é a de depurar. Embora possa ser frustrante, depurar é uma das partes mais intelectualmente ricas, desafiadora programação.

De certa maneira, a depuração é como um trabalho de detetive. Você se depara com pistas, e tem que deduzir os processos e eventos que levaram aos resultados que aparecem

Depurar também é como uma ciência experimental. Uma vez que você tem uma idéia do que está errado, você modifica o seu programa e tenta de novo. Se a sua hipótese esta prever o resultado da modificação e fica um passo mais perto de um programa que funciona. Se a sua hipótese estava errada, você tem que tentar uma nova. Como Sherlock tiver eliminado o impossível, aquilo que restou, ainda que improvável, deve ser a verdade.? (Arthur Conan Doyle, O sinal dos quatro ).

Para algumas pessoas, programação e depuração são a mesma coisa. Ou seja, programar é o processo de gradualmente depurar um programa até que ele faça o que você qu começar com um programa que faça alguma coisa e ir fazendo pequenas modificações, depurando-as conforme avança, de modo que você tenha sempre um programa que fu

Por exemplo, o Linux é um sistema operacional que contém milhares de linhas de código, mas começou como um programa simples que Linus Torvalds usou para explorar o Larry Greenfield, ?Um dos primeiros projetos de Linus Torvalds foi um programa que deveria alternar entre imprimir AAAA e BBBB. Isto depois evoluiu até o Linux?. ( The Li

Capítulos posteriores farão mais sugestões sobre depuração e outras práticas de programação.

1.4 Linguagens naturais e linguagens formais

Linguagens naturais são as linguagens que as pessoas falam, como o português, o inglês e o espanhol. Elas não foram projetadas pelas pessoas (muito embora as pessoa nelas); elas evoluíram naturalmente.

Linguagens formais são linguagens que foram projetadas por pessoas para aplicações específicas. Por exemplo, a notação que os matemáticos usam é uma linguagem for em denotar relações entre números e símbolos. Os químicos usam uma linguagem formal para representar a estrutura química das moléculas. E, mais importante:

Linguagens de programação são linguagens formais que foram desenvolvidas para expressar computações.

As linguagens formais tendem a ter regras estritas quanto à sintaxe. Por exemplo, 3 + 3 = 6 é uma expressão matemática sintaticamente correta, mas 3=+6$ não é. H2O sintaticamente correto, mas 2Zz não é.

As regras de sintaxe são de dois tipos, um relacionado aos tokens , outro à estrutura. ?Tokens? são os elementos básicos da linguagem, como as palavras, números, e elemen com 3=+6$ é que $ não é um token válido em linguagem matemática (pelo menos até onde sabemos). Do mesmo modo, 2Zz é inválida porque não existe nenhum elemento

O segundo tipo de erro de sintaxe está relacionado à estrutura de uma expressão? quer dizer, ao modo como os tokens estão arrumados. A expressão 3=+6$ é estruturalme colocar um sinal de ?mais? imediatamente após um sinal de ?igual?. Do mesmo modo, fórmulas moleculares devem ter índices subscritos colocados depois do nome do eleme

Como exercício, crie o que pareça ser uma frase bem estruturada em português com ?tokens? irreconhecíveis dentro dela. Depois escreva outra frase com todos os ?tok estrutura inválida.

Quando você lê uma frase em português ou uma expressão em uma linguagem formal, você tem de imaginar como é a estrutura da frase (embora, em uma linguagem natur inconscientemente). Este processo é chamado parsing (análise sintática).

Por exemplo, quando você ouve a frase, ?O outro sapato caiu?, Você entende que ?o outro sapato? é o sujeito e ?caiu? é o verbo. Uma vez que você analisou a frase, você pode i semântica da frase. Assumindo que você saiba o que é um sapato e o que significa cair, você entenderá o sentido geral desta frase.

Muito embora as linguagens formais e as naturais tenham muitas características em comum? tokens , estrutura, sintaxe e semântica? existem muitas diferenças:

ambigüidade

As linguagens naturais estão cheias de ambigüidades, as quais são contornadas pelas pessoas pelo uso de pistas contextuais e outras informações. Já as linguagens for para ser quase ou totalmente desprovidas de ambigüidade, o que significa que qualquer expressão tem exatamente um sentido, independente do contexto.

redundância

Para compensar a ambigüidade e reduzir mal-entendidos, as linguagens naturais empregam de muita redundância. Consequentemente, elas são em muitos casos prol excesso. As linguagens formais são menos redundantes e mais concisas.

literalidade

As linguagens naturais estão cheias de expressões idiomáticas e metáforas. Se eu digo ?O outro sapato caiu?, provavelmente não existe nenhum sapato e nada caindo. querem dizer exatamente o que dizem.

Pessoas que crescem falando uma linguagem natural? todo mundo? muitas vezes têm dificuldade para se acostumar com uma linguagem formal. De várias maneiras, a dife naturais é como a diferença entre poesia e prosa, porém mais acentuada:

poesia

As palavras são usadas pela sua sonoridade além de seus sentidos e o poema como um todo cria um efeito ou uma reação emocional. A ambigüidade não é apenas freq vezes proposital.

prosa

O sentido literal das palavras é mais importante, e a estrutura contribui mais para o significado. A prosa é mais fácil de analisar do que a poesia, mas ainda é muitas v

programas

O significado de um programa de computador é exato e literal, e pode ser inteiramente entendido pela análise de seus tokens e de sua estrutura.

Aqui vão algumas sugestões para a leitura de programas (e de outras linguagens formais). Primeiro, lembre-se que linguagens formais são muito mais densas do que linguag demorado lê-las. A estrutura, também, é muito importante, logo, geralmente não é uma boa idéia ler de cima para baixo, da esquerda para a direita. Em vez disso, aprenda a cabeça, identificando os tokens e interpretando a estrutura. Finalmente, os detalhes são importantes. Pequenas coisas como erros ortográficos e má pontuação, com as quai linguagens naturais, podem fazer uma grande diferença em uma linguagem formal.

1.5 O primeiro programa

Tradicionalmente, o primeiro programa escrito em uma nova linguagem de programação é chamado de ?Alô, Mundo!? porque tudo que ele faz é apresentar as palavras ?Alô assim:

print ?Alô, Mundo!?

Isto é um exemplo de um comando print , o qual na realidade não ?imprime? nada em papel. Ele apresenta o valor na tela. Neste caso, o resultado são as palavras:

Alô, Mundo!

As aspas no programa marcam o começo e o fim do valor; elas não aparecem no resultado final.

Algumas pessoas julgam a qualidade de uma linguagem de programação pela simplicidade do programa ?Alô, Mundo!?. Por este padrão, Python se sai tão bem quanto é poss

1.6 Glossário

solução de problemas ( problem solving )

O processo de formular um problema, encontrar uma solução e expressar esta solução.

linguagem de alto nível ( high-level language )

Uma linguagem de programação como Python que é projetada para ser fácil para seres humanos lerem e escreverem.

linguagem de baixo nível ( low-level language )

Uma linguagem de programação que é concebida para ser fácil para um computador executar; também chamadas de "linguagem de máquina" ou "linguagem assembl montagem)

portabilidade ( portability )

Característica de um programa que roda em mais de um tipo de computador.

interpretar ( interpret )

Executar um programa escrito em uma linguagem de alto nível traduzindo-o uma linha de cada vez.

compilar ( compile )

Traduzir todo um programa escrito em uma linguagem de alto nível para uma de baixo nível de um só vez, em preparação para uma execução posterior.

código fonte ( source code )

Um programa em uma linguagem de alto nível, antes de ter sido compilado.

código objeto ( object code )

A saída do compilador, depois que ele traduziu o programa.

executável ( executable )

Um outro nome para código objeto que está pronto para ser executado.

script

Um programa guardado em um arquivo (normalmente um que será interpretado).

2.4 Comandos 2.5 Avaliando expressões 2.6 Operadores e operandos 2.7 Ordem dos operadores 2.8 Operações com strings 2.9 Composição 2.11 Glossário Capítulo 3: Funções 3.1 Chamadas de funções 3.2 Conversão entre tipos 3.3 Coerção entre tipos 3.4 Funções matemáticas 3.5 Composição 3.6 Adicionando novas funções 3.7 Definições e uso 3.8 Fluxo de execução 3.9 Parâmetros e argumentos 3.10 Variáveis e parâmetros são locais 3.11 Diagramas da pilha 3.12 Funções com resultados 3.13 Glossário Capítulo 3: Funções Capítulo 4: Condicionais e recursão 4.1 O operador módulo 4.2 Expressões booleanas 4.3 Operadores lógicos 4.4 Execução condicional 4.5 Execução alternativa 4.6 Condicionais encadeados 4.7 Condicionais aninhados 4.8 A instrução return 4.9 Recursividade 4.10 Diagramas de pilha para funções recursivas 4.11 Recursividade infinita 4.12 Entrada pelo teclado 4.13 Glossário Capítulo 4: Condicionais e recursão 4.1 O operador módulo 4.2 Expressões booleanas 4.3 Operadores lógicos 4.4 Execução condicional 4.5 Execução alternativa 4.6 Condicionais encadeados 4.7 Condicionais aninhados 4.8 A instrução return 4.9 Recursividade 4.10 Diagramas de pilha para funções recursivas 4.11 Recursividade infinita 4.12 Entrada pelo teclado 4.13 Glossário Capítulo 5: Funções frutíferas 5.1 Valores de retorno 5.2 Desenvolvimento de programas 5.3 Composição 5.4 Funções booleanas 5.5 Mais recursividade 5.6 Voto de confiança (Leap of faith) 5.7 Mais um exemplo 5.8 Checagem de tipos 5.9 Glossário Capítulo 5: Funções frutíferas 5.1 Valores de retorno 5.2 Desenvolvimento de programas 5.3 Composição 5.4 Funções booleanas 5.5 Mais recursividade 5.6 Voto de confiança (Leap of faith) 5.7 Mais um exemplo 5.8 Checagem de tipos 5.9 Glossário Capítulo 6: Iteração Capítulo 6: Iteração Capítulo 7: Strings Capítulo 7: Strings Capítulo 8: Listas Capítulo 8: Listas Capítulo 9: Tuplas Capítulo 9: Tuplas Capítulo 10: Dicionários

Capítulo 10: Dicionários Capítulo 11: Arquivos e exceções Capítulo 11: Arquivos e exceções Capítulo 12: Classes e objetos Capítulo 12: Classes e objetos Capítulo 13: Classes e funções Capítulo 13: Classes e funções Capítulo 14: Classes e métodos Capítulo 14: Classes e métodos Capítulo 15: Conjuntos de objetos Capítulo 15: Conjuntos de objetos Capitulo 16: Herança Capitulo 16: Herança Capítulo 17: Listas encadeadas Capítulo 18: Pilhas Capítulo 18: Pilhas Capítulo 19: Filas Capítulo 19: Filas Capítulo 20: Árvores Capítulo 20: Árvores

A meta deste livro é ensinar a você a pensar como um cientista da computação. Esta maneira de pensar combina algumas das melhores características da matemática, enge matemáticos, os cientistas da computação usam linguagens formais para representar idéias (especificamente, computações). Como engenheiros, eles projetam coisas, monta componentes e avaliando as vantagens e desvantagens de diferentes alternativas. Como cientistas naturais, eles observam o comportamento de sistemas complexos, formula

A mais importante habilidade para um cientista da computação é a solução de problemas. A solucão de problemas é a habilidade de formular questões, pensar criativame expressar uma solução de forma clara e precisa. Ocorre que aprender a programar é uma excelente oportunidade de praticar as habilidades da solução de problemas. É por i caminho do programa?.

Em um nível, você estará aprendendo a programar, uma habilidade útil por si mesma. Em outro nível, você estará usando a programação como meio para um fim. À medida tornará mais claro.

1.1 A linguagem de programação Python

A linguagem de programação que você estará aprendendo é Python. Python é um exemplo de uma linguagem de programação de alto nível ; outras linguagens de alto n falar são C, C++, Perl e Java.

Como você poderia deduzir a partir das palavras ?linguagem de alto nível?, também existem as ?linguagens de baixo nível?, às vezes chamadas de ?linguagens de máquina? o (?linguagens de montagem?). Dito de maneira simples, computadores só podem executar programas escritos em linguagens de baixo nível. Deste modo, programas escritos que ser processados antes que possam rodar. Este processamento extra toma algum tempo, o que é uma pequena desvantagem das linguagens de alto nível.

Mas as vantagens são enormes. Primeiro, é muito mais fácil programar em uma linguagem de alto nível. Programas escritos em uma linguagem de alto nível levam menos t mais curtos e fáceis de ler, e é mais provável que estejam corretos. Segundo, as linguagens de alto nível são portáveis , o que significa que elas podem rodar em tipos diferent ou nenhuma modificação. Programas em baixo nível só podem rodar em um único tipo de computador e precisam ser re-escritos para rodar em outro tipo.

Devido a estas vantagens, quase todos os programas são escritos em linguagens de alto nível. As de baixo nível são utilizadas somente para umas poucas aplicações especializ

Dois tipos de programas processam linguagens de alto nível, traduzindo-as em linguagens de baixo nível: interpretadores e compiladores. Um interpretador lê um progr alto nível e o executa, ou seja, faz o que o programa diz. Ele processa o programa um pouco de cada vez, alternadamente: ora lendo algumas linhas, ora realizando computaç

XXXfigura p.2a

Um compilador lê o programa e o traduz completamente antes que o programa comece a rodar. Neste caso, o programa escrito em linguagem de alto nível é chamado de traduzido é chamado de código objeto ou executável. Uma vez que um programa é compilado, você pode executá-lo repetidamente, sem que precise de nova tradução.

XXXfigura p.2b

Python é considerada uma linguagem interpretada porque os programas em Python são executados por um interpretador. Existem duas maneiras de usar o interpretador: n modo de script. No modo de linha de comando, você digita programas em Python e o interpretador mostra o resultado:

$ python Python 1.5.2 (#1, Feb 1 2000, 16:32:16) Copyright 1991-1995 Stichting Mathematish Centrum, Amsterdam

print 1 + 1 2

A primeira linha deste exemplo é o comando que inicia o interpretador Python. As duas linhas seguintes são mensagens do interpretador. A terceira linha começa com >>>, interpretador para indicar que ele está pronto. Nós digitamos print 1 + 1 , e o interpretador respondeu 2.

Você também pode escrever um programa em um arquivo e usar o interpretador para executar o conteúdo deste arquivo. Um arquivo como este é chamado de script. Por ex para criar um arquivo chamado leticia.py com o seguinte conteúdo:

print 1 + 1

Por convenção, arquivos que contenham programas em Python têm nomes que terminam com .py.

Para executar o programa, temos de dizer ao interpretador o nome do script:

programação.

De certa maneira, a depuração é como um trabalho de detetive. Você se depara com pistas, e tem que deduzir os processos e eventos que levaram aos resultados que aparecem

Depurar também é como uma ciência experimental. Uma vez que você tem uma idéia do que está errado, você modifica o seu programa e tenta de novo. Se a sua hipótese esta prever o resultado da modificação e fica um passo mais perto de um programa que funciona. Se a sua hipótese estava errada, você tem que tentar uma nova. Como Sherlock tiver eliminado o impossível, aquilo que restou, ainda que improvável, deve ser a verdade.? (Arthur Conan Doyle, O sinal dos quatro ).

Para algumas pessoas, programação e depuração são a mesma coisa. Ou seja, programar é o processo de gradualmente depurar um programa até que ele faça o que você qu começar com um programa que faça alguma coisa e ir fazendo pequenas modificações, depurando-as conforme avança, de modo que você tenha sempre um programa que fu

Por exemplo, o Linux é um sistema operacional que contém milhares de linhas de código, mas começou como um programa simples que Linus Torvalds usou para explorar o Larry Greenfield, ?Um dos primeiros projetos de Linus Torvalds foi um programa que deveria alternar entre imprimir AAAA e BBBB. Isto depois evoluiu até o Linux?. ( The Li

Capítulos posteriores farão mais sugestões sobre depuração e outras práticas de programação.

1.4 Linguagens naturais e linguagens formais

Linguagens naturais são as linguagens que as pessoas falam, como o português, o inglês e o espanhol. Elas não foram projetadas pelas pessoas (muito embora as pessoa nelas); elas evoluíram naturalmente.

Linguagens formais são linguagens que foram projetadas por pessoas para aplicações específicas. Por exemplo, a notação que os matemáticos usam é uma linguagem for em denotar relações entre números e símbolos. Os químicos usam uma linguagem formal para representar a estrutura química das moléculas. E, mais importante:

Linguagens de programação são linguagens formais que foram desenvolvidas para expressar computações.

As linguagens formais tendem a ter regras estritas quanto à sintaxe. Por exemplo, 3 + 3 = 6 é uma expressão matemática sintaticamente correta, mas 3=+6$ não é. H2O sintaticamente correto, mas 2Zz não é.

As regras de sintaxe são de dois tipos, um relacionado aos tokens , outro à estrutura. ?Tokens? são os elementos básicos da linguagem, como as palavras, números, e elemen com 3=+6$ é que $ não é um token válido em linguagem matemática (pelo menos até onde sabemos). Do mesmo modo, 2Zz é inválida porque não existe nenhum elemento

O segundo tipo de erro de sintaxe está relacionado à estrutura de uma expressão? quer dizer, ao modo como os tokens estão arrumados. A expressão 3=+6$ é estruturalme colocar um sinal de ?mais? imediatamente após um sinal de ?igual?. Do mesmo modo, fórmulas moleculares devem ter índices subscritos colocados depois do nome do eleme

Como exercício, crie o que pareça ser uma frase bem estruturada em português com ?tokens? irreconhecíveis dentro dela. Depois escreva outra frase com todos os ?tok estrutura inválida.

Quando você lê uma frase em português ou uma expressão em uma linguagem formal, você tem de imaginar como é a estrutura da frase (embora, em uma linguagem natur inconscientemente). Este processo é chamado parsing (análise sintática).

Por exemplo, quando você ouve a frase, ?O outro sapato caiu?, Você entende que ?o outro sapato? é o sujeito e ?caiu? é o verbo. Uma vez que você analisou a frase, você pode i semântica da frase. Assumindo que você saiba o que é um sapato e o que significa cair, você entenderá o sentido geral desta frase.

Muito embora as linguagens formais e as naturais tenham muitas características em comum? tokens , estrutura, sintaxe e semântica? existem muitas diferenças:

ambigüidade

As linguagens naturais estão cheias de ambigüidades, as quais são contornadas pelas pessoas pelo uso de pistas contextuais e outras informações. Já as linguagens for para ser quase ou totalmente desprovidas de ambigüidade, o que significa que qualquer expressão tem exatamente um sentido, independente do contexto.

redundância

Para compensar a ambigüidade e reduzir mal-entendidos, as linguagens naturais empregam de muita redundância. Consequentemente, elas são em muitos casos prol excesso. As linguagens formais são menos redundantes e mais concisas.

literalidade

As linguagens naturais estão cheias de expressões idiomáticas e metáforas. Se eu digo ?O outro sapato caiu?, provavelmente não existe nenhum sapato e nada caindo. querem dizer exatamente o que dizem.

Pessoas que crescem falando uma linguagem natural? todo mundo? muitas vezes têm dificuldade para se acostumar com uma linguagem formal. De várias maneiras, a dife naturais é como a diferença entre poesia e prosa, porém mais acentuada:

poesia

As palavras são usadas pela sua sonoridade além de seus sentidos e o poema como um todo cria um efeito ou uma reação emocional. A ambigüidade não é apenas freq vezes proposital.

prosa

O sentido literal das palavras é mais importante, e a estrutura contribui mais para o significado. A prosa é mais fácil de analisar do que a poesia, mas ainda é muitas v

programas

O significado de um programa de computador é exato e literal, e pode ser inteiramente entendido pela análise de seus tokens e de sua estrutura.

Aqui vão algumas sugestões para a leitura de programas (e de outras linguagens formais). Primeiro, lembre-se que linguagens formais são muito mais densas do que linguag demorado lê-las. A estrutura, também, é muito importante, logo, geralmente não é uma boa idéia ler de cima para baixo, da esquerda para a direita. Em vez disso, aprenda a cabeça, identificando os tokens e interpretando a estrutura. Finalmente, os detalhes são importantes. Pequenas coisas como erros ortográficos e má pontuação, com as quai linguagens naturais, podem fazer uma grande diferença em uma linguagem formal.

1.5 O primeiro programa

Tradicionalmente, o primeiro programa escrito em uma nova linguagem de programação é chamado de ?Alô, Mundo!? porque tudo que ele faz é apresentar as palavras ?Alô assim:

print ?Alô, Mundo!?

Isto é um exemplo de um comando print , o qual na realidade não ?imprime? nada em papel. Ele apresenta o valor na tela. Neste caso, o resultado são as palavras:

Alô, Mundo!

As aspas no programa marcam o começo e o fim do valor; elas não aparecem no resultado final.

Algumas pessoas julgam a qualidade de uma linguagem de programação pela simplicidade do programa ?Alô, Mundo!?. Por este padrão, Python se sai tão bem quanto é poss

1.6 Glossário

solução de problemas ( problem solving )

O processo de formular um problema, encontrar uma solução e expressar esta solução.

linguagem de alto nível ( high-level language )

Uma linguagem de programação como Python que é projetada para ser fácil para seres humanos lerem e escreverem.

linguagem de baixo nível ( low-level language )

Uma linguagem de programação que é concebida para ser fácil para um computador executar; também chamadas de "linguagem de máquina" ou "linguagem assembl montagem)

portabilidade ( portability )

Característica de um programa que roda em mais de um tipo de computador.

interpretar ( interpret )

Executar um programa escrito em uma linguagem de alto nível traduzindo-o uma linha de cada vez.

compilar ( compile )

Traduzir todo um programa escrito em uma linguagem de alto nível para uma de baixo nível de um só vez, em preparação para uma execução posterior.

código fonte ( source code )

Um programa em uma linguagem de alto nível, antes de ter sido compilado.

código objeto ( object code )

A saída do compilador, depois que ele traduziu o programa.

executável ( executable )

Um outro nome para código objeto que está pronto para ser executado.

script

Um programa guardado em um arquivo (normalmente um que será interpretado).

programa ( program )

Um conjunto de instruções que especifica uma computação.

algoritmo ( algorithm )

Um processo geral para solução de uma certa categoria de problemas.

bug

Um erro em um programa.

depuração ( debugging )

O processo de encontrar e remover qualquer um dos três tipos de erros de programação.

sintaxe ( syntax )

A estrutura de um programa.

erro de sintaxe ( syntax error )

Um erro em um programa que torna impossível a análise sintática (logo, também impossível a interpretação).

Capítulo 3: Funções Capítulo 4: Condicionais e recursão 4.1 O operador módulo 4.2 Expressões booleanas 4.3 Operadores lógicos 4.4 Execução condicional 4.5 Execução alternativa 4.6 Condicionais encadeados 4.7 Condicionais aninhados 4.8 A instrução return 4.9 Recursividade 4.10 Diagramas de pilha para funções recursivas 4.11 Recursividade infinita 4.12 Entrada pelo teclado 4.13 Glossário Capítulo 4: Condicionais e recursão 4.1 O operador módulo 4.2 Expressões booleanas 4.3 Operadores lógicos 4.4 Execução condicional 4.5 Execução alternativa 4.6 Condicionais encadeados 4.7 Condicionais aninhados 4.8 A instrução return 4.9 Recursividade 4.10 Diagramas de pilha para funções recursivas 4.11 Recursividade infinita 4.12 Entrada pelo teclado 4.13 Glossário Capítulo 5: Funções frutíferas 5.1 Valores de retorno 5.2 Desenvolvimento de programas 5.3 Composição 5.4 Funções booleanas 5.5 Mais recursividade 5.6 Voto de confiança (Leap of faith) 5.7 Mais um exemplo 5.8 Checagem de tipos 5.9 Glossário Capítulo 5: Funções frutíferas 5.1 Valores de retorno 5.2 Desenvolvimento de programas 5.3 Composição 5.4 Funções booleanas 5.5 Mais recursividade 5.6 Voto de confiança (Leap of faith) 5.7 Mais um exemplo 5.8 Checagem de tipos 5.9 Glossário Capítulo 6: Iteração Capítulo 6: Iteração Capítulo 7: Strings Capítulo 7: Strings Capítulo 8: Listas Capítulo 8: Listas Capítulo 9: Tuplas Capítulo 9: Tuplas Capítulo 10: Dicionários Capítulo 10: Dicionários Capítulo 11: Arquivos e exceções Capítulo 11: Arquivos e exceções Capítulo 12: Classes e objetos Capítulo 12: Classes e objetos Capítulo 13: Classes e funções Capítulo 13: Classes e funções Capítulo 14: Classes e métodos Capítulo 14: Classes e métodos Capítulo 15: Conjuntos de objetos Capítulo 15: Conjuntos de objetos Capitulo 16: Herança Capitulo 16: Herança Capítulo 17: Listas encadeadas Capítulo 18: Pilhas Capítulo 18: Pilhas Capítulo 19: Filas Capítulo 19: Filas Capítulo 20: Árvores Capítulo 20: Árvores

2.1 Valores e tipos

O valor (por exemplo, letras e números) é uma das coisas fundamentais que um programa manipula. Os valores que já vimos até agora foram o 2 (como resultado, quando Mundo!".

Esses valores pertencem a tipos diferentes: 2 é um inteiro, e "Alô, Mundo!" é uma string , assim chamada porque "string", em inglês, quer dizer seqüência, série, cadeia "série de letras". Você (e o interpretador) consegue identificar strings porque elas aparecem entre aspas.

O comando print também funciona com inteiros:

print 4 4

Se você estiver em dúvida sobre qual é o tipo de um determinado valor, o interpretador pode revelar:

type("Alô, Mundo!") <type 'string'> type(17) <type 'int'>

Nenhuma surpresa: strings pertencem ao tipo string e inteiros pertencem ao tipo int. Menos obviamente, números com um ponto decimal pertencem a um tipo chamado são representados em um formato chamado ponto flutuante [1]:

type(3.2) <type 'float'>

[1] N.T.: Observe o uso de ponto no lugar da vírgula para separar a parte inteira da parte fracionária.

O que dizer de valores como "17" e "3.2"? Eles parecem números, mas estão entre aspas, como strings:

type("17") <type 'string'> type("3.2") <type 'string'>

Eles são strings.

Ao digitar um número grande, é tentador usar pontos entre grupos de três dígitos, assim: 1.000.000. Isso não funciona porque Python usa o ponto como separador decimal inglês, resulta numa expressão válida, mas não no número que queríamos representar:

print 1,000, 1 0 0

Não é nada do que se esperava! Python interpreta 1,000,000 como uma tupla, algo que veremos no Capítulo 9. Por hora, lembre-se apenas de não colocar vírgulas nos núm

2.2 Variáveis

Uma das características mais poderosas de uma linguagem de programação é a habilidade de manipular variáveis. Uma variável é um nome que se refere a um valor.

O comando de atribuição cria novas variáveis e dá a elas valores:

mensagem = "E aí, Doutor?" n = 17 pi = 3.

Este exemplo faz três atribuições. A primeira atribui a string "E aí, Doutor?" a uma nova variável chamada mensagem. A segunda dá o valor inteiro 17 a n, e a terceir flutuante 3.14159 à variável chamada pi.

Uma maneira comum de representar variáveis no papel é escrever o nome delas com uma seta apontando para o valor da variável. Esse tipo de figura é chamado de diagram que estado cada variável está (pense nisso como o estado de espírito da variável). O diagrama a seguir mostra o resultado das instruções de atribuição:

XXXfigura pg.

O comando print também funciona com variáveis:

print mensagem E aí, Doutor? print n 17 print pi

Em cada um dos casos, o resultado é o valor da variável. Variáveis também têm tipo; novamente, podemos perguntar ao interpretador quais são eles:

type(mensagem) <type 'string'> type(n) <type 'int'> type(pi) <type 'float'>

O tipo de uma variável é o tipo do valor ao qual ela se refere.

mensagem = "E aí, Doutor?" mensagem 'E aí, Doutor?' print mensagem E aí, Doutor?

Quando Python exibe o valor de uma expressão, usa o mesmo formato que você usaria para entrar com o valor. No caso de strings, isso significa que as aspas são incluídas [ imprime o valor da expressão, que, neste caso, é o conteúdo da string.

Num script , uma expressão sozinha é um comando válido, porém sem efeito. O script :

17

"Alô, Mundo!" 1 + 1

não produz qualquer saída. Como você mudaria o "script" para exibir os valores destas quatro expressões?

2.6 Operadores e operandos

Operadores são símbolos especiais que representam computações como adição e multiplicação. Os valores que o operador usa são chamados operandos.

Todas as expressões seguintes são válidas em Python e seus significados são mais ou menos claros:

20+32 hora-1 hora60+minuto minuto/60 52 (5+9)(15-7)

Em Python, os símbolos +, -, / e o uso de parênteses para agrupamento têm o mesmo significado que em matemática. O asterisco (*) é o símbolo para multiplicação e ** é o

Quando um nome de variável aparece no lugar de um operando, ele é substituído pelo valor da variável, antes da operação ser executada.

Adição, subtração, multiplicação e potenciação fazem o que se espera, mas você pode ficar surpreso com a divisão. A operação seguinte tem um resultado inesperado:

minuto = 59 minuto/ 0

O valor de minuto é 59 e, em aritmética convencional, 59 dividido por 60 é 0,98333, não 0. A razão para a discrepância é que Python está realizando uma divisão inteira.

Quando ambos os operandos são inteiros, o resultado tem de ser também um inteiro e, por convenção, a divisão inteira sempre arredonda para baixo, mesmo em casos com está muito próximo:

minuto*100/ 98

De novo, o resultado é arredondado para baixo, mas agora pelo menos a resposta é aproximadamente correta. A alternativa é usar a divisão em ponto flutuante, o que verem

2.7 Ordem dos operadores

Quando mais de um operador aparece em uma expressão, a ordem de avaliação depende das regras de precedência. Python segue as mesmas regras de precedência para a matemática. O acrônimo PEMDAS é uma maneira prática de lembrar a ordem das operações:

Parênteses têm a mais alta precedência e podem ser usados para forçar uma expressão a ser avaliada na ordem que você quiser. Já que expressões entre parênteses sã (3-1) é 4, e (1+1)(5-2) é 8. Você também pode usar parênteses para tornar uma expressão mais fácil de ler, como em (minuto * 100) / 60 , ainda que iss Exponenciação ou potenciação tem a próxima precedência mais alta, assim 21+1 é 3 e não 4, e 313 é 3 e não 27. Multiplicação e Divisão têm a mesma precedência, que é mais alta do que a da Adição e da Subtração, que também têm a mesma precedência. Assim 23-1 dá 5 em ve (lembre-se de que na divisão inteira, 2/3=0). Operadores com a mesma precedência são avaliados da esquerda para a direita. Assim, na expressão minuto100/60, a multiplicação acontece primeiro, resultando transforma produzindo 98. Se as operações tivessem sido avaliadas da direita para a esquerda, o resultado poderia ter sido 591, que é 59 , que está errado.

2.8 Operações com strings

De maneira geral, você não pode executar operações matemáticas em strings, ainda que as strings se pareçam com números. O que segue é inválido (assumindo que mensag

mensagem-1 "Alô"/123 mensagem*"Alô" "15"+

Interessante é o operador +, que funciona com strings, embora ele não faça exatamente o que você poderia esperar. Para strings, o operador + representa concatenação , q operandos ligando-os pelos extremos. Por exemplo:

fruta = "banana" assada = " com canela" print fruta + assada

A saída deste programa é banana com canela. O espaço antes da palavra com é parte da string e é necessário para produzir o espaço entre as strings concatenadas.

O operador * também funciona com strings; ele realiza repetição. Por exemplo, "Legal"*3 é "LegalLegaLegal". Um dos operadores tem que ser uma string; o outro te

Por um lado, esta interpretação de + e * faz sentido pela analogia entre adição e multiplicação. Assim como 43 equivale a 4+4+4, não é de estranhar que "Legal"3 seja "Legal"+"Legal"+"Legal". Por outro lado, uma diferença significativa separa concatenação e repetição de adição e multiplicação. Você saberia mencionar uma propri que não ocorre na concatenação e na repetição?

2.9 Composição

Até agora, vimos os elementos de um programa -- variáveis, expressões, e instruções ou comandos -- isoladamente, sem mencionar como combiná-los.

Uma das características mais práticas das linguagens de programação é a possibilidade de pegar pequenos blocos e combiná-los numa composição. Por exemplo, nós sabe sabemos como exibi-los; acontece que podemos fazer as duas coisas ao mesmo tempo:

print 17 + 3 20

Na realidade, a soma tem que acontecer antes da impressão, assim, as ações não estão na realidade acontecendo ao mesmo tempo. O ponto é que qualquer expressão envolv pode ser usada dentro de um comando print. Você já tinha visto um exemplo disto:

print "Número de minutos desde a meia-noite: ", hora*60+minuto

Esta possibilidade pode não parecer muito impressionante agora, mas você verá outros exemplos em que a composição torna possível expressar computações complexas de m

Atenção: Existem limites quanto ao lugar onde você pode usar certos tipos de expressão. Por exemplo, o lado esquerdo de um comando de atribuição tem que ser um nome de Assim, o seguinte não é válido: minuto+1 = hora.

2.11 Glossário

valor ( value ) Um número ou string (ou outra coisa que ainda vamos conhecer) que pode ser atribuída a uma variável ou computada em uma expressão. tipo ( type ) Um conjunto de valores. O tipo de um valor determina como ele pode ser usado em expressões. Até agora, os tipos vistos são: inteiros (tipo int), números em ponto-fl (tipo string). ponto-flutuante ( floating-point ) Formato para representar números que possuem partes fracionárias. variável ( variable ) Nome que se refere a um valor. comando ( statement ) Trecho de código que representa uma instrução ou ação. Até agora, os comandos vistos foram de atribuição e exibição. atribuição ( assignment ) Comando que atribui um valor a uma variável. diagrama de estado ( state diagram ) Representação gráfica de um conjunto de variáveis e os valores aos quais elas se referem. palavra-chave ( keyword ) Palavra reservada usada pelo compilador para analisar o programa; você não pode usar palavras-chave como if, def, e while como nomes de variáveis. operador ( operator ) Símbolo especial que representa uma computação simples, como adição, multiplicação ou concatenação de strings. operando ( operand ) Um dos valores sobre o qual o operador opera. expressão ( expression ) Combinação de variáveis, operadores e valores, que representa um resultado único. avaliar ( evaluate ) Simplificar uma expressão através da realização de operações, para produzir um valor único. divisão inteira ( integer division ) Operação que divide um inteiro por outro e resulta em um inteiro. A divisão inteira resulta no número de vezes que o numerador é divisível pelo denominador e descarta regras de precedência ( rules of precedence ) O conjunto de regras que governa a ordem em que expressões envolvendo múltiplos operadores e operandos são avaliadas. concatenar ( concatenate ) Juntar dois operandos lado a lado. composição ( composition ) Habilidade de combinar expressões e comandos simples em expressões e comandos compostos, de forma a representar computações complexas de forma concisa. comentário ( comment ) Informação em um programa dirigida a outros programadores (ou qualquer pessoa que esteja lendo o código fonte) e que não tem efeito na execução do programa.

Capítulo 2: Variáveis, expressões e comandos

System Message: INFO/1 (, line 1395); backlink

Duplicate implicit target name: "capítulo 2: variáveis, expressões e comandos".

Tópicos

Capítulo 1: O caminho do programa Capítulo 1: O caminho do programa Capítulo 2: Variáveis, expressões e comandos 2.1 Valores e tipos 2.2 Variáveis 2.3 Nomes de variáveis e palavras reservadas 2.4 Comandos 2.5 Avaliando expressões 2.6 Operadores e operandos 2.7 Ordem dos operadores 2.8 Operações com strings 2.9 Composição 2.11 Glossário

Capítulo 8: Listas Capítulo 9: Tuplas Capítulo 9: Tuplas Capítulo 10: Dicionários Capítulo 10: Dicionários Capítulo 11: Arquivos e exceções Capítulo 11: Arquivos e exceções Capítulo 12: Classes e objetos Capítulo 12: Classes e objetos Capítulo 13: Classes e funções Capítulo 13: Classes e funções Capítulo 14: Classes e métodos Capítulo 14: Classes e métodos Capítulo 15: Conjuntos de objetos Capítulo 15: Conjuntos de objetos Capitulo 16: Herança Capitulo 16: Herança Capítulo 17: Listas encadeadas Capítulo 18: Pilhas Capítulo 18: Pilhas Capítulo 19: Filas Capítulo 19: Filas Capítulo 20: Árvores Capítulo 20: Árvores

2.1 Valores e tipos

System Message: INFO/1 (, line 1401); backlink

Duplicate implicit target name: "2.1 valores e tipos".

O valor (por exemplo, letras e números) é uma das coisas fundamentais que um programa manipula. Os valores que já vimos até agora foram o 2 (como resultado, quando Mundo!".

Esses valores pertencem a tipos diferentes: 2 é um inteiro, e "Alô, Mundo!" é uma string , assim chamada porque "string", em inglês, quer dizer seqüência, série, cadeia "série de letras". Você (e o interpretador) consegue identificar strings porque elas aparecem entre aspas.

O comando print também funciona com inteiros:

print 4 4

Se você estiver em dúvida sobre qual é o tipo de um determinado valor, o interpretador pode revelar:

type("Alô, Mundo!") <type 'string'> type(17) <type 'int'>

Nenhuma surpresa: strings pertencem ao tipo string e inteiros pertencem ao tipo int. Menos obviamente, números com um ponto decimal pertencem a um tipo chamado são representados em um formato chamado ponto flutuante [4]:

type(3.2) <type 'float'>

[3] N.T.: Observe o uso de ponto no lugar da vírgula para separar a parte inteira da parte fracionária.

O que dizer de valores como "17" e "3.2"? Eles parecem números, mas estão entre aspas, como strings:

type("17") <type 'string'> type("3.2") <type 'string'>

Eles são strings.

Ao digitar um número grande, é tentador usar pontos entre grupos de três dígitos, assim: 1.000.000. Isso não funciona porque Python usa o ponto como separador decimal inglês, resulta numa expressão válida, mas não no número que queríamos representar:

print 1,000, 1 0 0

Não é nada do que se esperava! Python interpreta 1,000,000 como uma tupla, algo que veremos no Capítulo 9. Por hora, lembre-se apenas de não colocar vírgulas nos núm

2.2 Variáveis

System Message: INFO/1 (, line 1444); backlink

Duplicate implicit target name: "2.2 variáveis".

Uma das características mais poderosas de uma linguagem de programação é a habilidade de manipular variáveis. Uma variável é um nome que se refere a um valor.

O comando de atribuição cria novas variáveis e dá a elas valores:

mensagem = "E aí, Doutor?" n = 17 pi = 3.

Este exemplo faz três atribuições. A primeira atribui a string "E aí, Doutor?" a uma nova variável chamada mensagem. A segunda dá o valor inteiro 17 a n, e a terceir flutuante 3.14159 à variável chamada pi.

Uma maneira comum de representar variáveis no papel é escrever o nome delas com uma seta apontando para o valor da variável. Esse tipo de figura é chamado de diagram que estado cada variável está (pense nisso como o estado de espírito da variável). O diagrama a seguir mostra o resultado das instruções de atribuição:

XXXfigura pg.

O comando print também funciona com variáveis:

print mensagem E aí, Doutor? print n 17 print pi

Em cada um dos casos, o resultado é o valor da variável. Variáveis também têm tipo; novamente, podemos perguntar ao interpretador quais são eles:

type(mensagem) <type 'string'> type(n)

<type 'int'>

type(pi) <type 'float'>

O tipo de uma variável é o tipo do valor ao qual ela se refere.

2.3 Nomes de variáveis e palavras reservadas

System Message: INFO/1 (, line 1482); backlink

Duplicate implicit target name: "2.3 nomes de variáveis e palavras reservadas".

Os programadores geralmente escolhem nomes significativos para suas variáveis -- eles documentam para o quê a variável é usada.

Nomes de variáveis podem ser arbitrariamente longos. Eles podem conter tanto letras quanto números, mas têm de começar com uma letra. Embora seja válida a utilização convenção, não usamos. Se você o fizer, lembre-se de que maiúsculas e minúsculas são diferentes. Bruno e bruno são variáveis diferentes.

O caractere para sublinhado ( _ ) pode aparecer em um nome. Ele é muito utilizado em nomes com múltiplas palavras, tal como em meu_nome ou preco_do_cha_na_ch

Se você der a uma variável um nome inválido, causará um erro de sintaxe:

76trombones = "grande parada" SyntaxError: invalid syntax muito$ = 1000000 SyntaxError: invalid syntax class = "Ciencias da Computacao 101" SyntaxError: invalid syntax

76trombones é inválida porque não começa com uma letra. muito$ é inválida porque contém um caractere ilegal, o cifrão. Mas o que está errado com class?

Ocorre que class é uma das palavras reservadas em Python. Palavras reservadas definem as regras e a estrutura da linguagem e não podem ser usadas como nomes de

Python tem 29 palavras reservadas:

and def exec if not return assert del finally import or try break elif for in pass while class else from is print yield continue except global lambda raise

Pode ser útil ter essa lista à mão [#]_. Se o interpretador acusar erro sobre um de seus nomes de variável e você não souber porquê, veja se o nome está na lista.

[4] N.T.: esta lista pode ser obtida através do próprio interpretador Python, com apenas dois comandos:

System Message: WARNING/2 (, line 1516)

Literal block expected; none found.

import keyword print keyword.kwlist

2.4 Comandos