def inp(s):
while True:
v = int(input(s))
if 0 < v <= 200: return v
print('Ошибочное значение. Повторите ввод.')
container_list = [inp('Вес контейнера: ') for _ in range(inp('Кол-во контейнеров: '))] + [-1]
new_weight = inp('Вес нового контейнера: ')
left, right = 0, len(container_list) - 1
while left < right:
middle = (left + right) // 2
if container_list[middle] >= new_weight: left = middle + 1
else: right = middle - 1
left += container_list[left] >= new_weight
print(left + 1) # если нумерация с нуля, + 1 не нужно
Один и тот же контроль ввода в трёх местах кода - выносим в отдельную функцию.
Чтобы не проверять конец массива, добавляем элемент с отрицательным весом.
Веса отсортированы - бинарный поиск, а не последовательный.
ПапаГений (87571)
3 месяца назад
А самое главное - сейчас автор выберет чатгптшный ответ лучшим, причём, совершенно сознательно. Такие ученики с ботами друг с дружкой на одной волне, это будущие попугаи-менеджеры, перекидывающие друг другу проблемы, решать которые ни один из них по существу не собирается, т.к. всё равно ни бельмеса в них не понимает.
Напишите программу, которая получает на вход невозрастающую последовательность натуральных чисел. Они означают массу каждого контейнера в ряду. После этого вводится число X — масса нового контейнера. Программа выводит номер, под которым будет лежать новый контейнер. Если в ряду есть контейнеры с массой, как у нового, то его нужно положить после них.
Обеспечьте контроль ввода: все числа не превышают 200.
мой код:
number = int(input('Кол-во контейнеров: '))
count = 0
container_list = []
for _ in range(number):
weight = int(input('Введите вес контейнера: '))
if weight > 200:
print('Ошибка. Значение не должно превышать 200')
weight = int(input('Введите вес контейнера: '))
else:
container_list.append(weight)
new_weight = int(input('\nВведите вес нового контейнера: '))
if new_weight > 200:
print('Ошибка. Значение не должно превышать 200')
new_weight = int(input('\nВведите вес нового контейнера: '))
while count < len(container_list) and container_list[count] >= new_weight:
count += 1
print('\nНомер, куда встанет контейнер:', count + 1)
ВЫВОД В КОНСОЛЬ:
Кол-во контейнеров: 4
Введите вес контейнера: 1234
Ошибка. Значение не должно привышать 200
Введите вес контейнера: 200
Введите вес контейнера: 466456
Ошибка. Значение не должно привышать 200
Введите вес контейнера: 190
Введите вес контейнера: 180
Введите вес контейнера: 170
Введите вес нового контейнера: 195
Номер, куда встанет контейнер: 1
По задачи 200 тоже должен учитывать, но он его не учитывает, 195 должно встать на второе место. Не могу понять в чем проблема, помогите разобраться, пожалуйста