Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В чём здесь ошибка? Помогите найти ошибку в коде 
:(
    Опции темы
Arc
Дата 11.4.2005, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.4.2005

Репутация: нет
Всего: нет



Изучать python я начал недавно. Целых 3 дня назад. smile
Сейчас пытаюсь написать простенькую программку для преобразование десятичного однобайтового числа в двоичное (в моём примере это число 250). Понимаю, что её год выглядит немного глуповато, но меня интересует другое. Код (представленный ниже) почему-то не хочет выполняться интерпретатором. И прошу не обращать внимания на последнюю команду print nArray smile

number = 250
count = 8
nArray = (0,0,0,0,0,0,0,0)
index = 7
while count >= 0:
b = divmod(number,2)
number = b[0]
nArray[index] = b[1]
count = count - 1
index = index - 1

print nArray
PM MAIL   Вверх
Domestic Cat
Дата 11.4.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Ты используешь тапл
Код

nArray = (0,0,0,0,0,0,0,0)

а потом пытаешься его изменить
Код

nArray[index] = b[1]



Тапл же менять нельзя. Воспользуйся листом:
Код

nArray = [0,0,0,0,0,0,0,0]



--------------------

PM   Вверх
setq
Дата 11.4.2005, 18:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











и ещё кажется цикл выполнится 9 раз.
для count = 8,7,6, 5,4,3, 2,1,0.

в скобках: советую пользоваться тегами code
  Вверх
Arc
Дата 11.4.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.4.2005

Репутация: нет
Всего: нет



Всё, исправил. Теперь код работает, как часы. Спасибо, в следующий раз буду внимательнее. smile
PM MAIL   Вверх
Void
Дата 11.4.2005, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 10
Всего: 173



 Ошибки в коде уже указали, попробую дать рекомендации по улучшению  smile 
Код

number = 250
# список из одного элемента [0] 8 раз присоединяется сам к себе
nArray = [0] * 8
# зачем две переменные count и index, когда они принимают одинаковые значения?
index = 7
while index >= 0:
    # слева tuple, справа tuple - присваиваем два значения за один шаг
    number, nArray[index] = divmod(number, 2)
    # корокая запись index = index - 1
    index -= 1
print nArray

А можно и так:
Код

number = 250
# для каждого i в диапазоне 7..0 будет выполнена операция (number >> i) & 1
# (очевидно, это i-й бит числа number) и значения будут собраны в один список.
nArray = [(number >> i) & 1 for i in range(7, -1, -1)]
print nArray

 

Это сообщение отредактировал(а) Void - 27.2.2008, 13:27


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Arc
Дата 11.4.2005, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.4.2005

Репутация: нет
Всего: нет



Цитата(setq @ 11.4.2005, 18:44)
и ещё кажется цикл выполнится 9 раз.
для count = 8,7,6,  5,4,3,  2,1,0.

в скобках: советую пользоваться тегами code

Да нет, исполняетс ровно 8 раз. Проверено опытным путём. smile
Хотя совет я тоже приму к сведению, спасибо.
PM MAIL   Вверх
Arc
Дата 11.4.2005, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.4.2005

Репутация: нет
Всего: нет



Цитата(Arc @ 11.4.2005, 19:06)
Цитата(setq @ 11.4.2005, )
и ещё кажется цикл выполнится 9 раз.
для count = 8,7,6,  5,4,3,  2,1,0.

в скобках: советую пользоваться тегами code

Да нет, исполняетс ровно 8 раз. Проверено опытным путём. smile
Хотя совет я тоже приму к сведению, спасибо.

Хотя нет, действительно 9 раз. smile
PM MAIL   Вверх
Lich
Дата 15.4.2005, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.4.2005

Репутация: нет
Всего: нет



или так:

Код

func=lambda n: [(2**i<=n and (n/(2**i))%2) or 0 for i in range(7,-1,-1)]
print func(250)


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1204 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.