2010-05-11 213 views
0
take = raw_input('Please enter the string of numbers that compose code\n\n\t') 
y = str(take) 
l = [] 
for i in xrange(0, len(y), 3): 
l.append(str(y[i:i+3])) 
b = len(l) 
a = 0 

while(a!=b): 
    c = l[a].replace('444', ' ') 
    c = l[a].replace('111', 'a') 
    c = l[a].replace('112', 'b') 
    c = l[a].replace('113', 'c') 
    c = l[a].replace('114', 'd') 
    c = l[a].replace('115', 'e') 
    etc... 
    a = a + 1 

filename = 'decmes.txt' 
file = open(filename, 'w') 
file.write(c) 
file.close() 

我可以输入任何东西,只是例如,这让我回来,我把同样的事情。也许这是愚蠢的东西,但我无法弄清楚。假设我想让它说不好,我会输入112111114.它应该给我不好,但它不会。这为什么不工作?

+0

你是否从另一种语言翻译过此内容? – 2010-05-11 22:55:49

回答

0

它在我看来像你一再覆盖c

因此,最终的结果会是这样(为的最高值):

c = l[a].replace('115', 'e') 

(假设这是序列中的最后一次更换)。

该序列中的所有其他代码行都不起作用。

+0

如果我输入111,它只会用111代替c。 – 2010-05-11 22:58:52

2

这对我来说并不是显而易见的,你想要做什么,但也许你是这个意思?

c = '' 
while(a!=b): 
     c += l[a].replace('444', ' ') \ 
       .replace('111', 'a') \ 
       .replace('112', 'b') \ 
       .replace('113', 'c') \ 
       .replace('114', 'd') \ 
       .replace('115', 'e') 
     a = a + 1 

虽然这里有一些样式问题。以下是一些示例:

  • 您的行y = str(take)是不必要的。 take已经是一个字符串。
  • 你应该使用类似于字典的东西来定义替换,而不是一长串替换语句。
  • 你可以考虑使用itertools的grouper配方,而不是自己编写它。
  • 你的while循环非常喜欢C语言。考虑使用for x in l:代替。
+0

我加到底部。也许它有帮助 – 2010-05-11 22:57:41

0

此代码让我的头脑在痛苦中爆发。不过,我认为这将是您的解决方案:

while循环之前,做一个c=""然后更改c =c +=

0

你绝对需要熟悉的字典!

code_dict = {'444': ' ', 
      '111': 'a', 
      '112': 'b', 
      ...} 

,然后试图通过某事

c = "".join([code_dict[part] for part in l]) 

,而不是整个while a!=b循环使你的替代品。