4006
Comentário:
|
4093
ôps, o 'for'!!!
|
Deleções são marcadas assim. | Adições são marcadas assim. |
Linha 1: | Linha 1: |
= HQ9+ = |
|
Linha 25: | 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 29: | Linha 27: |
counter=0 terminate=0 |
counter = 0 end = False def inccounter(): counter += 1 # nested scopes def finalize(): end = True |
Linha 32: | Linha 35: |
com=raw_input('! - >') | comm = raw_input('! - >') |
Linha 34: | 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 50: | Linha 49: |
print '\tComando nao-reconhecido: %s' %(c) | if c == '+': print counter elif c == '!': break |
Linha 60: | Linha 62: |
def nine(n): | def nine(n=99): |
Linha 65: | Linha 67: |
if n>99: | if n > 99: |
Linha 67: | Linha 69: |
elif n>19: if n%10!=0: |
elif n > 19: if n%10 != 0: |
Linha 72: | Linha 74: |
elif n>9: | elif n > 9: |
Linha 74: | Linha 76: |
elif n>1: | elif n > 1: |
Linha 87: | 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 109: | 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'} |
Linha 124: | Linha 124: |
'''''Carlos Morais dos Santos''''' '''''E-Mail:''''' ''knightslayer@google'sapproachtowebmail.com'' '''''ICQ#:''''' ''309803450'' '''''Jabber:''''' ''knightstalker@jabber.org/Gaim'' |
CarlosMoraisDosSantos |
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()
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 :).