我写了下面的代码,它将向用户请求一个数字,并检查列表中的数字是否大于用户输入,然后它将打印接下来的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()
我首先找到满足您的第一个值指数条件(元素大于或等于输入值):
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])
假设列表已排序,您可以使用内置的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]
。
将代码更新为:
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()
如果列表是排序的,你应该使用二分搜索(例如bisect),否则你可以打印过滤列表的前3个元素:
print(*[n for n in number_list if n>a][:3])
对于更基本的方法,您可以使用一个变量来跟踪到目前为止打印了多少个数字,在打印一个数字后增加1,并在条件中使用该打印计数器来决定打印:
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