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

Diferenças para "InterpretadorHq9"

Diferenças entre as versões de 3 e 5 (2 versões de distância)
Revisão 3e 2005-11-20 00:00:09
Tamanho: 3824
Comentário:
Revisão 5e 2005-11-20 14:44:56
Tamanho: 4093
Comentário: ôps, o 'for'!!!
Deleções são marcadas assim. Adições são marcadas assim.
Linha 23: Linha 23:
__author__="Carlos KNIGHTSTALKER M. dos Santos (knightslayer@gmail.com)" __author__ = "Carlos KNIGHTSTALKER M. dos Santos (knightslayer@gmail.com)"
__coautor__ = "Eduardo 'EdCrypt' de Oliveira Padoan (eduardo.padoan@gmail.com)"
Linha 27: Linha 27:
    counter=0
    terminate=0
    counter = 0
    end = False
    
    def inccounter(): counter += 1 # nested scopes
    
    def finalize(): end = True
    
Linha 30: Linha 35:
        com=raw_input('! - >')         comm = raw_input('! - >')
Linha 32: Linha 37:
        runtime.append(com)

        for c in com:
            if c.upper()=='H':
                H()
            elif c.upper()=='Q':
                Q()
            elif c=='9':
                nine(99)
            elif c=='+':
                counter+=1
                print counter
            elif c=='!':
                terminate=1
                break
        runtime.append(comm)
        
        for c in comm:
            try:
                {'H': H,
                 'Q': Q,
                 '9': nine,
                 '+': inccounter,
                 '!': finalize}[c.upper()]() # dictionary dispatch
            except KeyError:
                print '\tComando nao-reconhecido: %s' %(c)
Linha 48: Linha 49:
                print '\tComando nao-reconhecido: %s' %(c)                 if c == '+':
                    print counter
                elif c == '!':
                    break
Linha 58: Linha 62:
def nine(n): def nine(n=99):
Linha 63: Linha 67:
        if n>99:         if n > 99:
Linha 65: Linha 69:
        elif n>19:
            if n%10!=0:
        elif n > 19:
            if n%10 != 0:
Linha 70: Linha 74:
        elif n>9:         elif n > 9:
Linha 72: Linha 76:
        elif n>1:         elif n > 1:
Linha 85: Linha 89:
if __name__=="__main__":
    runtime=[]
    tenths={'1':['Dez',
                 'Onze',
                 'Doze',
                 'Treze',
                 'Quatorze',
                 'Quinze',
                 'Dezesseis',
                 'Dezessete',
                 'Dezoito',
                 'Dezenove'],
            '2':'Vinte',
            '3':'Trinta',
            '4':'Quarenta',
            '5':'Cinquenta',
            '6':'Sessenta',
            '7':'Setenta',
            '8':'Oitenta',
            '9':'Noventa'
            
}
if __name__ == "__main__":
    runtime = []
    tenths = {'1': ['Dez',
                    'Onze',
    'Doze',
                    'Treze',
                    'Quatorze',
                    'Quinze',
                    'Dezesseis',
                    'Dezessete',
                    'Dezoito',
    'Dezenove'],
            '2': 'Vinte',
            '3': 'Trinta',
            '4': 'Quarenta',
            '5': 'Cinquenta',
            '6': 'Sessenta',
            '7': 'Setenta',
            '8': 'Oitenta',
            '9': 'Noventa'}
Linha 107: Linha 110:
    ones={'1':'Uma',
          '2':'Duas',
          '3':'Tres',
          '4':'Quatro',
          '5':'Cinco',
          '6':'Seis',
          '7':'Sete',
          '8':'Oito',
          '9':'Nove'
          
}
    ones={'1': 'Uma',
          '2': 'Duas',
          '3': 'Tres',
          '4': 'Quatro',
          '5': 'Cinco',
          '6': 'Seis',
          '7': 'Sete',
          '8': 'Oito',
          '9': 'Nove'}
  • 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 :).