l oop и функция choice () в Python - PullRequest
1 голос
/ 14 июля 2020

Я начинающий программист, и я попытался написать код для задачи в своей книге с помощью al oop, который произвольно выбирает числа и / или буквы, чтобы объявить победителя лотереи.

I ' m пытается написать код, который:

  • 4 раза берет случайный объект из кортежа, который не был выбран
  • Сохраняет каждый объект в списке
  • Печать список
from random import choice #Import choice() function from the random module

lottery_1 = (1,2,3,4,5,6,7,8,9,'a','b','c','d','e')
lottery_winner = []

for i in range(4): #Takes 4 random numbers and/or letters
    random = choice(lottery_1)

    if random not in lottery_winner:
        lottery_winner.append(pulled_number)

print('$1M Winner\n')
print(lottery_winner)

иногда выбирает только 2 символа результат:

$1M Winner

[1, 'e']
>>>

Почему это произошло? Что я могу изменить, чтобы он выбирал 4 символа?

Ответы [ 3 ]

2 голосов
/ 14 июля 2020

Фактически, это выбор четырех символов. Однако, когда один из выбранных символов уже находится в lottery_winner, он не добавляется. В таком случае вы получите меньше четырех общих результатов.

Ответ lenik, вероятно, наиболее практичен. Однако, если вам интересно, как вы могли бы go об этом использовать функцию choice, имейте в виду, что вам нужно либо выбрать снова, когда повторение выходит из-под контроля, либо вам нужно исключить параметры из шляпу, как вы go.

Вариант №1, попробуйте еще раз, когда победитель повторяется:

for i in range(4):
    new_winner = False # Initially, we have not found a new winner yet.
    while not new_winner: # Repeat the following as long as new_winner is false:
        random = choice(lottery_1)

        if random not in lottery_winner:
            lottery_winner.append(pulled_number)
            new_winner = True # We're done! The while loop won't run again.
                              # (The for loop will keep going, of course.)

Вариант №2, каждый раз удаляйте победителей из списка, чтобы они могли 'не будет выбран снова:

for i in range(4):
    random = choice(lottery_1)

    lottery_winner.append(pulled_number)
    lottery_1.remove(pulled_number) # Now it can't get chosen again.

Обратите внимание, что remove() удаляет первый экземпляр указанного значения, что может не делать то, что вы хотите, в случаях, когда значения не уникальны.

2 голосов
/ 14 июля 2020

Это работает для меня:

>>> import random
>>> lottery_1 = (1,2,3,4,5,6,7,8,9,'a','b','c','d','e')
>>> random.sample(lottery_1, 4)
[1, 7, 'a', 'e']
>>> 
0 голосов
/ 14 июля 2020
import random

lottery_1 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e')

'''Instead of using the choice method which can randomly grab the same value,
i suggest that you use the sample method which ensures that you only get randomly unique values'''

# The k value represents the number of items that you want to get
lottery_winner = random.sample(lottery_1, k=4)

print('$1M Winner\n')
print(lottery_winner)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...