Найти - Пользователи
Полная версия: Вопрос про for.
Начало » Python для новичков » Вопрос про for.
1
Lynx
Теперь вообще ничего не понимаю…. Было же нормально…
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
При выводе i нули, а при выводе x норм значения… Почему?
Infernus
Мне кажется, всё дело в этой строке:
if (Ms[1] + str(x + 1)) not in BigBoxMessage2:
После итерации i = 0 результат проверки (Ms + str(x + 1)) not in BigBoxMessage2 будет false для всех последующих i.
Lynx
Не понял, почему именно так как ты сказал, но если убрать именно
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 ток и расстраивает меня =(
Всё логично, а он так… Устал уже я…
Infernus
так всё логично как раз-таки у 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 корректен.

И, чтобы не было непоняток, вопрос: какую цель ты преследуешь в этом участке кода?
Lynx
Хорошо, видимо я не ясно выражаюсь интерпретатору…

Смысл такой:
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] # ну и завершающий этап, ради чего вообще тут это я делал, добавление переменной
Вообщем вот расписал… Надеюсь так понятней.
PS Iteams - правильно Items. Просто не когда исправлять…
Infernus
В данном коде действия после строчки
if i not in number:
будут выполнены только при i = 0. При всех следующих i проверка
if (Ms[1] + str(x + 1)) not in BigBoxMessage2:
будет давать false, ибо при i = 0 мы инициализировали пару “ключ-значение” в словаре BigBoxMessage2: ключ Ms + str(x+1), значение BigBoxMessage[Ms + str(i+1)].
Ведь по сути ты проверяешь отсутствие данного ключа в словаре, но он будет в нём присутствовать уже после i = 0.
Если объяснил не то, или непонятно — спрашивай.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB