def yueshefu(): on_boat = [i+1 for i in range(30)] off_boat = [] while len(off_boat)<=15: for i in range(30): if ((i+1)%9 ==0) and (on_boat[i] not in off_boat): off_boat.append(on_boat[i]) print(off_boat) yueshefu()
各位帮看看存在什么问题?
-----------------------------------
自己来补充更新。上述代码是有问题的:“循环会一直无限进行下去”,修改代码如下:
def yueshefu():
on_boat = [i+1 for i in range(30)]
off_boat = []
while True:
for i in range(len(on_boat)):
if ((i+1)%9 ==0) :
off_boat.append(on_boat[i])
else:
if len(off_boat) < 15:
for i in on_boat:
if i in off_boat:
on_boat.remove(i)
continue
else:
break
print(off_boat)
yueshefu()
代码结果
F:\python3.11.2\python.exe F:\python3.11.2\test\yueshefu.py
[9, 18, 27, 10, 20, 30, 11, 22, 12, 24, 13, 26, 14, 29, 15]
仍然存在问题:没有理解题意,是需要循环进行数数的。继续修改如下
def yueshefu1():
on_boat = [i+1 for i in range(30)] *6
off_boat = []
gap = 0
for i in range(len(on_boat)):
if len(off_boat)<15:
gap += 1
if on_boat[i] not in off_boat:
if gap == 9:
off_boat.append(on_boat[i])
gap = 0
else:
gap -= 1
else:
break
print(off_boat)
yueshefu1()
结果如下:
F:\python3.11.2\python.exe F:\python3.11.2\test\yueshefu1.py
[9, 18, 27, 6, 16, 26, 7, 19, 30, 12, 24, 8, 22, 5, 23]
符合要求:
思路如下:
“‘15*9=135,至少需要5个30位列表,如果要保证去掉重复的元素, 我们可以尝试把”on_boat“列表大一点,尽可能可以正好取到15位间隔为9的数字;