Форум сайта python.su
Теперь вообще ничего не понимаю…. Было же нормально…
number = []
for x in xrange(len(Iteams)- 1):
for i in xrange(len(Iteams)):
if i not in number:
if (Ms[1] + str(x + 1)) not in BigBoxMessage2:
BigBoxMessage2[Ms[1] + str(x+1)] = BigBoxMessage[Ms[1] + str(i + 1)]
BigBoxMessage2[Ms[3] + str(x+1)] = BigBoxMessage[Ms[3] + str(i + 1)]
number.append(i+1)
print i
Отредактировано (Июль 31, 2011 19:14:13)
Офлайн
Мне кажется, всё дело в этой строке:
if (Ms[1] + str(x + 1)) not in BigBoxMessage2:
Отредактировано (Июль 31, 2011 20:04:42)
Офлайн
Не понял, почему именно так как ты сказал, но если убрать именно
BigBoxMessage2[Ms[1] + str(x+1)] = BigBoxMessage[Ms[1] + str(i + 1)]
number = []
for x in xrange(len(Iteams) - 1):
for i in xrange(len(Iteams)):
if i not in number:
if (Ms[1] + str(x + 1)) not in BigBoxMessage2:
BigBoxMessage2[Ms[3] + str(x+1)] = BigBoxMessage[Ms[3] + str(i+1)]
number.append(i+1)
print x, i
0 0
0 2
0 4
1 0
1 2
1 4
2 0
2 2
2 4
3 0
3 2
3 4
Офлайн
так всё логично как раз-таки у Python :)
При i = 0 получаем true в обеих проверках (вторая вообще всегда будет давать true, если до выполнения цикла мы нигде инициализируем в словаре ключи вида Ms + str(x + 1) ). В список number при этом добавляется элемент ‘1’. print выдает ‘0 0’
Соотвественно, при i = 1 проверка “if i not in number:” даёт false, и ничего не происходит.
i = 2 — проверка “if i not in number:” проходит, вторая проверка "if (Ms + str(x + 1)) not in BigBoxMessage2:", как уже писалось выше, тоже проходит и к number добавляется элемент ‘3’. print выдает ‘0 2’
i = 3 — см. i = 1
i = 4 — см. i = 2, к number добавляется ‘5’. print выдает ‘0 4’
Всё повторяется при x = 1; 2; 3.
Очевидно, len(Iteams) = 4. Всё логично, весь output корректен.
И, чтобы не было непоняток, вопрос: какую цель ты преследуешь в этом участке кода?
Отредактировано (Июль 31, 2011 23:25:44)
Офлайн
Хорошо, видимо я не ясно выражаюсь интерпретатору…
Смысл такой:
number = [] #Здесь я собираю номера ID, которые прошли условия, чтоб в дальнейшем их не проходить.
for x in xrange(len(Iteams) - 1): #Здесь как в следующей строке для перебора элементов в словарях
for i in xrange(len(Iteams)):
if i not in number: #Проверка, есть ли i в списке number
if (Ms[1] + str(x + 1)) not in BigBoxMessage2: # Здесь проверка, есть ли ключ такой в словаре
BigBoxMessage2[Ms[3] + str(x+1)] = BigBoxMessage[Ms[3] + str(i+1)] # Здесь мы заполняем словарь под ключами, не знаю
BigBoxMessage2[Ms[1] + str(x+1)] = BigBoxMessage[Ms[1] + str(i+1)] # почему, у Python бурная реакция на это...
number.append(i+1) # Добавляем переменную, +1 так, как ID начинаются не с нуля
for z in xrange(len(Labels)): # Labels - список названий
if Labels[z] not in BigBoxMessage2[Ms[3] + str(x+1)]: # Проверка на наличие названий.
if Labels[z] in BigBoxMessage[Ms[3] + str(i+1)]:
BigBoxMessage2[Ms[3] + str(x+1)] = BigBoxMessage2[Ms[3] + str(x+1)] + " | " + Labels[z] # ну и завершающий этап, ради чего вообще тут это я делал, добавление переменной
Офлайн
В данном коде действия после строчки
if i not in number:
if (Ms[1] + str(x + 1)) not in BigBoxMessage2:
Отредактировано (Авг. 1, 2011 23:33:49)
Офлайн