#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