0 引言

你是不是还在为“当我们排成一个队列需要每隔几人找出一个人来”而烦恼,在生活中我们想要解决这类问题的话,过程是比较繁琐的,那如果我们使用Python程序直接找出需要的人的编号,是不是事半功倍呢?

1 问题

30个人在一条船上,超载,需要15人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从1开始,数到9的人下船。如此循环,直到船上仅剩15人为止,问都有哪些编号的人下船了呢?

2 方法

此题的实际意义是指当船上的人大于15时就让第九个人下船,直到船上只有15个人即可。因此我们可以先将船上的30人存入列表people中,然后定义一个空白列表down。使用while循环结构,当people列表的元素大于15时即len(people)>15,将列表中的第8个元素people[8]添加到dowm列表中,然后将前8个people[:8]放在people[9:]后面(此处使用切片),继续寻找下一个第9人,最后返回列表down。

3 实验结果与讨论

通过实验、实践等证明提出的方法是有效的,是能够解决开头提出的问题。

代码清单 1

def f():

   people = list(range(1,31))

   down = []

   while len(people)>15:

       down.append(people[8])

       people = people[9:] + people[:8]

   return down

print(f())

4 结语

针对下船问题,提出类似环形链表构造数据的方法,通过实际大量实验,证明该方法是有效的,在实验中,我们常常会思考为什么会需要解决这个问题,实际意义是什么,但其实在学习的过程中,学到的不仅仅是这个代码,更多学到的是怎么去解决问题,也是实际工作素养的提升和有效的锻炼。因此,在学习过程中,更应该注重思考。