Нужно найти максимум в массиве до первого отрицательного числа. Не пойму, что не так
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]))
А что вам мешает сделать так?