#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:
- Проблема заключается в значении, которое вы передаете
draw()
, когдаrange
функция выполняет итерацию по точкеstart
иend
, поэтому передача одного из них вернет вам только одно значение! - Вам также необходимо добавить еще
list
один, чтобы добавитьrandom choices
выбранный во времяrange()