Python

Помогите с задачей на пайтоне

 list=[] 
a=int(input('Количество элементов: '))
for i in range(a):
elem=input('Введи элемент ')
list.append(elem)
c=min(list)
d=max(list)
minn=list.index(c)
maxx=list.index(d)
list[minn]=d
list[maxx]=c
print(list)

1 практика. Пользователь вводит количество элементов списка, а потом сами элементы (элементы не должны повторяться). Элементы добавляются в конец списка.
Напиши программу, которая меняет местами минимальный и максимальный элемент этого списка. Программа выводит только полученный список.
Отправьте на проверку: 21, 65, 4, 8, 95, 43, 45

мой код работает немного неправильно
В вашем коде не учитывается, что элементы должны быть уникальными. Для решения этой задачи можно использовать следующий код:
 list = [] 
a = int(input('Количество элементов: '))
for i in range(a):
elem = int(input('Введи элемент: '))
if elem not in list: # проверяем, что элемент уникален
list.append(elem)
c = min(list)
d = max(list)
minn = list.index(c)
maxx = list.index(d)
list[minn]=d
list[maxx]=c
print(list)
Теперь программа будет проверять, что введенный элемент уникален и только после этого добавлять его в список. Проверим на примере:
 Количество элементов: 7 
Введи элемент: 21
Введи элемент: 65
Введи элемент: 4
Введи элемент: 8
Введи элемент: 95
Введи элемент: 43
Введи элемент: 45
[45, 65, 4, 8, 21, 43, 95]
Результат корректный. Как видно, программа поменяла местами минимальный (4) и максимальный (95) элементы списка.
Алексей Жуков
Алексей Жуков
14 273
Лучший ответ
Dimka Poletaev Судя по выводу, она там не только это поменяла местами.
Всё решается гораздо проще:
 n = int(input('Количество элементов: '))
r = range(n)
elems = list(dict.fromkeys(int(input('Введи элемент: ')) for _ in r))
imin = min(r, key = elems.__getitem__)
imax = max(r, key = elems.__getitem__)
elems[imin], elems[imax] = elems[imax], elems[imin]
print(*elems, sep = '\n')
Здесь 3 пробега по списку (не считая ввода), сложность алгоритма O(n log n).
У твоего же алгоритма сложность квадратичная и 4 пробега сверх того (min, max, index - каждый делает отдельный пробег).

Можно обойтись и двумя пробегами, чуть усложнив алгоритм:
 from functools import reduce
n = int(input('Количество элементов: '))
elems = list(dict.fromkeys(int(input('Введи элемент: ')) for _ in range(n)))
kf = elems.__getitem__
imin, imax = reduce(lambda t, i: (min(t[0], i, key = kf), max(t[1], i, key = kf)), range(1, n), (0, 0))
elems[imin], elems[imax] = elems[imax], elems[imin]
print(*elems)
А можно и одним:
 from functools import reduce
n = int(input('Количество элементов: '))

def minmaxd(tm, te):
imin, vmin, imax, vmax, d = tm
i, v = te
return (
i if vmin > v else imin,
v if vmin > v else vmin,
i if vmax < v else imax,
v if vmax < v else vmax,
d | { v: None }
)
es = (int(input('Введи элемент: ')) for _ in range(n))
first = next(es)
imin, _, imax, _, d = reduce(minmaxd, enumerate(es, 1), (0, first, 0, first, { first: None }))
elems = list(d)
elems[imin], elems[imax] = elems[imax], elems[imin]
print(*elems)

Использование вводимых чисел в качестве ключей словаря обеспечивает уникальность и сохраняет порядок ввода (Питон 3.7+ это гарантирует); а уже после отсева дубликатов переводим ключи в список.
Дальше находим индексы минимального и максимального элементов и меняем эти элементы местами. В последнем алгоритме поиск минимума и максимума делается в той же итерации, где ввод.
Dimka Poletaev
Dimka Poletaev
87 571