Мне нужно использовать функцию def, чтобы создать случайный список чисел без дубликатов.
Я попытался использовать две функции ниже, но они обе в конечном итоге производят одно значение
import random
def fill(nx, x, y):
lx = []
j = 0
while (j < nx):
r = random.randint(x, y)
if r not in lx:
lx.append(r)
j = j + 1
return lx
n = 25
a = 10
b = 50
myList = fill(n, a, b)
print(myList)
а также
import random
def fill(nx, x, y):
lx = []
for j in range(nx):
randNum = random.randint(x, y)
if randNum not in lx:
lx.append(randNum)
return lx
n = 25
a = 10
b = 50
myList = fill(n, a, b)
print(myList)
Они оба добавляют только одно целое число в список, и я не могу понять, как это сделать, чтобы добавить все 25 нуждающихся в нем. Если бы я мог получить какие-либо подсказки в правильном направлении, это было бы очень полезно! а также извините за странное форматирование, если есть первый постер.
Вы были очень близки Оператор return работает с функциями в том случае, если после выполнения оператора return функция завершается. Поскольку оператор return находится сразу после строки добавления, он добавил бы одно число и затем вышел из функции. Вам нужно было сдвинуть возвращаемую статистику в ту же строку, что и цикл for, чтобы убедиться, что цикл for выполняется, но хорошая работа зашла так далеко.
import random
def fill(nx, x, y):
lx = []
for j in range(nx):
randNum = random.randint(x, y)
if randNum not in lx:
lx.append(randNum)
return lx
n = 25
a = 10
b = 50
myList = fill(n, a, b)
print(myList)
Выход:
[11, 29, 16, 33, 20, 22, 48, 47, 25, 28, 38, 30, 36, 40]
Вы можете использовать random.sample
:
import random
def fill(nx, x, y):
return random.sample(range(x, y + 1), nx)
Пример вывода fill(25, 10, 50)
:
[25, 45, 35, 42, 24, 41, 43, 14, 36, 13, 46, 32, 29, 28, 22, 47, 39, 10, 30, 21, 33, 31, 17, 44, 34]
return lx
имеет слишком большой отступ, так что цикл заканчивается после добавления 1 значения вlx
. Он должен иметь отступ в той же строке, что и ваш оператор while.