Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Центр помощи > [Python] Сдвиги влево и вправо |
Автор: Paranorma 20.1.2007, 19:57 | ||||||
Люди! Я снова к вам обращаюсь за помощью! Простите меня, бестолковую! Задание заключается вот в чем: имеется список:
количество элементов в списке увеличиваться и уменьшаться не должно. Но в нем должен происходить сдвиг влево, т.е. второй элемент становиться первым, последний - предпоследним, затем следовать 0. СТРОГО НАСТРОГО ЗАПРЕЩЕНО ИСПОЛЬЗОВАТЬ МЕТОДЫ DEL И APPEND. То есть я поняла, что происходить переприсваивание. Элементу с индексом 0 присвоить значение элемента с индексом 1, элементу с индексом 1 присвоить значение элемента с индексом 2 и т.д. то есть в калькуляторе это будет выглядеть так:
Эта задача снова на использование цикла while, причем один в другом. Я как-то недавно писала о задаче с удалением дубликатов:
Насколько я понимаю, она очень похожа на эту, но тут мне не совсем понятно, как в новом задании поступать с переменными i и j. |
Автор: Void 20.1.2007, 22:21 | ||||
В чём проблема?
Или даже так ![]()
|
Автор: Paranorma 21.1.2007, 17:38 |
Проблема в том, что при всем чтении учебников я едва понимаю, как все это работает. А как быть, если сдвиг нужен в обратную сторону? Т.е. вместо [1, 2, 3, 4, 5, 6] получить [0, 1, 2, 3, 4, 5] |
Автор: Void 21.1.2007, 17:52 | ||
А можно поинтересоваться, какими именно учебниками пользуетесь? |
Автор: Paranorma 21.1.2007, 18:53 |
Void, спасибо, что помогаете мне. Наверно, я вас совсем замучила. ![]() Я пользуюсь Tutorial в самой программе, "Язык программирования Python", авторы Россум, Дрейк, Откидач (тот же Tutorial, только по русски), "Учимся программировать вместе с Питоном", автор Чаплыгин А.Н. Теоретической частью я более или менее овладела, а вот применить знания на практике не получается, почти никогда ничего не работает. Препод велел еще сделать циклические сдвиги, когда в первом случае список [1, 2, 3, 4, 5, 6] превращается в [6, 1, 2, 3, 4, 5], а в другом превращается [2, 3, 4, 5, 6, 1] Увы, даже такие элементарные вещи не получаются. ![]() |
Автор: Paranorma 23.1.2007, 01:01 | ||
Да, по Чаплыгину книга вообще хорошая. А как превратить a = [1, 2, 3, 4, 5, 6] в a = [6, 5, 4, 3, 2, 1]??? Могу конечно и так написать, но мне то через while надо:
|
Автор: doomik 23.1.2007, 15:43 | ||
Какое условие задачи ? Я вижу 2
Программа копирует элементы их массива a[] в a2[] в обратном порядке, дальше освобождаем массив a[] от его старых элементов а потом присваиваем ему элементы массива a2[]
|
Автор: Void 23.1.2007, 17:20 | ||
Просто меняем местами симметричные элементы.
|
Автор: Paranorma 23.1.2007, 21:15 | ||
Ну вот такая она у меня вышла... Вроде, работает! |
Автор: pythonwin 24.1.2007, 10:23 |
Void, ++1 за помощь Paranorma с питоном |
Автор: albertn 24.1.2007, 12:19 | ||
А не проще ли использовать код типа:
|
Автор: Void 24.1.2007, 17:43 |
albertn, разумеется. Но дело в том, что и так далее в таком духе. Я не считаю этот способ преподавания правильным, но c'est la vie. |
Автор: V.A.KeRneL 24.1.2007, 17:53 | ||||||||
Ну почему же? На ранних стадиях обучения программированию, которые, очевидно, осваивает Paranorma, главное — научиться придумыват и реализовывать своими руками элементарные алгоритмы, пользуясь примитивами, а не [сколь бы то ни было] продвинутыми методами и фишками языка. Вот моё «безопасное» (не портящее массив-аргумент, а создающее новый) решение для задачи реверса массива (списка):
Ниже приведено понравившееся мне решение задачи левого и правого сдвигов массива (списка) slav0nic'а с форума http://python.com.ua/forum/. >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>>
имхо так покрасивше В) сдвигается по 1 элементу за цикл slav0nic = {jid: "[email protected]", home: "http://slav0nic.xss.ru", LJ: "http://slav0nic.livejournal.com"} <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< <<< Я бы переписал его так (для «безопасности»):
|
Автор: Void 24.1.2007, 18:07 | ||
V.A.KeRneL, в таком случае надо брать либо другой язык, либо другие задачи. Впрочем, самые ранние стадии обучения программированию для меня всегда были загадкой ![]() Произвольный сдвиг можно и попроще записать.
n положительно — влево, отрицательно — вправо. Впрочем, чтобы не запоминать, я пошёл бы небольшое дублирование и оставил shift_left, shift_right с идентичным кодом. |
Автор: Paranorma 25.1.2007, 23:09 | ||||
Народ! тут такая проблемка... Короче, вот как мне записать это задание:
без отрицательных индексов. То есть без -i Я знаю, что например a[-1] это то же самое, что и a[len(a)-1]. И то и другое в квадратных скобках означает последний элемент списка. Я в силу своей неопытности решила, что можно записать так.
Но не работает ведь! HELP!!! |
Автор: V.A.KeRneL 25.1.2007, 23:34 | ||||||
Paranorma, ``(len(a) - 1) - 1'' — это ж константное выражение, равное ``len(a) - 2''! ![]() Я думаю, после этого замечания ты и сама сможешь додуматься как надо. По крайней мере, взяв в руки листочек с карандашиком... ![]() Но на всякий пожарный, как говорится, вотЬ:
З.Ы. i += 1 # Почему ты боишься использовать такую форму? # Она очень удобна. # Да, на самом деле, и проста в понимании. # Она дословно означает: «увеличить значение переменной i на единицу». # И писать меньше, и с точки зрения человеческой логики 1 команда вместо 2-х # («сложить i c единицей» и «присвоить переменной i вычесленное значение»). |
Автор: Paranorma 26.1.2007, 00:28 | ||
[QUOTE=V.A.KeRneL,25.1.2007, 23:34]
Я не боюсь, по мне эта форма тоже проста и понятна, но препод ругает за ее использование. ![]() |
Автор: Void 26.1.2007, 00:38 |
А подать сюда Ляпкина-Тяп… err… Странный у вас препод. Ума не приложу, какое может быть этому обоснование. |
Автор: pythonwin 26.1.2007, 08:59 | ||
а ты напиши преподавателю пример с длинными переменными - символов так 10 и более |
Автор: Artemios 26.1.2007, 11:27 | ||
Мда... Бывает ![]() ![]() |
Автор: pythonwin 26.1.2007, 11:33 | ||
в Паскале для этого есть dec и inc |
Автор: Karadul 6.2.2010, 09:49 |
V.A.KeRneL, оно может и покрасивше, но у тебя в каждой итерации выделяется память, или нет? |