Почему это не работает? - PullRequest
0 голосов
/ 12 мая 2010
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 ]

2 голосов
/ 12 мая 2010

Для меня не сразу очевидно, что вы пытаетесь сделать, но, может быть, вы имеете в виду это?

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 это уже строка.
  • Вы должны использовать что-то вроде словаря определения замен вместо длинного списка операторов замены.
  • Вы можете рассмотреть возможность использования рецепта grouper из itertools вместо того, чтобы писать его самостоятельно.
  • Ваш цикл while очень похож на C. Попробуйте вместо этого использовать for x in l:.
0 голосов
/ 12 мая 2010

Вам обязательно нужно ознакомиться со словарями!

Попробуйте что-то вроде

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

и затем произведите замену через

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

вместо всего цикла while a!=b.

0 голосов
/ 12 мая 2010

Этот код заставляет мой разум взрываться в муках. Тем не менее, я думаю, что это будет вашим решением:

Перед циклом while выполните c="", затем измените c = на c +=

0 голосов
/ 12 мая 2010

Мне кажется, что вы постоянно перезаписываете c.

Итак, ваш конечный результат будет таким (для наибольшего значения a):

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

(при условии, что это последняя замена в последовательности).

Все остальные строки кода в этой последовательности не будут иметь никакого эффекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...