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

Revisão 5e 2005-11-20 14:44:56

Excluir mensagem

InterpretadorHq9

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

CarlosMoraisDosSantos

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 :).