Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2017, 20:09   #1
Young_programmer
Пользователь
 
Регистрация: 25.01.2017
Сообщений: 27
По умолчанию Списки в языке Python. Помогите исправить!

Задание:
Напишите программу, которая принимает на вход список чисел в одной строке и выводит на экран в одну строку значения, которые повторяются в нём более одного раза.

Для решения задачи может пригодиться метод sort списка.

Выводимые числа не должны повторяться, порядок их вывода может быть произвольным.

Код:
Код:
a=[int(j) for j in input().split()]
for j in range(len(a)):
    for i in range(len(a)):
        if a[i]==a[j]:
            print(i, end=' ')
            i+=1

Программа работает, но неправильно, помогите найти ошибку в логике!

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.
Особенно в Питоне, там ж отступы не просто для красоты.

Последний раз редактировалось Alex11223; 30.01.2017 в 20:33.
Young_programmer вне форума Ответить с цитированием
Старый 30.01.2017, 20:33   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

"неправильно" это как?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 30.01.2017, 20:57   #3
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Код:
a = [int(i) for i in input().split()]
a.sort()
j = False
for i in range(1, len(a)):
    if a[i-1] == a[i]:
        j = True
    else:
        if j:
            print(a[i-1], end=' ')
        j = False
if j:
    print(a[len(a)-1])
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 30.01.2017, 21:04   #4
Manta4ka
Пользователь
 
Регистрация: 23.08.2016
Сообщений: 10
По умолчанию

А если так?
Код:
a=[int(j) for j in input().split()]
duble=set()
for j in a:
    if a.count(j)>1:
        duble.add(j)
print(" ".join(str(i) for i in duble))
Manta4ka вне форума Ответить с цитированием
Старый 30.01.2017, 21:41   #5
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Можно и в 2е строчки написать.
Код:
a = [int(i) for i in input().split()]
print(' '.join(str(i) for i in {i for i in a if a.count(i)>1}))
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 30.01.2017, 21:43   #6
Young_programmer
Пользователь
 
Регистрация: 25.01.2017
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
"неправильно" это как?
А вот так:
На входе: 4 8 0 3 4 2 0 3
На моём выходе: 0 4 1 2 6 3 7 0 4 5 2 6 3 7
Правильный выход: 0 3 4

Цитата:
Сообщение от Plague Посмотреть сообщение
Код:
a = [int(i) for i in input().split()]
a.sort()
j = False
for i in range(1, len(a)):
    if a[i-1] == a[i]:
        j = True
    else:
        if j:
            print(a[i-1], end=' ')
        j = False
if j:
    print(a[len(a)-1])
Скажите, почему в строке "for i in range(1, len(a)):" берём в скобках от 1, почему просто len(a) не подойдёт?

Последний раз редактировалось Alex11223; 31.01.2017 в 20:12.
Young_programmer вне форума Ответить с цитированием
Старый 30.01.2017, 21:53   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Повторы потому что вы же по второму разу одно и тоже проверяете "с другой стороны" + сравнение с самим собой.

В общем автор задачи не просто так посоветовал отсортировать. Тогда не понадобится перебирать весь список для каждого элемента.
Цитата:
Сообщение от Young_programmer Посмотреть сообщение
берём в скобках от 1, почему просто len(a) не подойдёт?
Потому что в цикле автор сравнивает с предыдущим элементом.
(если не указывать начальное число, то range будет от 0 https://docs.python.org/3/library/stdtypes.html#range)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 30.01.2017 в 21:59.
Alex11223 вне форума Ответить с цитированием
Старый 30.01.2017, 21:56   #8
Manta4ka
Пользователь
 
Регистрация: 23.08.2016
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Young_programmer Посмотреть сообщение
А вот так:
На входе: 4 8 0 3 4 2 0 3
На моём выходе: 0 4 1 2 6 3 7 0 4 5 2 6 3 7
Правильный выход: 0 3 4
строкой print(i, end=' ') Вы выводите индексы чисел списка, а не сами числа, поэтому у Вас на выходе есть числа,к оторых вообще нет на входе.
Manta4ka вне форума Ответить с цитированием
Старый 31.01.2017, 19:11   #9
Young_programmer
Пользователь
 
Регистрация: 25.01.2017
Сообщений: 27
По умолчанию

Код:
a=[int(j) for j in input().split()]
a.sort()
for j in range(len(a)):
    for i in range(len(a)):
        if a[i]==a[j]:
            print(a[i], end=' ')
Вход: 4 8 0 3 4 2 0 3
Мой выход: 0 0 0 0 2 3 3 3 3 4 4 4 4 8
Правильный выход: 0 3 4

Почему возникают эти повторы и как сделать так, чтобы 8 и 2 не выводились?

Последний раз редактировалось Alex11223; 31.01.2017 в 20:11.
Young_programmer вне форума Ответить с цитированием
Старый 31.01.2017, 20:11   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Потому же, почему выше написано.

Зачем вы после сортировки перебираете весь список на каждом элементе? Надо просто немного подумать.

И используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.
Особенно для кода на Питоне, там ж отступы не просто для красоты.

Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить ошибку в задаче на динамические переменные списки Klubnic Помощь студентам 11 07.05.2016 00:54
Задача на языке Python Douglas Python 2 07.06.2011 19:59
Помогите исправить косяк в задаче на динамические переменные списки Taisja Помощь студентам 2 31.05.2008 21:49