Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Python] наибольший и наименьший элемент


Автор: Paranorma 24.1.2007, 01:09
Как определить наибольший и наименьший элемент в списке??? Снова с помощью while, никаких for использовать нельзя. Должны быть переменные min и max, которые соответственно будут хранить значения минимального и максимального элемента списка. Понятно, что все элементы должны сравниваться друг с другом, но вот как быть с while до меня не доходит... smile 


Код

a = [45, 17, 28, 34, 100]
i = 0
while i < len(a):
    if a[i] < a[i+1]:
       Предполагаю, что начало будет таким, но не уверенна. HELP!!! 

Автор: V.A.KeRneL 24.1.2007, 02:55
Paranorma, задача становится интересной только от того, что это будет моя первая программа на Питоне, которого я вааще не знаю!.. smile

Код

a = [45, 17, 28, 34, 100]  # наш массичик :)

i = 0          # индекс, счётчик
nmin = i       # номер минимального элемента
min = a[nmin]  # собственно минимальный элемент
nmax = i       # номер максимального элемента
max = a[nmax]  # собственно максимальный элемент

while (i < len(a)): 
    if (a[i] < min): 
        nmin = i
        min = a[nmin]
    if (a[i] > max): 
        nmax = i
        max = a[nmax]
    i += 1

print "min = a[", nmin, "] = ", min
print "max = a[", nmax, "] = ", max


Никаких интерпретаторов для проверки у меня нету, так что пиши, если какие ошибки сделал... smile

Автор: pythonwin 24.1.2007, 10:03
V.A.KeRneL, работает! smile
++1
с питоном тебя smile

Автор: albertn 24.1.2007, 12:11
V.A.KeRneL, молодец, только у тебя в коде избыточность. Можно было-бы обойтись без переменных min и max

Добавлено @ 12:14 
К тому-же min и max встроенные функции smile

Автор: Paranorma 24.1.2007, 13:41
V.A.KeRneL, с дебютом тебя! И огромное спасибо!

Я ее поправила вот так:

Код

a = [45, 17, 28, 34, 100, 25, 900, 18]
i = 0          
min = a[i]  
max = a[i]  
while i < len(a): 
    if a[i] < min: 
        min = i
        min = a[i]
    if a[i] > max: 
        max = i
        max = a[i]
    i = i + 1
print min, max

Автор: pythonwin 24.1.2007, 13:56
Paranorma, молодец, что разобралась smile

Автор: Paranorma 24.1.2007, 17:34
Упс... ошибочка нашлась!

Код

a = [45, 17, 28, 34, 100, 25, 900, 18]
i = 0          
min = a[i]  
max = a[i]  
while i < len(a): 
    if a[i] < min: 
        min = a[i]
    if a[i] > max: 
        max = a[i]
    i = i + 1
print min, max


Так правильнее.

Автор: V.A.KeRneL 24.1.2007, 17:44
pythonwinParanorma, спасибо за радушный приём! smile

pythonwin, ты добавил «+» не только к моей репе, но и к моему желанию изучить Python. 
Я неплохо знаю Ruby, и это мой любимый язык программирования. Но у Питона перед Рубином есть одно несомненное преимущество, которое приходится признавать, — это значительно более развитое русскоязычное сообщество.

Цитата(albertn @  24.1.2007, 12:11 Найти цитируемый пост)

V.A.KeRneL, молодец, только у тебя в коде избыточность. Можно было-бы обойтись без переменных min и max

На этом я особо ничего не потерял, кроме заведения [для удобства] двух дополнительных переменных (min и max), т.к., всё равно, насколько я понимаю, индексация по массиву (списку) в Питоне — это такой же метод. И пришлось бы вместо ``(a[i] < min)'' писать ``(a[i] < a[nmin])''. Поэтому, ещё вопрос, проиграл ли я на этом какие-то копейки или выиграл...

Цитата(albertn @  24.1.2007, 12:11 Найти цитируемый пост)

Добавлено @ 12:14 
К тому-же min и max встроенные функции smile

Это я тоже уже знаю. Но ведь Paranorma'е эти программульки нужны для инста, и её препод требует самостоятельной реализации алгоритмов. Даже больше, чтобы они были написаны конкретным образом, а именно — через цикл while.
А если допустить использование продвинутых стандартных методов Пайтона, то можно было и в http://forum.vingrad.ru/topic-133023/0.html#entry1008466 задаче использовать метод reverse()
Код

>>> a = [1, 2, 3, 4, 5]
>>> a
[1, 2, 3, 4, 5]
>>> a.reverse()
>>> a
[5, 4, 3, 2, 1]


==========================================================================================
smile Paranorma, один важный совет из «Правил форума "Центр помощи"»: 
«Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или флажком при ответе»
Сделай это, пожалуйста, для всех своих тем, которые уже решены, и поступай так же в дальнейшем.
==========================================================================================

Ах да, совсем забыл сказать, я сегодня установил интерпретатор Питона, и теперь смогу полноценно помогать новичкам по вопросам, с ним связанным! smile

Автор: Paranorma 25.1.2007, 18:17
Код

a = [45, 17, 100, 28, 34, 100, 90, 82, 1000, 1000, 18, 1000]
i = 0                
min = a[i]         
max = a[i]  
while i < len(a): 
    if a[i] < min:
        nmin = i
        min = a[nmin]
    if a[i] > max: 
        nmax = i
        max = a[nmax]
    if i > nmax:
        nmax = i
    i = i + 1
print "a[", nmin, "] = ", min
print "a[", nmax, "] = ", max


Сегодня я вот что изобразила. Здесь трижды повторяется число 1000 и программка показывает индекс минимального и последнего максимального элемента списка.

Автор: V.A.KeRneL 25.1.2007, 19:38
Paranorma, мне кааца, что твоя программка содержит ашипки...
Мне интересно, ты не забыла проверить финальную версию, прежде чем сюда постить?
Код

>>> a = [45, 17, 100, 28, 34, 100, 90, 82, 1000, 1000, 18, 1000]
>>> i = 0
>>> min = a[i]
>>> max = a[i]
>>> while i < len(a):
...     if a[i] < min:
...         nmin = i
...         min = a[nmin]
...     if a[i] > max:
...         nmax = i
...         max = a[nmax]
...     if i > nmax:
...         nmax = i
...     i = i + 1
...
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
NameError: name 'nmax' is not defined
>>>

(В качестве ДЗ smile : Попробуй разобраться сама, в чём ошибка, и исправить её.)

Если хочется выявить первое и последнее вхождения максимальный и минимальный элементов в список, то нет ничего проще: 
Код

#!/Где обычно лежит Питон? (Для юниксов.)
# -*- coding: windows-1251 -*-

# наш массичик :)
a = [45, 17, 100, 17, 34, 100, 90, 82, 1000, 1000, 18, 1000]

i = 0          # индекс, счётчик
first_min = 0  # номер первого минимального элемента
last_min  = 0  # номер последнего минимального элемента
min = a[0]     # собственно минимальный элемент
first_max = 0  # номер первого максимального элемента
last_max  = 0  # номер последнего максимального элемента
max = a[0]     # собственно максимальный элемент

while (i < len(a)): 
    if (a[i] <= min): 
        if (a[i] < min): 
            first_min = i
        last_min = i
        min = a[i]
        
    if (a[i] >= max): 
        if (a[i] > max): 
            first_max = i
        last_max = i
        max = a[i]
    i += 1

print "first_min = ", first_min  #=> 1
print "last_min  = ", last_min   #=> 3
print "min = ", min              #=> 17

print "first_max = ", first_max  #=> 8
print "last_max  = ", last_max   #=> 11
print "max = ", max              #=> 1000


Удачи в освоении основ программирования! smile

Автор: kectart 13.10.2022, 00:16
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)