Я пытаюсь создать метод, который обновляет список из 20 элементов числами, которые следуют определенным правилам. Я пытаюсь сделать так, чтобы все числа в списке складывались до 185 со следующими правилами:
- Первый элемент в списке (l [0]) всегда должен быть 4
- Последний элемент (l [20]) всегда должен быть 25
- Если считать от элемента 0, каждые 3 - 4 элемента всегда должны быть между 12 и 14, а каждый последующий элемент должен быть между 3 и 4
- Каждый оставшийся элемент должен быть взят из предыдущего элемента и добавить случайное число от 2 до 4, если значение не равно одному из элементов в вышеупомянутой маркированной точке, в этом случае оно может равняться любому числу между предыдущий элемент и элемент после.
Чтобы попытаться выяснить это, я создал метод, который принимает два элемента: список int. Список (l) содержит 20 элементов, все из которых установлены на None, int (pool) установлен на 185. Вот что я сделал с ним до сих пор, но я все еще довольно неопытен с python, поэтому я думаю, что я ' Я сделал это самым отсталым способом ...
Мне удалось сделать все, кроме моей четвертой точки, и я очень доволен результатами, но это последняя часть, которая поставила меня в тупик. Я был бы признателен за любые советы, которые вы можете предложить, извинения, если я сделал это более запутанным, чем это должно быть.
import random
def create_list(l, pool):
position = 0
high_number_locations = []
# placing four numbers between 12 - 14 at semi random intervals
for occurrence in range(limit):
if occurrence == 0:
position = random.randint(3, 4)
high_number_locations.append(position)
n = random.randint(9, 12)
pool -= n
l[position] = n
else:
difference = len(l) - position
split = int(round(difference / (limit - (occurrence - 1)), 0))
step = random.randint(4, split)
position += step
high_number_locations.append(position)
n = random.randint(12, 14)
pool -= n
l[position] = n
new_low_number = random.randint(4, 5)
l[(position + 1)] = new_low_number
pool -= new_low_number
# Setting first and last elements
for idx, magic_number in enumerate(l):
local_ordinal = idx + 1
if local_ordinal == 1:
l[idx] = 4
pool -= 4
elif local_ordinal == 20:
l[idx] = 25
pool -= 25
else:
# do something with the remaining elements
print('do something')
# redistribute the remaining pool
print(pool)
return l
Мой вопрос: правильно ли я поступил? Я не уверен, как достичь sh цели, которую я для себя поставил в этой последней точке пули