|
Модераторы: Daevaorn |
|
newsTester |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 53 Регистрация: 29.3.2008 Репутация: нет Всего: нет |
хочу описать класс взвешенного графа в котором есть список ребер и список вершин. Хочу ввести его из файла содержащего список смежности вот таким методом
так вот. Список vertexes заполняется нормально, а в списке edges оказывается куча ребер равных последнему (причем похоже что ВСЕ ребра УСТАНАВЛИВАЮТСЯ равными последнему ребру из списка) . И это при том что функция вызывается отдельно для ввода каждого ребра... точнее вершины всех ребер равны вершинам последнего ребра, а длины все разные и идут в обратном порядке... В общем все признаки сумасшедствия на лицо Это сообщение отредактировал(а) newsTester - 23.5.2009, 01:27 |
|||
|
||||
Daevaorn |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 9 Всего: 70 |
Сократите ваш код до минимального, продуцирующего на ваш взгляд не правильное поведение. Разбираться в вашей предметной области и додумывать те части, которые вы не привели желания нет. |
|||
|
||||
alex_smirnov |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 194 Регистрация: 22.6.2007 Где: Санкт-Петербург Репутация: 2 Всего: 4 |
Проблема в том, что мы не знаем, что из себя представляет объект cls (имеет-ли он поля edges и vertexes? ; ).
Также, было бы неплохо увидеть стектрэйс ошибок. |
|||
|
||||
newsTester |
|
||||||||||||||||||
Шустрый Профиль Группа: Участник Сообщений: 53 Регистрация: 29.3.2008 Репутация: нет Всего: нет |
И так есть два замечание первое что кода слишком много, второе что информации слишком мало... Попытаюсь исправиться.
Проблема в том что по моему не правильно работает вот этот кусок
А аналогичный ему (опять таки по моему) вот этот кусок
работает корректно.. И понять в чем разница я никак не могу.
В принципе никаких секретов и примудростей в cls вроде нет. Весь модуль выглядит примерно так (cls имеет тип Graph), но использует объекты типа Edge.
Може я действительно где-то рядом ошибаюсь..
а вот этого я вам уже не покажу, т.к. его просто нет. Тут просто edges заполняется не корректными данными, т.е. ошибка получается логическая. Суть ошибки примерно в следующем при вводе
хочется увидеть
а получается
ну вроде так толжнобыть понятней... Но лично я всеравно так ничего и не могу понять |
||||||||||||||||||
|
|||||||||||||||||||
Hydrevt |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 9.10.2008 Репутация: нет Всего: нет |
Очень похоже, что проблема аналогична моей (ответ - http://forum.vingrad.ru/index.php?showtopi...t&p=1868989, ещё раз спасибо Daevaorn): vertexes и length у Вас - атрибуты класса, а не объекта. Соответственно, они делятся между всеми экземплярами Edge. Решение - не обозначать их в классе, а только присваивать в конструкторе:
(Работоспособность проверил) P. S. С атрибутами Graph у Вас полностью аналогичная ситуация - так что всё хорошо будет только если на всю программу будет один-единственный граф. Ещё есть предложение сократить код и повысить удобочитаемость, заменив
на
(Работоспособность также проверена на Вашем примере.) P. P. S. Описание ещё в чём-то аналогичных вашим "граблей": http://www.intuit.ru/department/pl/python/3/2.html - "Примечание" и текст под ним, а также http://www.intuit.ru/department/pl/python/2/4.html - про модуль copy Это сообщение отредактировал(а) Hydrevt - 24.5.2009, 09:49 |
||||||
|
|||||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |