Использование python для создания числового шаблона в списке, который соответствует моим правилам eccentri c - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь создать метод, который обновляет список из 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 цели, которую я для себя поставил в этой последней точке пули

...