⇤ ← Revisão 1e 2008-03-03 00:34:00
628
Comentário:
|
3298
|
Deleções são marcadas assim. | Adições são marcadas assim. |
Linha 1: | Linha 1: |
= Receita: Linguagem Sucuri = | A sucuri é uma cobra constritora comum no Brasil. É também o nome desta brincadeira: traduzir a linguagem Python para o português. |
Linha 3: | Linha 3: |
A sucuri é uma cobra constritora comum no Brasil. É também o nome desta brincadeira: traduzir a linguagem Python para o português. Não sei se isso tem algum valor pedagógico. Acho muito melhor ensinar Python do que Portugol como primeira linguagem, por exemplo == Código == |
== Exemplo: fibonacci.py == |
Linha 9: | Linha 7: |
import sys | # coding: sucuri |
Linha 11: | Linha 9: |
if __name__ == '__main__': print "Aqui entra o código" |
def fibonacci(a=1, b=1): enquanto 1: produzir a a, b = b, a+b t = fibonacci() para i em faixa(100): exibir t.next() }}} O comentário especial `coding: sucuri` faz com que o interpretador Python invoque o nosso codec para pré-processar o programa-fonte. == O codec: sucuri_dec.py == {{{ #!python # coding: utf-8 import codecs RESERVADAS = ( ('and', 'e'), ('as', 'como'), ('assert', 'assegurar'), ('break', 'interromper'), ('class', 'classe'), ('continue', 'continuar'), ('def', 'def'), ('del', 'apagar'), ('elif', 'senãose'), ('else', 'senão'), ('except', 'exceto'), ('exec', 'exec'), ('finally', 'finalmente'), ('for', 'para'), ('from', 'de'), ('global', 'global'), ('if', 'se'), ('import', 'importar'), ('in', 'em'), ('is', 'é'), ('lambda', 'lambda'), ('not', 'não'), ('or', 'ou'), ('pass', 'passar'), ('print', 'exibir'), ('raise', 'levantar'), ('return', 'devolver'), ('try', 'tentar'), ('while', 'enquanto'), ('with', 'com'), ('yield', 'produzir'), ) class StreamReader(codecs.StreamReader): def decode(self, entrada, erros='strict'): saida = entrada for orig, trad in RESERVADAS: trad += ' ' if trad in saida: saida = saida.replace(trad, orig+' ') return unicode(saida), len(entrada) def get_my_codec(name): if name == 'sucuri': return (codecs.utf_8_encode, None, StreamReader, None) codecs.register(get_my_codec) # eis como daria para traduzir as funções embutidas: __builtins__['tam'] = len __builtins__['faixa'] = range |
Linha 18: | Linha 89: |
Para usar o codec, é preciso invocar o script a partir da linha de comando, desta maneira: |
|
Linha 19: | Linha 92: |
#!python import sys if __name__ == '__main__': print "Aqui entra o exemplo de uso. Essa seção é opcional." |
$ python -c "import sucuri_dec; import fibonacci" |
Linha 27: | Linha 95: |
== Motivação e utilidade == | |
Linha 28: | Linha 97: |
Este experimento foi inspirado pelo blog do Benji York da Zope Corp (http://benjiyork.com/blog/2008/02/programmable-python-syntax-via-source.html). É um uso criativo da infra-estrutura de codecs criada para pré-processar arquivos-fonte em Python, de acordo com o PEP-0263 (http://www.python.org/dev/peps/pep-0263/). Não sei se isso tem algum valor pedagógico. Acho muito melhor ensinar Python do que Portugol como primeira linguagem, por exemplo, porque realmente não acho que decorar algumas palavras em inglês seja o maior obstáculo. O pulo do gato é aprender a pensar como programador, e isso não é uma questão de memorização, mas sim de prática em resolução de problemas. Uma linguagem ágil e versátil como Python é muito mais motivante, simplesmente porque permite apresentar uma gama muito maior de problemas interessantes para serem resolvidos, que se seriam complicados ou trabalhosos demais em um dialeto de Pascal ou C. Mas talvez entre Python e Portugol, a melhor opção para primeira linguagem seja mesmo Sucuri... |
A sucuri é uma cobra constritora comum no Brasil. É também o nome desta brincadeira: traduzir a linguagem Python para o português.
Exemplo: fibonacci.py
O comentário especial coding: sucuri faz com que o interpretador Python invoque o nosso codec para pré-processar o programa-fonte.
O codec: sucuri_dec.py
1 # coding: utf-8
2
3 import codecs
4
5 RESERVADAS = (
6 ('and', 'e'),
7 ('as', 'como'),
8 ('assert', 'assegurar'),
9 ('break', 'interromper'),
10 ('class', 'classe'),
11 ('continue', 'continuar'),
12 ('def', 'def'),
13 ('del', 'apagar'),
14 ('elif', 'senãose'),
15 ('else', 'senão'),
16 ('except', 'exceto'),
17 ('exec', 'exec'),
18 ('finally', 'finalmente'),
19 ('for', 'para'),
20 ('from', 'de'),
21 ('global', 'global'),
22 ('if', 'se'),
23 ('import', 'importar'),
24 ('in', 'em'),
25 ('is', 'é'),
26 ('lambda', 'lambda'),
27 ('not', 'não'),
28 ('or', 'ou'),
29 ('pass', 'passar'),
30 ('print', 'exibir'),
31 ('raise', 'levantar'),
32 ('return', 'devolver'),
33 ('try', 'tentar'),
34 ('while', 'enquanto'),
35 ('with', 'com'),
36 ('yield', 'produzir'),
37 )
38
39
40 class StreamReader(codecs.StreamReader):
41 def decode(self, entrada, erros='strict'):
42 saida = entrada
43 for orig, trad in RESERVADAS:
44 trad += ' '
45 if trad in saida:
46 saida = saida.replace(trad, orig+' ')
47 return unicode(saida), len(entrada)
48
49 def get_my_codec(name):
50 if name == 'sucuri':
51 return (codecs.utf_8_encode, None, StreamReader, None)
52
53 codecs.register(get_my_codec)
54
55 # eis como daria para traduzir as funções embutidas:
56
57 __builtins__['tam'] = len
58 __builtins__['faixa'] = range
Exemplo de uso
Para usar o codec, é preciso invocar o script a partir da linha de comando, desta maneira:
$ python -c "import sucuri_dec; import fibonacci"
Motivação e utilidade
Este experimento foi inspirado pelo blog do Benji York da Zope Corp (http://benjiyork.com/blog/2008/02/programmable-python-syntax-via-source.html).
É um uso criativo da infra-estrutura de codecs criada para pré-processar arquivos-fonte em Python, de acordo com o PEP-0263 (http://www.python.org/dev/peps/pep-0263/).
Não sei se isso tem algum valor pedagógico. Acho muito melhor ensinar Python do que Portugol como primeira linguagem, por exemplo, porque realmente não acho que decorar algumas palavras em inglês seja o maior obstáculo. O pulo do gato é aprender a pensar como programador, e isso não é uma questão de memorização, mas sim de prática em resolução de problemas. Uma linguagem ágil e versátil como Python é muito mais motivante, simplesmente porque permite apresentar uma gama muito maior de problemas interessantes para serem resolvidos, que se seriam complicados ou trabalhosos demais em um dialeto de Pascal ou C.
Mas talvez entre Python e Portugol, a melhor opção para primeira linguagem seja mesmo Sucuri...
LucianoRamalho, inspirado por Benji York