Возврат нескольких значений в цикле for?

#python #python-3.x #function #loops

Вопрос:

короче говоря, это длинная история:

 import random

cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
user_hand = []
computer_hand = []

def draw(x):
  for c in range(0, x):
    card = random.choice(cards)
  return card

user_hand.append(draw(1))
    
print(user_hand)
 

Пытаюсь собрать функцию, которая будет прокручивать список карт и выбирать случайный элемент, сколько бы раз ни указывалось X, однако независимо от номера, подключенного к

 user_hand.append(draw(x))
 

он всегда возвращает только 1 карту, совершенно сбитую с толку. Есть какие-нибудь идеи? Думал, что это возврат в функции, так как возврат завершает блок кода при его вызове, но я не был уверен.

Комментарии:

1. Поставьте user_hand.append(random.choice(cards)) вместо card = random.choice(cards) . Затем вызовите draw(x) без добавления части. Однако это приведет к вытягиванию карт с заменой, я не уверен, что это то, что вы хотите сделать.

Ответ №1:

Это потому card , что перезаписывается на каждой итерации, и вы возвращаете только последнее значение.

Вы можете создать список и вернуть его вместо этого:

 def draw(x):
  random_cards = []
  for c in range(0, x):
    card = random.choice(cards)
    random_cards.append(card)
  return random_cards

user_hand.extend(draw(1))  # further you'll need extend here else it will create a list of lists
 

Ответ №2:

Может быть так

 def draw(x):
  result=[] 
  for c in range(0, x):
     card = random.choice(cards)
     result.append(card) 
return result
 

Ответ №3:

Если вы хотите выбрать карты без замены, random.sample функция делает то, что вы хотите.

 def draw(x):
  return random.sample(cards, x)

user_hand.extend(draw(3))
 

Ответ №4:

  1. Проблема заключается в значении, которое вы передаете draw() , когда range функция выполняет итерацию по точке start и end , поэтому передача одного из них вернет вам только одно значение!
  2. Вам также необходимо добавить еще list один, чтобы добавить random choices выбранный во время range()