Нужно найти максимум в массиве до первого отрицательного числа. Не пойму, что не так

    from random import randint
    n=10
    a=[0]*n
    for i in range(n):
        a[i]=randint(-9, 9)
    print(a)
    otr = 0
    max = 0
    for i in range(n):
        if a[i] < 0:
            otr = a[i]
            break
        for i in range(1, n):
            if a[i] > max:
                max = a[i]
    print(max)
    print(otr)

Ответы (4 шт):

Автор решения: Сергей

Вы второй цикл неверно ограничили с обеих сторон. Вот он у вас полностью и крутился, а начинался позже. Потестируйте, у меня на десятке прогонов, вроде, нормально. При первом отрицательном максимумом считаю 0, как у вас сделано.

from random import randint
n=10
a=[0]*n
for i in range(n):
    a[i]=randint(-9, 9)
print(a)
otr = 0
max = 0
for i in range(n):
    if a[i] < 0:
        otr = a[i]
        break
    # такой range правильнее 
    for i in range(0, i+1):
        print ('i ',i)
        if a[i] > max:
            max = a[i]
print(max)
print(otr)


→ Ссылка
Автор решения: Namerek
from random import randint
from itertools import takewhile
n = 10
a = [randint(-9, 9) for _ in range(n)]
b = [*takewhile(lambda x: x >= 0, a)]
c = max(b or [None])

negative, *_ = a[len(b):] or [None]

print(f'{a = }')
print(f'{b = }')
print(f'{c = }')
print(f'{negative = }')

# a = [9, 7, 4, -1, 3, 2, -4, 5, -8, 3]
# b = [9, 7, 4]
# c = 9
# negative = -1


# a = [-8, 6, 4, -3, -1, 4, 8, 1, 0, -7]
# b = []
# c = None
# negative = -8

Материалы по теме:
takewhile
распаковка


для любителей однострочников и поборников питоничности

print(max([*takewhile(lambda x: x >= 0, [randint(-9, 9) for _ in range(10)])] or [None]))
→ Ссылка
Автор решения: Сергей

Пришло в голову, что лучше сделать ещё второй вариант. В первом варианте будет ошибка при всех положительных числах, кроме того сам вариант с двумя циклами, где переиспользуется i выглядит чрезмерно сложным. Добавил комментарии также.

from random import randint
n=10
# Так более "питонически" создавать заполненный список списковым включением
a=[randint(-9,9) for i in range(n)]
print(a)
# Лучше не использовать имя функции языка (max) в качестве переменной  
maximum = 0
# Не пограничный случай: первое число не отрицательное, но отрицательные есть 
if a[0]>=0 and min(a)<0:
    for i in range(n):
        if a[i]<0:
            maximum = max(a[:i])
            break
# Пограничный случай: отрицательных нет            
elif min(a)>=0:
    maximum = max(a)
# Пограничный случай с первым числом отрицательным не нужен, т.к. maximum = 0 сразу
print(maximum)
→ Ссылка
Автор решения: Максим
num = [randint(-9,9) for i in range(10)]
for i in num:
    if i < 0:
        ind = num.index(i)
        break
if ind == 0:
    print(0)
else:
    print(max(num[:ind]))

А что вам мешает сделать так?

→ Ссылка