-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy path01-intro.tex
executable file
·1949 lines (1756 loc) · 79.1 KB
/
01-intro.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
% The contents of this file is
% Copyright (c) 2009- Charles R. Severance, All Righs Reserved
\chapter{Por que você deve aprender a escrever programas ?}
%\chapter{Why should you learn to write programs?}
Escrever programas (ou programação) é uma atividade
muito criativa e recompensadora. Você pode escrever programas por
muitas razões, que vão desde resolver um difícil problema de
análise de dados a se divertir ajudando alguém a resolver um
problema. Este livro assume que \emph{qualquer pessoa} precisa
saber como programar, e uma vez que você sabe como programar,
você irá imaginar o que você quer fazer com suas novas habilidades.
%Writing programs (or programming) is a very creative
%and rewarding activity. You can write programs for
%many reasons, ranging from making your living to solving
%a difficult data analysis problem to having fun to helping
%someone else solve a problem. This book assumes that
%\emph{everyone} needs to know how to program, and that once
%you know how to program you will figure out what you want
%to do with your newfound skills.
Nós estamos cercados no nosso dia a dia por computadores, desde
notebooks até celulares. Nós podemos achar que estes computadores
são nossos ``assistentes pessoais'' que podem cuidar de muitas coisas
a nosso favor. O hardware desses computadores no nosso dia a dia é
essencialmente construído para nos responder a uma pergunta,
``O que você quer que eu faça agora ?''
%We are surrounded in our daily lives with computers ranging
%from laptops to cell phones. We can think of these computers
%as our ``personal assistants'' who can take care of many things
%on our behalf. The hardware in our current-day computers
%is essentially built to continuously ask us the question,
%``What would you like me to do next?''
\beforefig
\centerline{\includegraphics[height=1.00in]{figs2/pda.eps}}
\afterfig
Programadores adicionam um sistema operacional e um conjunto de
aplicações ao hardware e nós terminamos com um Assistente
Pessoal Digital que é muito útil e capaz de nos ajudar a fazer
diversas coisas.
%Programmers add an operating system and a set of applications
%to the hardware and we end up with a Personal Digital
%Assistant that is quite helpful and capable of helping
%us do many different things.
Nossos computadores são rápidos, tem vasta quantidade de memória
e podem ser muito úteis para nós, somente se conhecermos a linguagem
falada para explicar para um computador o que nós gostaríamos
de fazer ``em seguida''. Se nós conhecemos esta linguagem, nós
podemos pedir ao computador para fazer tarefas repetitivas a
nosso favor. Curiosamente, as coisas que os computadores
podem fazer melhor são frequentemente aquelas coisas que humanos
acham chatas e entediantes.
%Our computers are fast and have vast amounts of memory and
%could be very helpful to us if we only knew the language to
%speak to explain to the computer what we would like it to
%``do next''. If we knew this language, we could tell the
%computer to do tasks on our behalf that were repetitive.
%Interestingly, the kinds of things computers can do best
%are often the kinds of things that we humans find boring
%and mind-numbing.
Por exemplo, olhe para os três primeiros parágrafos deste
capítulo e me diga qual é a palavra mais usada e quantas
vezes. Contá-las é muito doloroso porque
não é o tipo de problema que mentes humanas foram feitas para
resolver. Para um computador o oposto é verdade, ler e entender o texto
de um pedaço de papel é difícil, mas contar palavras dizendo a
você quantas vezes ela aparece é muito fácil:
%For example, look at the first three paragraphs of this
%chapter and tell me the most commonly used word and how
%many times the word is used. While you were able to read
%and understand the words in a few seconds, counting them
%is almost painful because it is not the kind of problem
%that human minds are designed to solve. For a computer
%the opposite is true, reading and understanding text
%from a piece of paper is hard for a computer to do
%but counting the words and telling you how many times
%the most used word was used is very easy for the
%computer:
\beforeverb
\begin{verbatim}
python palavras.py
Digite o nome do arquivo: palavras.txt
para 16
\end{verbatim}
\afterverb
%\beforeverb
%\begin{verbatim}
%python words.py
%Enter file:words.txt
%to 16
%\end{verbatim}
%\afterverb
Nosso ``assistente de análise pessoal de informações'' rapidamente
conta para nós que a palavra ``para'' foi utilizada dezesseis vezes nos
primeiros três parágrafos deste capítulo.
%Our ``personal information analysis assistant'' quickly
%told us that the word ``to'' was used sixteen times in the
%first three paragraphs of this chapter.
Este fato de que os computadores são bons em coisas
que humanos não são é a razão pela qual você precisa tornar-se
qualificado em falar a ``linguagem do computador''. Uma vez
que você aprende esta nova linguagem, pode delegar tarefas
mundanas para o seu parceiro (o computador), ganhando mais tempo
para fazer coisas que você foi especialmente adaptado para fazer. Você agrega
criatividade, intuição e originalidade para o seu parceiro.
%This very fact that computers are good at things
%that humans are not is why you need to become
%skilled at talking ``computer language''. Once you learn
%this new language, you can delegate mundane tasks
%to your partner (the computer), leaving more time
%for you to do the
%things that you are uniquely suited for. You bring
%creativity, intuition, and inventiveness to this
%partnership.
\section{Criatividade e motivação}
%\section{Creativity and motivation}
Embora este livro não se destine a programadores profissionais, programação
profissional pode ser um trabalho muito gratificante, tanto financeiramente
quanto pessoalmente. Construir programas úteis, elegantes, inteligentes para
que outros utilizem é uma atividade criativa. Seu computador ou assistente
pessoal digital (PDA) geralmente contém muitos programas diferentes feitos por
diversos grupos de programadores, todos competindo por sua atenção e seu
interesse. Eles tentam dar o seu melhor para atender suas necessidades e dar a
você uma boa experiência de usabilidade no processo. Em algumas situações,
quando você executa um trecho de software, os programadores são diretamente
recompensados por sua escolha.
%While this book is not intended for professional programmers, professional
%programming can be a very rewarding job both financially and personally.
%Building useful, elegant, and clever programs for others to use is a very
%creative activity. Your computer or Personal Digital Assistant (PDA)
%usually contains many different programs from many different groups of
%programmers, each competing for your attention and interest. They try
%their best to meet your needs and give you a great user experience in the
%process. In some situations, when you choose a piece of software, the
%programmers are directly compensated because of your choice.
Se nós pensarmos em programas como resultado criativo de grupos de programadores,
então talvez a figura a seguir seja uma versão mais sensata de nosso PDA:
%If we think of programs as the creative output of groups of programmers,
%perhaps the following figure is a more sensible version of our PDA:
\beforefig
\centerline{\includegraphics[height=1.00in]{figs2/pda2.eps}}
\afterfig
Por enquanto, nossa motivação primária não é ganhar dinheiro ou agradar usuários finais, mas sermos mais produtivos na manipulação de dados e informações
que nós encontraremos em nossas vidas.
Quando você começar, você será tanto o programador quanto o usuário final de seus
programas. Conforme você ganhar habilidades como programador e melhorar a criatividade
em seus próprios programas, mais você pode pensar em programar para os outros.
%For now, our primary motivation is not to make money or please end users, but
%instead for us to be more productive in handling the data and
%information that we will encounter in our lives.
%When you first start, you will be both the programmer and the end user of
%your programs. As you gain skill as a programmer and
%programming feels more creative to you, your thoughts may turn
%toward developing programs for others.
%
\section{Arquitetura física do Computador - Hardware}
\index{hardware}
\index{hardware!arquitetura}
%\section{Computer hardware architecture}
%\index{hardware}
%\index{hardware!architecture}
%
Antes de começar a estudar a linguagem, nós falamos
em dar instruções aos computadores para desenvolver software,
nós precisamos aprender um pouco mais sobre como os computadores
são construídos. Se você desmontar seu computador ou celular e olhar
por dentro, você encontrará as seguintes partes:
%Before we start learning the language we
%speak to give instructions to computers to
%develop software, we need to learn a small amount about
%how computers are built. If you were to take
%apart your computer or cell phone and look deep
%inside, you would find the following parts:
%
\beforefig
\centerline{\includegraphics[height=2.50in]{figs2/arch.eps}}
\afterfig
%\beforefig
%\centerline{\includegraphics[height=2.50in]{figs2/arch.eps}}
%\afterfig
%
As definições resumidas destas partes são:
%The high-level definitions of these parts are as follows:
%
\begin{itemize}
%\begin{itemize}
%
\item A {\bf Unidade Central de Processamento} (ou CPU) é
a parte do computador que é feita para sempre te perguntar:
``O que mais ?'' Se seu computador possui uma frequência de
3.0 Gigahertz, significa que a CPU irá te perguntar ``O que mais ?''
três bilhões de vezes por segundo. Você irá aprender como conversar
tão rápido com a CPU.
%\item The {\bf Central Processing Unit} (or CPU) is
%the part of the computer that is built to be obsessed
%with ``what is next?'' If your computer is rated
%at 3.0 Gigahertz, it means that the CPU will ask ``What next?''
%three billion times per second. You are going to have to
%learn how to talk fast to keep up with the CPU.
%
\item A {\bf Memória Principal} é utilizada para armazenar informação
que a CPU precisa com muita pressa. A memória principal é aproximadamente
tão rápida quanto a CPU. Mas a informação armazenada na memória principal
se perde quando o computador é desligado (volátil).
%\item The {\bf Main Memory} is used to store information
%that the CPU needs in a hurry. The main memory is nearly as
%fast as the CPU. But the information stored in the main
%memory vanishes when the computer is turned off.
%
\item A {\bf Memória Secundária} é também utilizada para armazenar
informação, mas ela é muito mais lenta que a memória principal.
A vantagem da memória secundária é que ela pode armazenar informação
que não se perde quando o computador é desligado. Exemplos de memória
secundária são discos rígidos (HD), pen drives, cartões de memória (sd card)
(tipicamente) encontradas no formato de USB e portáteis.
%\item The {\bf Secondary Memory} is also used to store
%information, but it is much slower than the main memory.
%The advantage of the secondary memory is that it can
%store information even when there is no power to the
%computer. Examples of secondary memory are disk drives
%or flash memory (typically found in USB sticks and portable
%music players).
%
\item Os {\bf Dispositivos de Entrada e Saídas} são simplesmente
nosso monitor (tela), teclado, mouse, microfone, caixa de som, touchpad, etc.
Eles são todas as formas com as quais interagimos com o computador.
%\item The {\bf Input and Output Devices} are simply our
%screen, keyboard, mouse, microphone, speaker, touchpad, etc.
%They are all of the ways we interact with the computer.
%
\item Atualmente, a maioria dos computadores tem uma
{\bf Conexão de Rede} para buscar informação em uma rede.
Nós podemos pensar a rede como um lugar muito lento para armazenar
e buscar dados que podem não estar ``disponíveis''. Em essência,
a rede é mais lenta e às vezes parece uma forma não confiável de
{\bf Memória Secundária}.
%\item These days, most computers also have a
%{\bf Network Connection} to retrieve information over a network.
%We can think of the network as a very slow place to store and
%retrieve data that might not always be ``up''. So in a sense,
%the network is a slower and at times unreliable form of
%{\bf Secondary Memory}.
%
\end{itemize}
%\end{itemize}
%
É melhor deixar a maior parte dos detalhes de como estes componentes funcionam para
os construtores dos computadores. Isso nos ajuda a ter alguma terminologia
que podemos utilizar para conversar sobre essas partes conforme escrevemos nossos programas.
%While most of the detail of how these components work is best left
%to computer builders, it helps to have some terminology
%so we can talk about these different parts as we write our programs.
%
Como um programador, seu trabalho é usar e orquestrar
cada um destes recursos para resolver um problema que você precisa resolver
e analisar os dados que você obtém da solução. Como um programador você irá
``conversar'' com a CPU e contar a ela o que fazer em um próximo passo.
Algumas vezes você irá dizer à CPU para usar a memória principal, a memória
secundária, a rede ou os dispositivos de entrada e saída.
%As a programmer, your job is to use and orchestrate
%each of these resources to solve the problem that you need to solve
%and analyze the data you get from the solution. As a programmer you will
%mostly be ``talking'' to the CPU and telling it what to
%do next. Sometimes you will tell the CPU to use the main memory,
%secondary memory, network, or the input/output devices.
%
\beforefig
\centerline{\includegraphics[height=2.50in]{figs2/arch2.eps}}
\afterfig
%\beforefig
%\centerline{\includegraphics[height=2.50in]{figs2/arch2.eps}}
%\afterfig
%
Você precisa ser a pessoa que responde à pergunta ``O que mais ?''
para a CPU. Mas seria muito desconfortável se você fosse encolhido
para uma altura de apenas 5 mm e inserido dentro de um computador
e ainda ter que responder uma pergunta três bilhões de vezes por segundo.
Então, ao invés disso, você deve escrever suas instruções previamente.
Nós chamamos essas instruções armazenadas de {\bf programa} e o
ato de escrever essas instruções e garantir que essas estejam corretas de {\bf programação}.
%You need to be the person who answers the CPU's ``What next?''
%question. But it would be very uncomfortable to shrink you
%down to 5mm tall and insert you into the computer just so you
%could issue a command three billion times per second. So instead,
%you must write down your instructions in advance.
%We call these stored instructions a {\bf program} and the act
%of writing these instructions down and getting the instructions to
%be correct {\bf programming}.
%
\section{Entendendo programação}
%\section{Understanding programming}
%
No restante deste livro, nós iremos tentar fazer de você uma pessoa
com habilidades na arte da programação. No final você será um
{\bf programador}, no entanto não um programador profissional, mas
pelo menos você terá os conhecimentos para analisar os problemas
de dados/informações e desenvolver um programa para resolver tais
problemas.
%In the rest of this book, we will try to turn you into a person
%who is skilled in the art of programming. In the end you will be a
%{\bf programmer} --- perhaps not a professional programmer, but
%at least you will have the skills to look at a data/information
%analysis problem and develop a program to solve the problem.
%
\index{resolução de problemas}
%\index{problem solving}
%
Resumidamente, você precisa de duas qualidades para ser um programador:
%In a sense, you need two skills to be a programmer:
%
\begin{itemize}
%\begin{itemize}
%
\item Primeiramente, você precisa conhecer uma linguagem de programação (Python) -
você precisa conhecer o vocabulário e a gramática. Você precisa saber
pronunciar as palavras desta nova linguagem corretamente e conhecer como construir
``sentenças'' bem formadas nesta linguagem.
%\item First, you need to know the programming language (Python) -
%you need to know the vocabulary and the grammar. You need to be able
%to spell the words in this new language properly and know how to construct
%well-formed ``sentences'' in this new language.
%
\item Segundo, você precisa ``contar uma estória''. Na escrita da estória,
você combina palavras e sentenças para convencer o leitor.
É necessário qualidade e arte na construção da estória, adquiri-se
isso através da prática de contar estórias e obter um feedback.
Na programação, nosso programa é a ``estória'' e o problema que você
quer resolver é a ``idéia''.
%\item Second, you need to ``tell a story''. In writing a story,
%you combine words and sentences to convey an idea to the reader.
%There is a skill and art in constructing the story, and skill in
%story writing is improved by doing some writing and getting some
%feedback. In programming, our program is the ``story'' and the
%problem you are trying to solve is the ``idea''.
%
\end{itemize}
%\end{itemize}
%
Uma vez que você aprende uma linguagem de programação, como o Python, você irá
achar muito mais fácil aprender uma segunda linguagem de programação, tal como
JavaScript ou C++. A nova linguagem de programação possuirá um vocabulário
e gramática bastante diferente, mas as habilidades na resolução do problemas
serão as mesmas em qualquer linguagem.
%Once you learn one programming language such as Python, you will
%find it much easier to learn a second programming language such
%as JavaScript or C++. The new programming language has very different
%vocabulary and grammar but the problem-solving skills
%will be the same across all programming languages.
%
Você aprenderá o ``vocabulário'' e ``sentenças'' do Python rapidamente.
Levará muito tempo para você tornar-se hábil em escrever programas coerentes
para resolver um novo problema. Nós ensinamos programação assim como ensinamos
a escrever. Nós leremos e explicaremos programas, nós escreveremos programas
simples, e então nós aumentaremos a complexidade dos programas ao longo do tempo.
Em algum momento, você ``deslancha'' e vê os padrões por si próprio e pode visualizar
com maior naturalidade como escrever um programa para resolver o problema. Uma
vez que você chega neste ponto, programar torna-se um processo muito agradável e
criativo.
%You will learn the ``vocabulary'' and ``sentences'' of Python pretty quickly.
%It will take longer for you to be able to write a coherent program
%to solve a brand-new problem. We teach programming much like we teach
%writing. We start reading and explaining programs, then we write
%simple programs, and then we write increasingly complex programs over time.
%At some point you ``get your muse'' and see the patterns on your own
%and can see more naturally how to take a problem and
%write a program that solves that problem. And once you get
%to that point, programming becomes a very pleasant and creative process.
%
Nós iniciamos com o vocabulário e a estrutura de programas em Python. Seja paciente
com os exemplos simples, relembre quando você iniciou a leitura pela primeira vez.
%We start with the vocabulary and structure of Python programs. Be patient
%as the simple examples remind you of when you started reading for the first
%time.
%
\section{Palavras e Sentenças}
\index{linguagem de programação}
\index{linguagem!programação}
%\section{Words and sentences}
%\index{programming language}
%\index{language!programming}
%
Diferentemente dos idiomas humanos, o vocabulário do Python é atualmente muito pequeno.
Nós chamamos esse ``vocabulário'' de ``palavras reservadas''. Estas palavras tem
um significado especial no Python. Quando o Python encontra estas palavras em um
programa, elas possuem um e somente um significado para o Python. Quando você
escrever seus programas você irá definir suas próprias palavras com significado,
são chamadas {\bf variáveis}. Você pode escolher muitos nomes diferentes para
as suas variáveis, mas você não pode usar qualquer palavra reservada do Python
como o nome de uma variável.
%Unlike human languages, the Python vocabulary is actually pretty small.
%We call this ``vocabulary'' the ``reserved words''. These are words that
%have very special meaning to Python. When Python sees these words in
%a Python program, they have one and only one meaning to Python. Later
%as you write programs you will make up your own words that have meaning to
%you called {\bf variables}. You will have great latitude in choosing
%your names for your variables, but you cannot use any of Python's
%reserved words as a name for a variable.
%
Quando nós treinamos um cachorro, nós usamos palavras especiais, tais como:
``sentado'', ``fique'' e ``traga''. Quando você conversar com cachorros e
não usar qualquer uma dessas palavras reservadas, eles ficarão olhando para você
com um olhar curioso até que você diga uma palavra reservada.
Por exemplo, se você disser: ``Eu desejo que mais pessoas possam caminhar para
melhorar a sua saúde'', o que os cachorros vão ouvir será:
``blah blah blah {\bf caminhar} blah blah blah blah.''
Isto porque ``caminhar'' é uma palavra reservada na linguagem dos cachorros. Muitos
podem sugerir que a linguagem entre humanos e gatos não tem palavras
reservadas\footnote{\url{http://xkcd.com/231/}}.
%When we train a dog, we use special words like
%``sit'', ``stay'', and ``fetch''. When you talk to a dog and
%don't use any of the reserved words, they just look at you with a
%quizzical look on their face until you say a reserved word.
%For example, if you say,
%``I wish more people would walk to improve their overall health'',
%what most dogs likely hear is,
%``blah blah blah {\bf walk} blah blah blah blah.''
%That is because ``walk'' is a reserved word in dog language. Many
%might suggest that the language between humans and cats has no
%reserved words\footnote{\url{http://xkcd.com/231/}}.
%
As palavras reservadas na linguagem pelas quais os humanos conversam com o
Python, incluem as seguintes:
%The reserved words in the language where humans talk to
%Python include the following:
%
\beforeverb
\begin{verbatim}
and del from not while
as elif global or with
assert else if pass yield
break except import print
class exec in raise
continue finally is return
def for lambda try
\end{verbatim}
\afterverb
%
É isso, e ao contrário do cachorro, o Python é completamente treinado.
Quando você diz ``try'', o Python irá tentar todas as vezes que você pedir
sem desobedecer.
%That is it, and unlike a dog, Python is already completely trained.
%When you say ``try'', Python will try every time you say it without
%fail.
%
Nós aprenderemos as palavras reservadas e como elas são usadas mais adiante,
por enquanto nós iremos focar no equivalente ao Python de ``falar'' (na
linguagem humano-para-cachorro). Uma coisa legal sobre pedir ao Python para falar
é que nós podemos até mesmo pedir o que nós queremos através de uma mensagem
entre aspas:
%We will learn these reserved words and how they are used in good time,
%but for now we will focus on the Python equivalent of ``speak'' (in
%human-to-dog language). The nice thing about telling Python to speak
%is that we can even tell it what to say by giving it a message in quotes:
%
\beforeverb
\begin{verbatim}
print 'Hello world!'
\end{verbatim}
\afterverb
%
E finalmente nós escrevemos a nossa primeira sentença sintaticamente correta em Python.
Nossa sentença inicia com uma palavra reservada {\bf print} seguida por
uma cadeia de caracteres textuais de nossa escolha entre aspas simples.
%And we have even written our first syntactically correct Python sentence.
%Our sentence starts with the reserved word {\bf print} followed
%by a string of text of our choosing enclosed in single quotes.
%
\section{Conversando com Python}
%\section{Conversing with Python}
%
Agora que você tem uma palavra e uma simples sentença que nós conhecemos em Python,
nós precisamos saber como iniciar uma conversação com Python para testar
nossas habilidades na nova linguagem.
%Now that we have a word and a simple sentence that we know in Python,
%we need to know how to start a conversation with Python to test
%our new language skills.
%
Antes de você conversar com o Python, você deve primeiramente instalar o programa
Python em seu computador e aprender como inicializá-lo. Isto é muita informação
para este capítulo, então eu sugiro que você consulte \url{www.pythonlearn.com}
onde se encontra instruções e screencasts de preparação e inicialização do Python
em sistemas Windows e Macintosh. Em algum momento, você estará no interpretador
Python, executando o modo interativo e aparecerá algo assim:
%Before you can converse with Python, you must first install the Python
%software on your computer and learn how to start Python on your
%computer. That is too much detail for this chapter so I suggest
%that you consult \url{www.pythonlearn.com} where I have detailed
%instructions and screencasts of setting up and starting Python
%on Macintosh and Windows systems. At some point, you will be in
%a terminal or command window and you will type {\bf python} and
%the Python interpreter will start executing in interactive mode
%and appear somewhat as follows:
\index{modo interativo}
\beforeverb
\begin{verbatim}
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
\end{verbatim}
\afterverb
%
O prompt {\tt >>>} é a forma do interpretador Python perguntar o que você deseja:
``O que você quer que eu faça agora?'' Python está pronto para ter uma conversa
com você. Tudo o que você deve conhecer é como falar a linguagem Python.
%The {\tt >>>} prompt is the Python interpreter's way of asking you, ``What
%do you want me to do next?'' Python is ready to have a conversation with
%you. All you have to know is how to speak the Python language.
%
Digamos, por exemplo, que você não conhece nem mesmo as mais simples palavras
ou sentenças da linguagem Python. Você pode querer usar a linha padrão que os
astronautas usam quando eles estão em uma terra distante do planeta e tentam falar com os habitantes do planeta:
%Let's say for example that you did not know even the simplest Python language
%words or sentences. You might want to use the standard line that astronauts
%use when they land on a faraway planet and try to speak with the inhabitants
%of the planet:
%
\beforeverb
\begin{verbatim}
>>> Eu venho em paz, por favor me leve para o seu líder
File "<stdin>", line 1
Eu venho em paz, por favor me leve para o seu líder
^
SyntaxError: invalid syntax
>>>
\end{verbatim}
\afterverb
%\beforeverb
%\begin{verbatim}
%>>> I come in peace, please take me to your leader
% File "<stdin>", line 1
% I come in peace, please take me to your leader
% ^
%SyntaxError: invalid syntax
%>>>
%\end{verbatim}
%\afterverb
%%
Isto não deu muito certo. A menos que você pense algo rapidamente,
os habitantes do planeta provavelmente irão apunhalá-lo com uma lança,
colocá-lo em um espeto, assá-lo no fogo e comê-lo no jantar.
%This is not going so well. Unless you think of something quickly,
%the inhabitants of the planet are likely to stab you with their spears,
%put you on a spit, roast you over a fire, and eat you for dinner.
%
A sorte é que você trouxe uma cópia deste livro em sua viagem, e caiu
exatamente nesta página, tente novamente:
%Luckily you brought a copy of this book on your travels, and you thumb to
%this very page and try again:
%
\beforeverb
\begin{verbatim}
>>> print 'Ola Mundo!'
Ola Mundo!
\end{verbatim}
\afterverb
%\beforeverb
%\begin{verbatim}
%>>> print 'Hello world!'
%Hello world!
%\end{verbatim}
%\afterverb
%%
Isso parece bem melhor, então você tenta se comunicar um pouco
mais:
%This is looking much better, so you try to communicate some
%more:
%
\beforeverb
\begin{verbatim}
>>> print 'Voce deve ser um Deus lendario que veio do ceu'
Voce deve ser um Deus lendario que veio do ceu
>>> print 'Nos estivemos esperando voce por um longo tempo'
Nos estivemos esperando voce por um longo tempo
>>> print 'Nossa lenda nos conta que voce seria muito apetitoso com mostarda'
Nossa lenda nos conta que voce seria muito apetitoso com mostarda
>>> print 'Nos teremos uma festa hoje a noite a menos que voce diga
File "<stdin>", line 1
print 'Nos teremos uma festa hoje a noite a menos que voce diga
^
SyntaxError: EOL while scanning string literal
>>>
\end{verbatim}
\afterverb
%\beforeverb
%\begin{verbatim}
%>>> print 'You must be the legendary god that comes from the sky'
%You must be the legendary god that comes from the sky
%>>> print 'We have been waiting for you for a long time'
%We have been waiting for you for a long time
%>>> print 'Our legend says you will be very tasty with mustard'
%Our legend says you will be very tasty with mustard
%>>> print 'We will have a feast tonight unless you say
% File "<stdin>", line 1
% print 'We will have a feast tonight unless you say
% ^
%SyntaxError: EOL while scanning string literal
%>>>
%\end{verbatim}
%\afterverb
%%
A conversa foi bem por um momento, até que você cometeu o
pequeno erro no uso da linguagem e o Python trouxe a lança
de volta.
%The conversation was going so well for a while and then you
%made the tiniest mistake using the Python language and Python
%brought the spears back out.
%
Até o momento, você deve ter percebido que o Python
é incrivelmente complexo, poderoso e muito exigente em relação
à sintaxe que você utiliza para se comunicar com ele, Python {\em não}
é inteligente. Você está na verdade tendo uma conversa com você mesmo,
mas usando uma sintaxe apropriada.
%At this point, you should also realize that while Python
%is amazingly complex and powerful and very picky about
%the syntax you use to communicate with it, Python is {\em
%not} intelligent. You are really just having a conversation
%with yourself, but using proper syntax.
%
De certa forma, quando você usa um programa escrito por alguém,
a conversa ocorre entre você e os programadores, neste caso o Python
atuou como um intermediário. Python é uma forma para que os criadores de
programas se expressem sobre como uma conversa deve proceder. E em poucos
capítulos, você será um dos programadores usando Python para conversar com
os usuários de seus programas.
%In a sense, when you use a program written by someone else
%the conversation is between you and those other
%programmers with Python acting as an intermediary. Python
%is a way for the creators of programs to express how the
%conversation is supposed to proceed. And
%in just a few more chapters, you will be one of those
%programmers using Python to talk to the users of your program.
%
Antes de sairmos da nossa primeira conversa com o interpretador
do Python, você deve conhecer o modo correto de dizer ``ate-logo''
quando interagir com os habitantes do Planeta Python.
%Before we leave our first conversation with the Python
%interpreter, you should probably know the proper way
%to say ``good-bye'' when interacting with the inhabitants
%of Planet Python:
%
\beforeverb
\begin{verbatim}
>>> ate-logo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ate' is not defined
>>> se voce nao se importa, eu preciso ir embora
File "<stdin>", line 1
se voce nao se importa, eu preciso ir embora
^
SyntaxError: invalid syntax
>>> quit()
\end{verbatim}
\afterverb
%
%\beforeverb
%\begin{verbatim}
%>>> good-bye
%Traceback (most recent call last):
% File "<stdin>", line 1, in <module>
%NameError: name 'good' is not defined
%
%>>> if you don't mind, I need to leave
% File "<stdin>", line 1
% if you don't mind, I need to leave
% ^
%SyntaxError: invalid syntax
%
%>>> quit()
%\end{verbatim}
%\afterverb
%%
Você pode perceber que o erro é diferente nas duas primeiras
tentativas incorretas. No primeiro erro, por tratar-se de uma
palavra simples, o Python não pode encontrar nenhuma função ou
variável com este nome. No segundo erro, existe um erro de sintaxe,
não sendo reconhecida a frase como válida.
%You will notice that the error is different for the first two
%incorrect attempts. The second error is different because
%{\bf if} is a reserved word and Python saw the reserved word
%and thought we were trying to say something but got the syntax
%of the sentence wrong.
%
O jeito correto de se dizer ``ate-logo'' para o Python é
digitar {\bf quit()} no prompt do interpretador interativo.
É provável que você tenha perdido certo tempo tentado fazer isso,
ter um livro em mãos irá tornar as coisas mais fáceis e
pode ser bastante útil.
%The proper way to say ``good-bye'' to Python is to enter
%{\bf quit()} at the interactive chevron {\tt >>>} prompt.
%It would have probably taken you quite a while to guess that
%one, so having a book handy probably will turn out
%to be helpful.
%
\section{Terminologia: interpretador e compilador}
%\section{Terminology: interpreter and compiler}
%
Python é uma linguagem de {\bf alto nível} cujo objetivo é ser
relativamente fácil para humanos lerem e escreverem e para computadores
lerem e processarem. Outras linguagens de alto nível incluem Java, C++,
PHP, Ruby, Basic, Perl, JavaScript, e muito mais. O atual hardware
dentro da Unidade Central de Processamento (CPU) não é capaz de entender
nenhum destes comando em alto nível.
%Python is a {\bf high-level} language intended to be relatively
%straightforward for humans to read and write and for computers
%to read and process. Other high-level languages include Java, C++,
%PHP, Ruby, Basic, Perl, JavaScript, and many more. The actual hardware
%inside the Central Processing Unit (CPU) does not understand any
%of these high-level languages.
%
A CPU entende a linguagem que chamamos de {\bf linguagem de máquina}. Linguagem
de máquina é muito simples e francamente cansativa de se escrever porque ela é
representada em zeros e uns:
%The CPU understands a language we call {\bf machine language}. Machine
%language is very simple and frankly very tiresome to write because it
%is represented all in zeros and ones:
%
\beforeverb
\begin{verbatim}
01010001110100100101010000001111
11100110000011101010010101101101
...
\end{verbatim}
\afterverb
%\beforeverb
%\begin{verbatim}
%01010001110100100101010000001111
%11100110000011101010010101101101
%...
%\end{verbatim}
%\afterverb
%%
Linguagem de máquina parece simples olhando-se de um modo superficial,
dado que são apenas zeros e uns, mas sua sintaxe é muito mais complexa
e mais intrincada que o Python. Poucos programadores escrevem em linguagem de
máquina. Ao invés disso, nós usamos vários tradutores para permitir que os
programadores escrevam em linguagem de máquina a partir de linguagens de alto nível como o Python ou o JavaScript. Essas linguagens convertem os programas
para linguagem de máquina que, desse modo, são executados pela CPU.
%Machine language seems quite simple on the surface, given that there
%are only zeros and ones, but its syntax is even more complex
%and far more intricate than Python. So very few programmers ever write
%machine language. Instead we build various translators to allow
%programmers to write in high-level languages like Python or JavaScript
%and these translators convert the programs to machine language for actual
%execution by the CPU.
%
Visto que linguagem de máquina é vinculada ao hardware do computador,
linguagem de máquina não é {\bf portável} entre diferentes tipos de hardware.
Programas que foram escritos em linguagens de alto nível podem mover-se
entre diferentes computadores usando um interpretador diferente em cada máquina
ou então recompilando o código para criar uma versão de linguagem de máquina do
programa para a nova máquina.
%Since machine language is tied to the computer hardware, machine language
%is not {\bf portable} across different types of hardware. Programs written in
%high-level languages can be moved between different computers by using a
%different interpreter on the new machine or recompiling the code to create
%a machine language version of the program for the new machine.
%
Os tradutores das linguagens de programação se enquadram em duas
características gerais:
(1) interpretadores e (2) compiladores
%These programming language translators fall into two general categories:
%(1) interpreters and (2) compilers.
%
Um {\bf interpretador} lê o código fonte de um programa da forma como foi escrito
pelo programador, analisa, e interpreta as instruções em tempo de
execução. Python é um interpretador e quando ele está rodando Python no modo
interativo, nós podemos digitar uma linha de Python (uma sentença) e o Python a
processa imediatamente e está pronto para receber outra linha de Python.
%An {\bf interpreter} reads the source code of the program as written by the
%programmer, parses the source code, and interprets the instructions on the fly.
%Python is an interpreter and when we are running Python interactively,
%we can type a line of Python (a sentence) and Python processes it immediately
%and is ready for us to type another line of Python.
%
Algumas das linhas de Python diz a ele que você quer armazenar algum valor
para resgatar depois. Nós precisamos dar um nome para um valor de forma que possa
ser armazenado e resgatado através deste nome simbólico. Nós usamos o termo
{\bf variável} para se referir aos apelidos que nós demos ao dado que foi armazenado.
%Some of the lines of Python tell Python that you want it to remember some
%value for later. We need to pick a name for that value to be remembered and
%we can use that symbolic name to retrieve the value later. We use the
%term {\bf variable} to refer to the labels we use to refer to this stored data.
%
\beforeverb
\begin{verbatim}
>>> x = 6
>>> print x
6
>>> y = x * 7
>>> print y
42
>>>
\end{verbatim}
\afterverb
%\beforeverb
%\begin{verbatim}
%>>> x = 6
%>>> print x
%6
%>>> y = x * 7
%>>> print y
%42
%>>>
%\end{verbatim}
%\afterverb
%%
Neste exemplo, nós pedimos ao Python para armazenar o valor seis e usar um apelido {\bf x}, de modo a nós podermos resgatar o valor mais tarde. Nós verificamos que o Python realmente
lembrou dos valores quando usamos a função {\bf print}. Então nós perguntamos ao Python
para resgatar {\bf x}, multiplicá-lo por sete e armazenar de novo em uma variável {\bf y}.
Então nós pedimos ao Python para exibir o valor corrente em {\bf y}.
%In this example, we ask Python to remember the value six and use the label {\bf x}
%so we can retrieve the value later. We verify that Python has actually remembered
%the value using {\bf print}. Then we ask Python to retrieve {\bf x} and multiply
%it by seven and put the newly computed value in {\bf y}. Then we ask Python to print out
%the value currently in {\bf y}.
%
Mesmo que nós digitemos estes comandos em uma única linha de Python por vez, o Python
está processando elas em sequência, mantendo a ordem, de forma que as
instruções seguintes consigam recuperar os dados criados pelas anteriores. Nós escrevemos
nosso primeiro parágrafo simples com quatro sentenças com uma ordem lógica e com um
significado.
%Even though we are typing these commands into Python one line at a time, Python
%is treating them as an ordered sequence of statements with later statements able
%to retrieve data created in earlier statements. We are writing our first
%simple paragraph with four sentences in a logical and meaningful order.
%
É da natureza de um {\bf interpretador} ser capaz de ter uma conversa interativa, como
foi mostrado acima. Um {\bf compilador} precisa ter em mãos o programa completo em um arquivo, então ele roda um processo para traduzir um código fonte em alto nível para uma linguagem
de máquina e, em seguida, o compilador coloca o resultado deste processo em um outro arquivo
para posterior execução.
%It is the nature of an {\bf interpreter} to be able to have an interactive conversation
%as shown above. A {\bf compiler} needs to be handed the entire program in a file, and then
%it runs a process to translate the high-level source code into machine language
%and then the compiler puts the resulting machine language into a file for later
%execution.
%
Se você está em um sistema Windows, frequentemente este programa executável em código
de máquina tem o sufixo ``.exe'' ou ``.dll'', os quais são chamados de ``executável'' ou
``biblioteca de link dinâmico'', respectivamente. Em Linux e Macintosh, não há um sufixo
que marca unicamente um arquivo como executável.
%If you have a Windows system, often these executable machine language programs have a
%suffix of ``.exe'' or ``.dll'' which stand for ``executable'' and ``dynamic link
%library'' respectively. In Linux and Macintosh, there is no suffix that uniquely marks
%a file as executable.
%
Se você abrir um arquivo executável em um editor de texto, verá algo completamente
doido e ilegível.
%If you were to open an executable file in a text editor, it would look
%completely crazy and be unreadable:
%
\beforeverb
\begin{verbatim}
^?ELF^A^A^A^@^@^@^@^@^@^@^@^@^B^@^C^@^A^@^@^@\xa0\x82
^D^H4^@^@^@\x90^]^@^@^@^@^@^@4^@ ^@^G^@(^@$^@!^@^F^@
^@^@4^@^@^@4\x80^D^H4\x80^D^H\xe0^@^@^@\xe0^@^@^@^E
^@^@^@^D^@^@^@^C^@^@^@^T^A^@^@^T\x81^D^H^T\x81^D^H^S
^@^@^@^S^@^@^@^D^@^@^@^A^@^@^@^A\^D^HQVhT\x83^D^H\xe8
....
\end{verbatim}
\afterverb
%\beforeverb
%\begin{verbatim}
%^?ELF^A^A^A^@^@^@^@^@^@^@^@^@^B^@^C^@^A^@^@^@\xa0\x82
%^D^H4^@^@^@\x90^]^@^@^@^@^@^@4^@ ^@^G^@(^@$^@!^@^F^@
%^@^@4^@^@^@4\x80^D^H4\x80^D^H\xe0^@^@^@\xe0^@^@^@^E
%^@^@^@^D^@^@^@^C^@^@^@^T^A^@^@^T\x81^D^H^T\x81^D^H^S
%^@^@^@^S^@^@^@^D^@^@^@^A^@^@^@^A\^D^HQVhT\x83^D^H\xe8
%....
%\end{verbatim}
%\afterverb
%%
Não é nada fácil ler ou escrever código de máquina, assim é bom que tenhamos
{\bf interpretadores} e {\bf compiladores} que nos permitam escrever em linguagens
de alto nível assim como o Python ou o C.
%It is not easy to read or write machine language, so it is nice that we have
%{\bf interpreters} and {\bf compilers} that allow us to write in high-level
%languages like Python or C.
%
Agora neste ponto em nossa discussão de compiladores e interpretadores, você deve
estar com algumas dúvidas sobre o funcionamento do interpretador Python. Em que
linguagem é escrito? É escrito em uma linguagem compilada? Quando nós
digitamos ``python'', o que exatamente acontece?
%Now at this point in our discussion of compilers and interpreters, you should
%be wondering a bit about the Python interpreter itself. What language is
%it written in? Is it written in a compiled language? When we type
%``python'', what exactly is happening?
%
O interpretador Python é escrito em uma linguagem de alto nível chamada ``C''.
Você pode dar uma olhada no código fonte do interpretador através
do endereço \url{www.python.org} e trabalhar como você quiser com o código fonte.
Então Python é um programa compilado em uma linguagem de máquina.
Quando você instalou Python em seu computador (ou o fornecedor instalou),
você copiou um código de máquina do programa Python traduzido para o seu sistema.
Em Windows, o código de máquina executável para o Python encontra-se em um
arquivo com um nome a seguir:
%The Python interpreter is written in a high-level language called ``C''.
%You can look at the actual source code for the Python interpreter by
%going to \url{www.python.org} and working your way to their source code.
%So Python is a program itself and it is compiled into machine code.
%When you installed Python on your computer (or the vendor installed it),
%you copied a machine-code copy of the translated Python program onto your
%system. In Windows, the executable machine code for Python itself is likely
%in a file with a name like:
%
\beforeverb