associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Revisão 1e 2005-02-26 21:31:28

Excluir mensagem

InterpretadorHq9

HQ9+

  • HQ9+ é uma linguagem "esotérica" criada por Cliff L. Biffle. Ela tem esse nome por causa de seus quatro(e únicos) operadores(H, Q, 9 e +). A idéia é criar uma linguagem perfeita para iniciantes, que possa executar os exemplos/exercícios mais típicos para eles sem muito sofrimento. Mais sobre isso em http://www.cliff.biffle.org/esoterica/hq9plus.html.

Os quatro operadores

  • H - "Hello, world!" na stdout.
  • Q - mostra todo o código digitado desde o início do interpretador.
  • 9 - Letra de "99 garrafas de cerveja no muro".
  • + - incrementa em um o contador iniciado em 0 junto do interpretador.

E aqui vai a versão em português do interpretador:

   1 #! /usr/bin/env python
   2 
   3 """Interpretador HQ9+
   4 
   5 HQ9+ e uma linguagem de programacao "esoterica", criada por Cliff L. Biffle
   6 (http://www.cliff.biffle.org/esoterica/hq9plus.html)
   7 Essa e uma versao python do interpretador."""
   8 
   9 __author__="Carlos KNIGHTSTALKER M. dos Santos (knightslayer@gmail.com)"
  10 
  11 
  12 def main():
  13     counter=0
  14     terminate=0
  15     while not terminate:
  16         com=raw_input('! - >')
  17 
  18         runtime.append(com)
  19 
  20         for c in com:
  21             if c.upper()=='H':
  22                 H()
  23             elif c.upper()=='Q':
  24                 Q()
  25             elif c=='9':
  26                 nine(99)
  27             elif c=='+':
  28                 counter+=1
  29                 print counter
  30             elif c=='!':
  31                 terminate=1
  32                 break
  33             else:
  34                 print '\tComando nao-reconhecido: %s' %(c)
  35 
  36 def H():
  37     print "Hello, world!!" # eu me recuso a traduzir isso!!!
  38 
  39 
  40 def Q():
  41     print '\n'.join([elem for elem in runtime])
  42 
  43 
  44 def nine(n):
  45     '''Yeah, I always do the things in "the hardest way", so
  46        why can't I put it in verbose mode ?) '''
  47     
  48     def bottles(n):
  49         if n>99:
  50             return '%s garrafas de cerveja' %(str(n))
  51         elif n>19:
  52             if n%10!=0:
  53                 return "%s e %s garrafas de cerveja" %(tenths[str(n)[0]], ones[str(n)[1]].lower())
  54             else:
  55                 return "%s garrafas de cerveja" %(tenths[str(n)[0]])
  56         elif n>9:
  57             return "%s garrafas de cerveja" %(tenths['1'][int(str(n)[1])])
  58         elif n>1:
  59             return "%s garrafas de cerveja" %(ones[str(n)])
  60         else:
  61             return "Uma garrafa de cerveja"
  62 
  63     for x in range(n):
  64         print "%s no muro, " %(bottles(n-x))
  65         print "%s no muro, " %(bottles(n-x))
  66         print "%s." %(bottles(n-x))
  67         print "Derrube uma, comece de novo, "
  68     print "Nao sobrou nenhuma garrafa de cerveja no muro..."
  69 
  70 
  71 if __name__=="__main__":
  72     runtime=[]
  73     tenths={'1':['Dez', 
  74                  'Onze', 
  75                  'Doze', 
  76                  'Treze', 
  77                  'Quatorze',
  78                  'Quinze', 
  79                  'Dezesseis', 
  80                  'Dezessete', 
  81                  'Dezoito',
  82                  'Dezenove'],
  83             '2':'Vinte',
  84             '3':'Trinta',
  85             '4':'Quarenta',
  86             '5':'Cinquenta',
  87             '6':'Sessenta',
  88             '7':'Setenta',
  89             '8':'Oitenta',
  90             '9':'Noventa'
  91             }
  92     
  93     ones={'1':'Uma',
  94           '2':'Duas',
  95           '3':'Tres',
  96           '4':'Quatro',
  97           '5':'Cinco',
  98           '6':'Seis',
  99           '7':'Sete',
 100           '8':'Oito',
 101           '9':'Nove'
 102           }
 103 
 104     print "\tInterpretador HQ9+\nPython powered(http://www.python.org)" 
 105     main()

Carlos Morais dos Santos

P.S.: Yeah, eu sei que o código tá tosco, mas isso é porque eu sou iniciante em python. Sinta-se à vontade para alterá-lo, mas me avise, assim eu posso saber onde errei. Inclua um atributo co-author no código também :).