为什么这不起作用?

时间:2010-05-11 22:50:50

标签: python

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()

我可以输入任何东西,例如 111 它给了我同样的东西。也许它是愚蠢的东西,但我无法弄明白。假设我想说它不好,我会输入112111114.它应该给我带来不好,但事实并非如此。

4 个答案:

答案 0 :(得分: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循环非常喜欢。请考虑使用for x in l:代替。

答案 1 :(得分:0)

在我看来,你反复覆盖c

所以你的最终结果将是这个(对于a的最高值):

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

(假设这是序列中的最后一个替换)。

该序列中的所有其他代码行都没有效果。

答案 2 :(得分:0)

这段代码让我的思绪在痛苦中爆发。但是,我认为这将是您的解决方案:

在while循环之前,执行c=""然后将c =更改为c +=

答案 3 :(得分:0)

你绝对需要熟悉词典!

试试......

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

然后通过

进行替换
c = "".join([code_dict[part] for part in l])

而不是整个while a!=b循环。