Як отримати унікальні номери, використовуючи random python?

Я створюю "генератор лотерей Euromillions" просто для задоволення, і я продовжую отримувати ті ж цифри друку. Як я можу зробити це так, щоб я отримував випадкові числа, і ніколи не одразу ж з'являється однаковий номер:

from random import randint

numbers = randint(1,50)

stars = randint(1,11)


print "Your lucky numbers are: ", numbers, numbers, numbers, numbers, numbers

print "Your lucky stars are: " , stars, stars

Вихід просто:

>>> Your lucky numbers are:  41 41 41 41 41
>>> Your lucky stars are:  8 8
>>> Good bye!

Як я можу це виправити?

З повагою

0
numbers = randint (1, 50) не означає, що numbers є магічною річчю, яка оцінює randint (1, 50) щоразу, коли я подивись на це і скаже мені результат ". Це означає "оцінити randint (1, 50) прямо зараз, numbers " має бути ім'я результату ".
додано Автор Karl Knechtel, джерело

6 Відповіді

Ви генеруєте номер одного , після чого друкуйте кілька разів.

Генеруйте кілька номерів замість:

print "Your lucky numbers are: ", randint(1,50), randint(1,50), randint(1,50), randint(1,50), randint(1,50)

або створити список:

numbers = [randint(1,50) for _ in range(5)]
print "Your lucky numbers are: ", ' '.join(numbers)

або ще краще, генеруйте всі дозволені числа (використовуючи range() , а потім виділіть із нього зразок:

possible_numbers = range(1, 51)  # end point is not included
numbers = random.sample(possible_numbers, 5)
print "Your lucky numbers are: ", ' '.join(map(str, numbers))

Тепер numbers гарантовано складається з цілком унікальних номерів.

Змінна numbers не магічно оновлюється кожного разу, коли ви надрукуєте її, оскільки вона стосується лише результату random.randint (1, 50) .

7
додано
Це не означає, що номери будуть унікальними
додано Автор Aswin Murugesh, джерело
В порядку. Проте О.П. зазначив у питанні, що ті ж цифри не повинні повторюватися
додано Автор Aswin Murugesh, джерело
Я. Ти правий
додано Автор Aswin Murugesh, джерело
@AswinMurugesh: Найбільшою проблемою для OP є концепція того, що означає тут змінна. Вирішення проблеми унікальності - це етап наступного .
додано Автор Martijn Pieters, джерело
@ Асвін Муругеш: так, дійсно, саме тому моя відповідь містить інформацію про те, як це зробити. Але ви не можете просто скинути код у когось, який все ще стикається з основними поняттями.
додано Автор Martijn Pieters, джерело
Після всіх розробок, це набагато краща відповідь, ніж прийнята.
додано Автор Karl Knechtel, джерело
+1 для random.sample
додано Автор jamylak, джерело
Дякую Мартінь, дуже вдячний
додано Автор user2519572, джерело

Налаштуйте набір чисел, потім перемістіть і скиньте набір.

from random import shuffle
numbers  = list(range(1,51))
shuffle(numbers)
draw = numbers[:6]
print(draw)
6
додано
І в python3, перемішування не працює з ітерабельними об'єктами ... редагувати зі списком (діапазон (1, 50))
додано Автор Scharron, джерело
Дякуємо за редагування, набагато поліпшену відповідь по моєму оригіналу. Я явно використовував інші народні мови занадто довго, оскільки я виявив, що перемішування на місці, а не повернення нового перемішуваного набору дивним, але ви навчаєтеся кожен день.
додано Автор Eterm, джерело
Це не включає 50 , randint (1, 50) включає кінцеву точку в можливі значення.
додано Автор Martijn Pieters, джерело
Зауважте, що random.sample() працює відмінно з range() в Python 3 або xrange() Python 2, оскільки він реалізує __ len __ і __ getitem __ (це правильний об'єкт послідовності).
додано Автор Martijn Pieters, джерело
shuffle модифікує список на місці та повертає None .
додано Автор Ashwini Chaudhary, джерело
Якщо ваш набір дуже великий, перемішування всього, що потрібно лише для вибору 6, може бути надто повільним. Ви також можете зробити частковий Fisher-Yates або використовувати алгоритм Флойд.
додано Автор Lee Daniel Crocker, джерело

numbers = randint(1,50) assigns one random number to a variable. And you repeatedly use this one random number. Same goes for stars

Спробуйте це замість:

print "Your lucky numbers are: ", randint(1,50), randint(1,50), randint(1,50), randint(1,50), randint(1,50) 

Або ви можете створити список чисел і отримати випадкову вибірку:

numbers = range(1,50)
print "Your lucky numbers are: ", ' '.join(map(str, random.sample(numbers, 5)))
1
додано

Одним із способів, який я хотів би запропонувати, - це поставити зібрані числа в список і перевірити, чи немає наступного числа у списку списку, перш ніж додати його до списку

numbers=[randint(1,50)]
i=1
while i

Проблема в коді полягає в тому, що ви генеруєте лише одну випадкову кількість і друкуєте її чотири рази

0
додано

Ви повинні називати randint 5 разів для своїх щасливих чисел. Ви називаєте це лише один раз, і результат відображається 5 разів.

0
додано

You can use
random.sample(range(range_to_which_random_be_generated), number_of_numbers_to_generate)

приклад
random.sample (діапазон (50), 6)
буде генерувати 6 різних цифр у діапазоні від 0 до 49

0
додано
Ні, це породжує числа від 0 до 49, але принцип інакше звучить.
додано Автор Martijn Pieters, джерело
ІТ КПІ - Python
ІТ КПІ - Python
625 учасників

Канал обговорень про всякі штуки зі світу пайтону. Прохання: 0. мати повагу одне до одного; 1. не матюкатися в сторону людей; 2. не захламляти тред повідомленнями по одному слову;