Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/208: Рейтинг темы: голосов - 208, средняя оценка - 4.75
 Аватар для Lucky64
20 / 9 / 0
Регистрация: 16.01.2019
Сообщений: 288

Ищу доброго самаритянина по питону

16.01.2019, 16:27. Показов 45315. Ответов 508
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех приветствую, немного о себе, 27 лет, женат, работаю системным админом в крупной компании. Всегда хотел программировать, но по стечению обстоятельств не сложилось, то работа не позволяла, не было времени, то бытовуха итд. Но вот решил что во что бы то не стало я овладею данной профессией. Начал свой путь программирования с питона. Сейчас читаю книги, прохожу на сайтах различные обучающие уроки итд, на ютюбе нашел не плохой канал где разжевывают все хорошо и вроде потихоньку получается писать (можно было бы идти на курсы, но не позволяет работа, питон питоном, а семью кормить надо, вроде и на работе время есть изучать, но вот уходить на курсы с работы итд, это не варик). Буквально вчера закончил разбираться и написал уже самостоятельно игру камень, ножницы, бумага, где играешь против компа. Ищу человека который просто направлял бы меня в нужное русло, подкидывал материал для изучения, который потом мне пригодится итп, который помог бы в трудностях. Просто учить все подряд без какого либо плана дает итог каши в голове. Если найдется тут такой человек, буду искренне благодарен ему!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.01.2019, 16:27
Ответы с готовыми решениями:

В зависимости от ведённого времени получите сообщение с пожеланием доброго утра, доброго дня, доброго вечера, спокойный
Плииз! Помогите с учёбой! В общем суть задания: В зависимости от ведённого времени (от 0 до 24) получите сообщение с пожеланием доброго...

В зависимости от введенного значения времени желает доброго утра, доброго дня, доброго вечера, доброй ночи.
Нужно составить программу, которая требует ввода времени дня и в зависимости от введенного значения желает доброго утра, доброго дня,...

Ищу доброго человечка, который поможет
Здравствуйте. Помогите пожалуйста сверстать небольшую страницу. Html, Css, Font Awesome

508
0 / 0 / 0
Регистрация: 05.02.2019
Сообщений: 7
19.02.2019, 20:00
Студворк — интернет-сервис помощи студентам
Есть такой сайт: https://informatics.mccme.ru/

1. По порядку решаем задачи из: Кружки и урокиГородские кружки ХамовникиОсновы программирования на Python не включая Теоретический материал по двумерным массивам

2. Списки (одномерные массивы): Авторские курсыД.П.КириенкоСписки

3. Двумерные массивы(матрицы): Теория: Теоретический материал по двумерным массивам из Хамовников(маршруты на плоскости не смотрим). Задачи: Д.П.Кириенко (просто задачи, не на генераторы)

Пока хватит
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
20.02.2019, 02:35
Lucky64, Интересно, а сколько тебе на все это понадобилось времени?

Добавлено через 23 минуты
Lucky64, Вот задача.
Все отрицательные элементы массива списка перенести в его начало, а все остальные – в конец
Прочитай ее там, и не перенося сюда придумай алгоритм, и напиши алгоритм здесь. Потом по алгоритму напиши код.

Добавлено через 1 минуту
Обсудим алгоритм здесь а потом код, потом посмотришь там как решили другие. Вначале чужие решения не смотри, попытайся сам.

Добавлено через 27 минут
Для примера можно взять список
Python
1
[5, -7, 3, 0, 1, 3, -7, 0, -2]
и его преобразовать, как требуется в условии.

Добавлено через 2 часа 44 минуты
Еще одна задача, более сложная:
Создать новый массив, исключив из переданного массива совпадающие столбцы

А здесь информация о двумерных массивах:
http://labs.org.ru/python-8/

оттуда можно использовать функцию для печати матрицы.
Python
1
2
3
4
5
def printMatrix ( matrix ): 
   for row in matrix: 
      for x in row: 
          print ( "{:4d}".format(x), end = "" ) 
      print ()
Вот пример двумерного массива с одинаковыми столбцами, или придумай свой пример.
Python
1
2
3
M = [[1,2,3,2,1], 
     [4,5,6,5,2], 
     [7,8,9,8,3]]
0
 Аватар для Lucky64
20 / 9 / 0
Регистрация: 16.01.2019
Сообщений: 288
20.02.2019, 09:41  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
Интересно, а сколько тебе на все это понадобилось времени?
примерно неделя ушла
Цитата Сообщение от Viktorrus Посмотреть сообщение
Lucky64, Вот задача.
Все отрицательные элементы массива списка перенести в его начало, а все остальные – в конец
Прочитай ее там, и не перенося сюда придумай алгоритм, и напиши алгоритм здесь. Потом по алгоритму напиши код.
Хорошо

Добавлено через 52 минуты
Цитата Сообщение от Viktorrus Посмотреть сообщение
Обсудим алгоритм здесь а потом код, потом посмотришь там как решили другие. Вначале чужие решения не смотри, попытайся сам.
Мой алгоритм такой:
Python
1
2
3
f=[5, -7, 3, 0, 1, 3, -7, 0, -2]
for x in f[0:]:
    if x>=0:
Дальше я не знаю как продолжить, каким условием можно сдвинуть Х в конец списка, если оно больше или равно 0...
и естественно если оно меньше нуля, как это указать в елсе?...

Придумал только вот такой вариант:
Python
1
2
3
f=[5, -7, 3, 0, 1, 3, -7, 0, -2]
f.sort()
print(list(f))
Но он не является функцией и не сохраняет исходное взаимное расположение... буду думать дальше...

Добавлено через 1 час 16 минут
Viktorrus, В общем Виктор ничего лучше кроме как:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
f=[5, -7, 3, 0, 1, 3, -7, 0, -2]
for x in f[0:1]:
    if x>=0:
        f[0]=f[-1]
        f[-1]=x
    else:
        f[0]=x
for y in f[1:2]:
    if y>=0:
        f[1]=f[-2]
        f[-2]=y
    else:
        f[1]=y
for z in f[2:3]:
    if z>=0:
        f[2]=f[-3]
        f[-3]=z
    else:
        f[2]=z
for q in f[3:4]:
    if q>=0:
        f[3]=f[-4]
        f[-4]=q
    else:
        f[3]=q
for r in f[4:5]:
    if r>=0:
        f[4]=f[-5]
        f[-5]=r
    else:
        f[4]=r
print(list(f))
Я просто не придумал, примитивно перебирать по очереди каждый элемент
В голове просто ад сейчас((

Добавлено через 2 минуты
Viktorrus, алгоритм должен быть такой по моему мнению: Берем первый элемент, сравниваем его с нулем, если он меньше нуля, то оставляем без изменений, если больше или равен нулю, ставим его в конец списка...
0
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
20.02.2019, 09:47
Lucky64, попробуй такую связку: цикл while, метод списка append(element)-добавляет элемент в конец, метод списка pop(index)-удаляет элемент по индексу
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
20.02.2019, 14:04
Lucky64, Во-первых, в условии говорится, "Дополнительный список или массив не заводить."
Но срез всегда создает новый список, даже если он из одного элемента. Значит срез использовать нельзя.
Подумаем, какой здесь может быть алгоритм. Если мы будем двигать по кругу положительные числа добавляя их в конец, то отрицательные окажутся слева, а положительные справа. Причем порядок их следования не поменяется. Resistanse, Тебе это и предлагает. Перебираешь в цикле все элементы и если положительный, то добавляешь его в конец, одновременно удаляя с того места где он стоял.
Resistanse, Предлогает для этого цикл while и методы append и pop.
Я тоже использовал перемещение положительный чисел в конец, но в цикле for с методом append и инструкцией del.
Выбери как тебе удобнее и напиши код.
Синтаксис команд смотри в справочнике.

Добавлено через 15 минут
Цитата Сообщение от Lucky64 Посмотреть сообщение
алгоритм должен быть такой по моему мнению: Берем первый элемент, сравниваем его с нулем, если он меньше нуля, то оставляем без изменений, если больше или равен нулю, ставим его в конец списка
Алгоритм ты придумал правильный, просто не смог в питоне найти средства для его реализации. Как я уже писал, здесь просто нужна практика.
Практикуясь на задачах, ты будешь проходить 3 этапа.

1. На первом этапе, делая задачи, ты постепенно запомнишь, что может делать питон (тебе это поможет составлять алгоритм).
Тогда, полазив по Лутцу, как справочнику, ты будешь находить нужные команды.
2. На втором этапе, делая задачи, ты уже будешь помнить названия команд, и что они делают.
Тогда, зная имя команды, ты сможешь быстро находить ее в справочнике (ссылку на который я давал) и смотреть ее
синтаксис.
3. На третьем этапе профессиональном, делая задачи, ты уже будешь помнить имя команды, ее синтаксис и что она делает.
Здесь уже ничего дополнительно не понадобиться, будешь просто писать код.

Добавлено через 14 минут
Кстати , я нахожусь в промежутке между 1-ым и 2-ым этапом (команды помню не все). Но благодаря своей базе данных (БД), которую веду параллельно изучению, я, когда пишу код, фактически как бы нахожусь на этапе 2. Я быстро нахожу нужную мне команду с ее синтаксисом, даже не помня имя команды. Мне достаточно знать, что команда должна делать, и я поиском по ключевому слову нахожу в БД нужную мне команду. Собственно в том числе и для создания БД я повторно вернулся к изучению книги Лутц М. Изучаем Python (4-е издание, 2011).

Добавлено через 15 секунд
Кстати , я нахожусь в промежутке между 1-ым и 2-ым этапом (команды помню не все). Но благодаря своей базе данных (БД), которую веду параллельно изучению, я, когда пишу код, фактически как бы нахожусь на этапе 2. Я быстро нахожу нужную мне команду с ее синтаксисом, даже не помня имя команды. Мне достаточно знать, что команда должна делать, и я поиском по ключевому слову нахожу в БД нужную мне команду. Собственно в том числе и для создания БД я повторно вернулся к изучению книги Лутц М. Изучаем Python (4-е издание, 2011).

Добавлено через 1 минуту
Ну все, опять начало тормозить и дуплетить.

Добавлено через 2 часа 40 минут
Во второй задаче условии допускает, что может быть несколько одинаковых столбцов. Поэтому лучше использовать для примера матрицу предусматривающию различные варианты:
Python
1
2
3
M = [[1,2,3,2,1,2,3,2], 
     [4,5,6,5,2,5,6,1], 
     [7,8,9,8,3,8,9,7]]
1
 Аватар для Lucky64
20 / 9 / 0
Регистрация: 16.01.2019
Сообщений: 288
20.02.2019, 14:30  [ТС]
Viktorrus, Мне бы с первой разобраться
в общем вот к чему я пришел за весь свой выходной день:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
f=[5, -7, 3, 0, 1, 3, -7, 0, -2]
k=0
while k!=5:
    if f[0] >= 0:
        f.append(f[0])
        f.pop(0)
    else:
        f.append(f[1])
        f.pop(1)
 
    k+=1
if f[2]>=0:
    f.append(f[2])
    f.pop(2)
print(list(f))
И этот код будет работать только с этим списком((

Добавлено через 5 минут
Resistanse, что скажете?
0
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
20.02.2019, 14:43
Lucky64, твоя ошибка в том, что ты пытаешься подогнать код к конкретной задаче. Еще ошибка что ты на 15 строке приводишь список к списку
Вот алгоритм: определяем длину списка, создаем 2 переменные, одна будет отвечать за индекс текущего элемента вторая за количество произведенных итераций(вторую будем сравнивать с длиной списка), далее проверяем текущий элемент и если он положительный, то удаляем его и вставляем в конец, если он отрицательный, то переменную, которая хранит индекс текущего элемента увеличиваем на 1, а так же увеличиваем количество итераций

И еще такое замечание - лучше давать переменным более осмысленные имена на английском
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
20.02.2019, 15:55
Resistanse, В общем он уже потрудился и попробовал написать код. Теперь можно дать ему правильный код и объяснить его работу. Скопируешь и объяснишь ему свой код?
Или если тебе некогда, я попробую объяснить твой код. Ты ведь выложил его в теме.
Ты объяснишь свой код, потом я объясню свой.

Добавлено через 8 минут
Lucky64, Вторая задача что то у меня слишком сложно получается, код громоздкий, и пока еще его не отладил, еще не все работает как надо. Конечно сам попробуешь, но боюсь мой вариант нужно будет просто тебе показать и объяснить. Может кто то предложит более простой вариант, чем у меня. Там наверное можно проще, если использовать специальный модуль для работы с матрицами.
0
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
20.02.2019, 15:55
Lucky64, можешь еще посмотреть тему, там еще много решений. Это, кстати, не самое лучшее(по скорости), но я думаю наглядное
Python
1
2
3
4
5
6
7
8
9
10
11
12
lst = [5, -7, 3, 0, 1, 3, -7, 0, -2]
iter = 0 #переменная, отвечающая за текущий индекс
count = 0#подсчет кол-ва итераций
 
while count != len(lst): #пока не дойдем до конца
    if lst[iter] >= 0:
        lst.append(lst.pop(iter))#удаляем и перемещаем в конец положительные элементы
    else:
        iter += 1#если число отрицательное, то оставляем его на месте и переходим к следующему элементу
    count += 1#увеличиваем значение текущей итерации
 
print(lst)
0
 Аватар для Lucky64
20 / 9 / 0
Регистрация: 16.01.2019
Сообщений: 288
20.02.2019, 16:45  [ТС]
мда
0
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
20.02.2019, 16:46
Цитата Сообщение от Lucky64 Посмотреть сообщение
Так??
Скорее так
Python
1
2
3
4
5
6
7
8
9
10
11
f = [5, -7, 3, 0, 1, 3, -7, 0, -2]
length = 0
count = 0
while length != len(f):
    if f[count] >= 0:
        f.append(f[count])
        f.pop(count)
    else:
        count += 1
    length += 1
print(f)
Давать имена переменным транслитом плохая практика, лучше перевести в переводчике слово и назвать по английски. Ты используешь pycharm? Если да, то он должен подсвечивать места, где неправильное оформление кода. У языка есть определенный стандарт по оформлению кода, называется PEP8, почитай, там не много https://pythonworld.ru/osnovy/... ython.html
0
 Аватар для Lucky64
20 / 9 / 0
Регистрация: 16.01.2019
Сообщений: 288
20.02.2019, 16:54  [ТС]
Resistanse, Да он у меня с ошибкой запускался, пришлось удалять коммент и исправлять отступы...
увидел ваш вариант и понял где ошибся...
Python
1
2
3
4
5
6
7
8
9
10
11
f=[5, -7, 3, 0, 1, 3, -7, 0, -2]
d=0
p=0
while d!=len(f):
    if f[p]>=0:
        f.append(f[p])
        f.pop(p)
    else:
        p+=1
    d+=1
print(f)
Вот теперь работает, + в строке с указанием ф.аппенд(р) я забыл про квадратные скобки(( ну теперь все исправил!
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
20.02.2019, 16:54
Lucky64, Все, сделал вторую задачу, но алгоритм получился сумасшедший. Только благодаря пошаговому отладчику смог его отладить. Когда закончим с первой задачей, я наверное просто выложу код для второй задачи и его обсудим. Может кто то предложит более простой.
0
 Аватар для Lucky64
20 / 9 / 0
Регистрация: 16.01.2019
Сообщений: 288
20.02.2019, 16:59  [ТС]
Цитата Сообщение от Resistanse Посмотреть сообщение
Давать имена переменным транслитом плохая практика, лучше перевести в переводчике слово и назвать по английски. Ты используешь pycharm? Если да, то он должен подсвечивать места, где неправильное оформление кода. У языка есть определенный стандарт по оформлению кода, называется PEP8, почитай, там не много https://pythonworld.ru/osnovy/... ython.html
Хорошо прочту, буду знать по поводу стандартов...
Да пайчарм, но он ничего не подсвечивал...

Добавлено через 1 минуту
Цитата Сообщение от Viktorrus Посмотреть сообщение
Все, сделал вторую задачу, но алгоритм получился сумасшедший. Только благодаря пошаговому отладчику смог его отладить. Когда закончим с первой задачей, я наверное просто выложу код для второй задачи и его обсудим. Может кто то предложит более простой.
ппц... Я закончил первую, но на сегодня думаю хватит, голова резиновая уже, не варит совсем(( мой код выше, почти такой же как у Резистанса

Добавлено через 2 минуты
Resistanse, к стати по вашей ссылке перекидывает на не найденную страницу
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
20.02.2019, 17:04
Lucky64, Как я понял, Вы закончили первую задачу. Вторую задачу посмотришь, может что то придумаешь. Потом я выложу своего крокодила. Наверное уж завтра.
А пока выложу мой вариант первой задачи, для ознакомления, что можно и так решить.
Python
1
2
3
4
5
6
7
8
L = [5, -7, 3, 0, 1, 3, -7, 0, -2]
k = 0
for i in range(len(L)):
    if L[i-k] >= 0:
        L.append(L[i-k])
        del L[i-k]
        k += 1
print(L)
Добавлено через 1 минуту
В общем до завтра, завтра займемся второй задачей.
0
 Аватар для Lucky64
20 / 9 / 0
Регистрация: 16.01.2019
Сообщений: 288
20.02.2019, 17:08  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
А пока выложу мой вариант первой задачи, для ознакомления, что можно и так решить.
были мысли у меня сегодня попробовать решить через рендж, но я их быстро оставил, так же хотел через енумирейт, но решил сосредоточиться на формуле данной Ресистансе, ппц такая простая задача, и столько времени отняла, дак еще в итоге сам не решил по большому счету((
Цитата Сообщение от Viktorrus Посмотреть сообщение
В общем до завтра, завтра займемся второй задачей.
До завтра Виктор, как всегда спасибо что терпите мою тугодумность и помогаете!
Resistanse,
и вам огромное спасибо за помощь!!
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
21.02.2019, 02:45
Lucky64, Пока не перешли ко второй задаче, поясню свой код к первой задаче. Там есть тонкость. А заодно поговорим о том как работает цикл for.
Python
1
2
3
4
5
6
7
8
9
L = [5, -7, 3, 0, 1, 3, -7, 0, -2]
k = 0                      # переменная, корректирующая изменения смещений чисел в последовательности, 
                           # после переноса положительного числа в конец списка.
for i in range(len(L)):
    if L[i-k] >= 0:
        L.append(L[i-k])
        del L[i-k]
        k += 1
print(L)
Сложности с циклом for могут появится, когда у нас в ходе итераций изменяется количество элементов в итерируемом объекте, или изменяется количество элементов в этом объекте и их смещения.
По этой причине переменная цикла может или не доходить до конца итерируемого объекта или выходить за пределы диапазона итерируемого объекта. А к тому же, если это последовательность, то меняются смещения элементов последовательности в ходе итераций.
Что касается диапазона цикла, у цикла while такой проблемы нет, так как он при каждом шаге вновь пересчитывает условие для входа в итерацию.
В данной задаче вопрос диапазона не возникает, так как размер последовательности не изменяется , а изменяются только смещения элементов в последовательности следующих за переносимым числом. Для того, что бы решить эту проблему, я и использую переменную к, что бы корректировать смещения после каждого переноса положительного числа. Почему я не использую в данном случае цикл while? Просто я фанат цикла for , да и работает он быстрее, чем цикл while, который на каждом шаге перепроверяет условие.
Lucky64, теперь заодно напомню, особенность работы цикла for.

Инструкция for осуществляет проход по элементам итерируемого объекта (или итератора), на каждом проходе осуществляя операцию извлечения элемента из итерируемого объекта по индексу, который функция for автоматически подставляет начиная с 0 до N -1 (N количество элементов в итерируемом объекте). Когда доходит до последнего элемента, то на следующем проходе, не получая элемента, возвращается сообщение об ошибке и функция for выходит из цикла, переходя к следующей инструкции в программе, следующей за циклом for.

Часть, идущая после in, будучи вычисленной единожды, должна предоставить объект, поддерживающий итерирование. Для данного объекта создаётся итератор. Далее переменной, предшествующей in, поочерёдно присваиваются значения [элементов], предоставляемые итератором и для каждого из них выполняется тело инструкции.

Для лучшего понимания инструкции for дополню.
Инструкция for при работе использует протокол итераций, зашитый внутри цикла for. По этому протоколу:
1. Если цикл for используется для итерируемого объекта X, то сначала из него создается итератор (с помощью встроенной функции iter(X) ).
2. Затем инструкция for при каждом проходе цикла использует метод итератора __next__, получая последовательно по одному объекту от итератора.
3. Если объект, к которому применяется цикл for, уже является итератором (например, объект файл), и потому уже имеет метод __next__, то шаг 1 протокола пропускается. (Обращаю внимание. Если итерируемый объект не является итератором, то не нужно использовать функцию iter(), так как цикл for сам преобразует итерируемый объект в итератор).

Циклы for и другие итерационные механизмы в языке Python используют такой итерационный протокол, если он поддерживается, для обхода последовательностей или значений генераторов. Если протокол не поддерживается, инструкция for терпит неудачу и возвращается к операции индексирования последовательности.

Внимание
Если тело цикла несложное, то накладные расходы на поддержание цикла интерпретатором могут оказаться существенными. В подобных случаях рекомендуется использовать генератор, составление списка, либо функцию map().

else
Когда элементы исчерпаны (например, исчерпана последовательность, либо итератор возбудил исключение StopIteration
) выполняется часть инструкции, идущая после else (если эта часть присутствует) и цикл завершается.

break
Инструкция break позволяет прервать цикл. При этом часть после else не будет выполнена.

continue
Инструкция continue позволяет «проскочить» исполнение следующего после неё кода и продолжить проход по следующим элементам.

На заметку
Переменной, предшествующей in, на каждом из этапов цикла присваивается новое значение. Это означает, что любые назначения данной переменной, будь то произведённые до начала цикла или внутри него, будут потеряны в ходе последующего витка.

По завершению цикла переменная, предшествующая in, остаётся доступной с последним значением.

Однако, если последовательность пуста, то переменная не будет инициализирована вовсе, а значит попытка обратиться к ней возбудит исключение NameError.

Внимание
Изменение последовательности в ходе итерирования может приводить к ошибкам и пропускам элементов. (Именно поэтому, если есть такая возможность, в этом случае необходимо корректировать смещение элементов, и в случае необходимости перезапустить цикл for, для этого помещая его внутрь цикла while.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
21.02.2019, 15:22
Lucky64, Возможно я зря дал вторую задачу, она оказалась достаточно сложной, чего я сразу не понял.
В описании цикла for говорится, что если в ходе итераций происходит изменение объекта, по которому производится итерация, то возникают сложности. Изменение итерируемого объекта в ходе итераций происходит и в первой задаче, поэтому я там ввел корректирующую переменную k. Но там нет вложенных циклов. Во второй же задаче проблему изменения итерируемого объекта усложняет наличие вложенных циклов.
И так я выкладываю решение второй задачи (довольно громоздкое) и мы его обсудим. Может кто то предложет более простое решение. Но в теме пока никто не предложил решения, кроме одного, которое делает совсем не то, что нужно.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
M = [[1,2,3,2,1,2,3,2], 
     [4,5,6,5,2,5,6,1], 
     [7,8,9,8,3,8,9,7]]
def printMatrix ( matrix ):        # функция печати матрицы
   for row in matrix: 
      for x in row: 
          print ( "{:4d}".format(x), end = "" ) 
      print ()
def equCol(M, col1, col2):         # функция определяющая равенство столбцов. с1, с2 - индексы смещения столбцов
    for i in range(len(M)):
        if M[i][col1] != M[i][col2]:
            return False
    return True
def delCol(M, col):                # функция удаления столбца. col - индекс смещения столбца
    for i in range(len(M)):
        del M[i][col]
 
i = 0                         # текущий индекс первого столбца
k = 0                         # корректировка смещения (количество удаленных столбцов)
while i < len(M[0]):          # пробегаем по элементам первой строки
    for j in range(i+1, len(M[0][i+1:])+k):  # пробегаем по элементам находящимся после i, ищя содинаковые
        if M[0][i] == M[0][j]: # если элементы в первой строке равны, то проверяем равенство столбцов
            #c1, c2 = i, j
            if equCol(M, i, j): # если столбцы равны, то второй столбец удаляем. 
                delCol(M, j)
                k += 1
                break     # после удаления столбца переходим к циклу while, оставляя i тем же 
                          # и перезапускаем цикл for (запускаем новый, с новым итерируемым объектом
    else:
        i += 1      # если после отработки цикла for, больше столбцов одинаковых со столбцом по индексу i 
                    # переходим к i = i+1
printMatrix(M)
Самое сложное в этом коде, это строка
Python
1
    for j in range(i+1, len(M[0][i+1:])+k):
Я потратил много времени, отлаживая отладчиком в пошаговом режиме, пока подобрал необходимые параметры для функции range(), Это место самое сложное в коде для понимания.

Добавлено через 18 минут
Lucky64, Ты спрашивай, что не понятно. Здесь обсудим.
А код, я наверное все таки выложу в тему, может там кто то даст более простое решение.
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
21.02.2019, 15:30
"Изподвыподверта"
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def get_cols(mas):
   cols =[list() for _ in range(len(mas[0]))]
 
   for i in range(len(mas[0])):
       for j in range(len(mas)):
           cols[i].append(mas[j][i])
 
   return cols
 
mas = [[1,2,3,2,1,2,3,2],
       [4,5,6,5,2,5,6,1],
       [7,8,9,8,3,8,9,7]]
 
cols = get_cols(mas)
 
tmp = list()
for col in cols:
   if col not in tmp:
       tmp.append(col)
cols = tmp
 
lst = [[] for _ in range(len(cols[0]))]
 
for i in range(len(cols[0])):
   for j in range(len(cols)):
       lst[i].append(cols[j][i])
 
for row in lst:
   print(row)
 
[1, 2, 3, 1, 2]
[4, 5, 6, 2, 1]
[7, 8, 9, 3, 7]
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
21.02.2019, 15:55
Lucky64, Вот для тебя еще одна задача, не сложная.
Строка: Найти первое вхождение подстрок ‘not’ и ‘bad’

Рыжий Лис использовал для ее решения регулярные выражения, а ты реши ее базовыми методами. Регулярные выражения достаточно сложный язык в языке. Когда нибудь его изучишь, изучив основы питона.
Используй тот же метод str.find(). А дальше как сам придумаешь.

Добавлено через 52 секунды
ioprst, Спасибо за более простое решение.

Добавлено через 11 минут
ioprst, Хорошее решение, то есть столбцы не удаляете, а создаете новый массив добавляя в него только не повторяющиеся столбцы. На вскидку, глубоко не вникая, я так понял алгоритм кода. Может ошибся.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.02.2019, 15:55
Помогаю со студенческими работами здесь

Ищу доброго человека, который прособеседует по java
Ищу доброго человека чтобы поспрашивал по java, дабы проверить знания. Мечу на позицию java junior. Хочется проверить свои знания перед...

Кр по питону ?
У меня третий вариант и я не могу решить как это делать

Лабораторная по питону
Есть 2 емкости : кубическая с ребром Ф, цилиндрическая с высотой Н и радиусом R. Определить поместится ли жидкость объемом М в первую...

Задание по питону
Дана последовательность случайных чисел длиной n. Выбросить из ряда те элементы, значение которых равно a и b. Вывести полученное, а затем...

Питону не понравилось
import threading, time flag = True def proc(n): while flag==True: print(n) time.sleep(0.3) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
320
Закрытая тема Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru