Создать список случайных четных чисел в указанном диапазоне, используя только randint - PullRequest
1 голос
/ 31 марта 2020

Я пытаюсь создать случайный список с номерами от 0 до 10000 (включительно). Мне нужно получить список только с четными числами.

Это мой код:

from random import randint

def test(mini, maxx, quantity):
    myl = [randint(mini, maxx) * 2 for i in range(quantity)]
    return myl

print(test(0, 10000, 4))

Если я попробую это сделать, я go выйду за пределы диапазона 10000 (потому что * 2).

Кроме того, я могу использовать только функцию randint.

Как мне достичь желаемого результата?

Ответы [ 3 ]

5 голосов
/ 31 марта 2020

Генерация случайных чисел от 0 до 5000 и умножение на 2. Вы должны работать в правильном диапазоне, если хотите обеспечить надлежащие результаты, и учитывать тот факт, что ваши границы включают в себя:

def test(start, stop, n):
    start, stop = min(start, stop), max(start, stop)
    realmax = (stop - start + 2) // 2 - 1   # Range from zero, inclusive
    realstart = start + (start % 2)         # Offset to ensure even result
    return [randint(0, realmax) * 2 + realstart for _ in range(n)]

Если вам интересно, откуда берется (stop - start + 2) // 2 - 1.

  • stop - start + 1 - это размер вашего включенного диапазона.
  • Другой + 1 необходим для создания // 2 действовать как разделение по полу вместо разделения по полу. Взяв в качестве примера диапазон 12–14, вы захотите сгенерировать два параметра, а не один.
  • // 2 просто делит диапазон пополам пополам, но сохраняет его целым числом.
  • Окончательный вариант - 1 преобразует размер диапазона в границу диапазона, поскольку randint включительно, и мы начинаем с нуля.
0 голосов
/ 31 марта 2020

Используйте следующий код -

import random
>>> lst = []
>>> def evenrandom(lst):
    for i in range(10):       #assuming we need 10 random numbers
        num = random.randint(1,10000)       #note: I have started from 1 
                                            #with intention
        if num % 2 == 0:
            lst.append(num)
        else:
            lst.append(num -1)
    return lst

>>> print(evenrandom(lst))
[6932, 1690, 5526, 1282, 8332, 2024, 8600, 9500, 1264, 4350]
0 голосов
/ 31 марта 2020
def test(mini,maxx,quantity):
    myl = [randint(mini,int(maxx/2)) * 2 for i in range(quantity)]
    return myl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...