Найдите, при какой итерации функция получила максимальное значение?

Представьте, что у меня есть следующий цикл while. пока i достигает 6, он генерирует случайные числа от -100 до i. Я хочу найти максимальное число из 5 итераций. Мой максимальный номер по умолчанию -99. на каждой итерации он сравнивает сгенерированное значение с -99. если он больше -99, я заменяю его, в противном случае я сохраняю -99 как максимальное число. С помощью следующего фрагмента кода я могу его найти. Но я также хочу найти, на какой итерации он получил максимальное значение:

import random
m=-99
i=1
k=0
while i<6:
    a = random.randint(-100,i)
    b = random.randint(-100,i+1)
    print("a: ", a)
    print("b: ", b)
    if a < b & b>m:
        m=b
        print('1st', i)
    elif a < b & b<m:
        m=m
        print('2nd', i)
    elif a > b & a>m:
        m=a
        print('3rd', i)
    elif a > b & a<m:
        m=m
        print('4th', i)
    print('m: ', m)
    print('--------')
    i = i+1


a:  -77
b:  -34
1st 1
m:  -34
--------
a:  -44
b:  -45
4th 2
m:  -34
--------
a:  -24
b:  2
1st 3
m:  2
--------
a:  -18
b:  -43
4th 4
m:  2
--------
a:  -80
b:  -37
2nd 5
m:  2
--------

Как видно из вывода, из 5 итераций максимальное число равно «2». который я получил в 3-й итерации Как я могу его найти? Я вижу это вручную, но как я могу добавить строку кодов, которая также дает мне количество итераций, которое я получаю «2», что является максимальным числом.

Спасибо


person Sascha    schedule 10.11.2019    source источник


Ответы (2)


Вы можете определить переменную pos, которая описывает первое место, где увеличилось максимальное значение или значение переменной m. Таким образом, ваш код, вероятно, будет примерно таким:

import random
m=-99
i=1
pos=-1
k=0
while i<6:
    a = random.randint(-100,i)
    b = random.randint(-100,i+1)
    print("a: ", a)
    print("b: ", b)
    if a < b & b>m:
        pos=i
        m=b
        print('1st', i)
    elif a < b & b<m:
        m=m
        print('2nd', i)
    elif a > b & a>m:
        pos=i
        m=a
        print('3rd', i)
    elif a > b & a<m:
        m=m
        print('4th', i)
    print('m: ', m)
    print('--------')
    i = i+1
print(pos)
person Nvidip    schedule 10.11.2019
comment
почему вы написали pos=i только в первом и четвертом условии? - person Sascha; 10.11.2019
comment
Потому что только в этих условиях изменяется максимальное значение. Если максимальное значение не меняется в ходе итерации, это означает, что текущее найденное значение равно или меньше максимального на данный момент. поэтому нам не нужно обновлять pos в этих условиях. - person Nvidip; 10.11.2019
comment
понятно. Спасибо, я понял! - person Sascha; 10.11.2019

У вас может быть переменная max_iter, чтобы отслеживать, какая итерация получила максимальное значение. Он обновляется каждый раз, когда значение m обновляется, чтобы иметь текущую итерацию.

import random
m=-99
max_iter=0
i=1
k=0
while i<6:
    a = random.randint(-100,i)
    b = random.randint(-100,i+1)
    print("a: ", a)
    print("b: ", b)
    if a < b & b>m:
        m=b
        max_iter=i
        print('1st', i)
    elif a < b & b<m:
        m=m
        print('2nd', i)
    elif a > b & a>m:
        m=a
        max_iter=a
        print('3rd', i)
    elif a > b & a<m:
        m=m
        print('4th', i)
    print('m: ', m)
    print('--------')
    i = i+1
print(max_iter)
person Pratik Gandhi    schedule 10.11.2019