Форум сайта python.su
0
Всем здравствуйте!
Помогите, пож-та, разобраться почему возникает ошибка.
Пытаюсь решить след. задачу:
Напишите программу, которая принимает на вход список чисел в одной строке и выводит на экран в одну строку значения, которые повторяются в нём более одного раза.
Для решения задачи может пригодиться метод sort списка.
Выводимые числа не должны повторяться, порядок их вывода может быть произвольным.
Вот мое решение:
a =
a.sort()
dlina = len(a) - 1
i = 0
while i < dlina:
if a == a:
print(a, end=“ ”)
i += 1
while a == a and i < dlina:
i += 1
if a != a:
i += 1
При проверке возникает ошибка:
while a == a and i < dlina:
IndexError: list index out of range
Подскажите пож-та, почему возникает эта ошибка? Ведь условие i < dlina в цикле while уже не допускает работы программы с номером элемента списка, выходящим за пределы его длины (начинающейся с нуля)
Офлайн
294
ничего не понятно. нахрена вы а с а сравниваете? while a == a?? какой в этом смысл?
[code python][/code]
Офлайн
0
a =
a.sort()
dlina = len(a) - 1
i = 0
while i < dlina:
if a == a:
print(a, end=“ ”)
i += 1
while a == a and i < dlina:
i += 1
if a != a:
i += 1
Офлайн
0
Почему-то индексы исчезают…
прикрепил принт-скрин решения…
а вопрос тот же…
Прикреплённый файлы:
04.06.18.png (6,6 KБ)
Офлайн
0
a = [int(i) for i in input().split()]
a.sort()
dlina = len(a) - 1
i = 0
while i < dlina:
if a[i] == a[i + 1]:
print(a[i], end=" ")
i += 1
while a[i] == a[i + 1] and i < dlina:
i += 1
if a[i] != a[i + 1]:
i += 1
Офлайн
294
предположим что у вас всего два числа:
dlina = len(a) - 1 = 1 i = 0 while i < 1: if a[0] == a[1]: # тут все отработает i += 1 = 1 while a[1] == a[2] and i < dlina: # но a[2] у нас нету так как всего два элементв в списке, вот и получаем ошибку.
Franciscoпотому что пайтон проверяет устовия по порядку, сначала берет значение индексов списка, а потом если True то проверяет второе устовие i < dlina
Подскажите пож-та, почему возникает эта ошибка? Ведь условие i < dlina в цикле while уже не допускает работы программы с номером элемента списка, выходящим за пределы его длины (начинающейся с нуля)
while i < dlina and a[i] == a[i + 1] :
[code python][/code]
Отредактировано PEHDOM (Июнь 4, 2018 08:53:57)
Офлайн
0
PEHDOM
предположим что у вас всего два числа:
dlina = len(a) - 1 = 1
i = 0
while i < 1:
if a == a: # тут все отработает
i += 1 = 1
while a == a and i < dlina: # но a у нас нету так как всего два элементв в списке, вот и получаем ошибку.
Francisco
Подскажите пож-та, почему возникает эта ошибка? Ведь условие i < dlina в цикле while уже не допускает работы программы с номером элемента списка, выходящим за пределы его длины (начинающейся с нуля)
потому что пайтон проверяет устовия по порядку, сначала берет значение индексов списка, а потом если True то проверяет второе устовие i < dlina
исправляется банально, нужо поменять условия местами:
while i < dlina and a == a :
в таком случае если первое условие i < dlina будет False пайтон не будет проверять второе и прервет цикл.
a = [int(i) for i in input().split()] a.sort() dlina = len(a) - 1 i = 0 while i < dlina: if a[i] == a[i + 1]: print(a[i], end=" ") i += 1 while i < dlina and a[i] == a[i + 1]: i += 1 if a[i] != a[i + 1]: i += 1
Офлайн
294
Franciscoдолжно, обратите внимение на отсуп, у вас
Но все равно возникает ошибка уже в строке if a != a:. А в этой строке такой ошибки возникать не должно, т.к. первый цикл “while i < dlina:” не должен ее допустить.
if a[i] != a[i + 1]:
[code python][/code]
Отредактировано PEHDOM (Июнь 4, 2018 23:07:01)
Офлайн
0
PEHDOM
находиться вне цикла while i < dlina… Соотвевенно после прерывания while i < dlina… интерпретатор выполняет слудующую комманду if a(i) !=…. Условеи i < dlinа прерывает только тот цикл в котором оно вызываеться, а не все циклы.
a = [int(i) for i in input().split()] a.sort() dlina = len(a) - 1 i = 0 while i < dlina: if a[i] == a[i + 1]: print(a[i], end=" ") i += 1 while i < dlina and a[i] == a[i + 1]: i += 1 if a[i] != a[i + 1]: i += 1
Офлайн
294
Franciscoа вы думаете оно постоянно мониторит состояние i и как тольоко так сразу? Условие i < dlina проверяеться только в начале каждой итерации цикла, а не на каждый чих.
Так вот в том то и дело, что оба условия if имеют одинаковый отступ и находятся в одном и том же цикле while (5-ая строка)
[code python][/code]
Отредактировано PEHDOM (Июнь 5, 2018 07:47:03)
Офлайн