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

Revisão 4e 2005-11-20 14:41:55

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