как напечатать 3 числа, превышающие определенное число списка в python?

#python #conditional-statements

Вопрос:

Я написал следующий код, который запросит номер у пользователя и проверит номер в списке, если он больше, чем введенный пользователем, то он напечатает следующие 3 номера. Я просто не понимаю, как реализовать условие, чтобы оно выводило следующие 3 числа, а не все!

 def main():
    number_list = [630,1015,1415,1620,1720,2000]
    a=int(input("Enter the time (as an integer):"))
    for i in number_list:
        if(i>=a):
            print(i)

if __name__ == "__main__":
    main()
 

Комментарии:

1. Пожалуйста, обновите свой вопрос, указав пример ввода и ожидаемый результат.

2. осторожно, в python прописные / строчные буквы имеют значение. i это не то же самое, что I

3. @quamrana Введите время (в виде целого числа): 1000 Следующие автобусы отправляются: 1015 1415 1620 Введите время (в виде целого числа): 1800 Следующие автобусы отправляются: 2000 630 1015 Эти два ожидаемых результата

Ответ №1:

Я бы сначала нашел индекс первого значения, которое соответствует вашему условию (элемент больше или равен введенному значению).:

 user_input = int(input("Enter the time (as an integer):"))
desired_index = None
for index, val in enumerate(number_list):
    if val >= user_input:
        desired_index = index
        break
 

Затем вывести три значения, включая и после этой позиции:

     print(number_list[desired_index:desired_index   3])
 

Ответ №2:

Предполагая, что список отсортирован, вы можете использовать встроенный bisect модуль, чтобы найти позицию, в которой входной номер вписывается в список. Затем легко распечатать следующие три номера из списка (если их так много).:

 import bisect

number_list = [630, 1015, 1415, 1620, 1720, 2000]
a = int(input("Enter the time (as an integer):"))

index = bisect.bisect(number_list, a)
print(number_list[index:(index   3)])
 

Например, для ввода 1200 это печатает . [1415, 1620, 1720]

Комментарии:

1. Мне не разрешено импортировать какую-либо библиотеку для этой проблемы, только списки

2. В этом случае я бы сделал это так, как предложил пользователь 9596600.

Ответ №3:

Обновите свой код, чтобы он был:

 def main():
    number_list = [630,1015,1415,1620,1720,2000]
    a=int(input("Enter the time (as an integer):"))
    i=0
    for n in number_list:
        if(n>=a):
            print(n)
            i =1
            if i==3:break

if __name__ == "__main__":
    main()

 

Теперь запустите код и посмотрите результат..

 Enter the time (as an integer):1015
1015
1415
1620
>>> 
 

Если вы хотите убедиться, что number_list это отсортировано, используйте этот метод сортировки..

 number_list.sort()
 

Ответ №4:

Если список отсортирован, вам следует использовать двоичный поиск (например, разделить пополам), в противном случае вы можете распечатать первые 3 элемента отфильтрованного списка:

 print(*[n for n in number_list if n>a][:3])
 

для более простого подхода вы можете отслеживать, сколько номеров вы напечатали до сих пор, используя переменную, которую вы увеличиваете на единицу после печати номера, и использовать этот счетчик печати в условии, чтобы принять решение о печати:

 printed = 0                 # count of numbers printed so far
for n in number_list:
    if printed<3 and n>a:   # only print first 3 that are eligible
        print(n)
        printed  = 1        # track number of numbers printed