#python #function #loops #for-loop #random
#python #функция #циклы #for-цикл #Случайный
Вопрос:
Я создал массив с именем Player1_Cards. Каждая карточка должна иметь номер и цвет. У игрока 1 должно быть 15 карточек, которые могут быть пронумерованы от 1 до 30.
Для этого я использовал цикл for:
используя random.randint (1,30), я нашел номер карточки.
используя random.randint(1,3), я присваиваю число 1,2 или 3 цветам КРАСНЫЙ, ЖЕЛТЫЙ или ЧЕРНЫЙ.
Как мне сохранить все мои результаты из цикла for в виде массива?
Вот мой код:
Player1_Cards = [0]
import random
for i in range(1,16):
i = random.randint(1,30)
i_colour = random.randint(1,3)
i_colour = str(i_colour)
if i_colour == "1":
i_colour = "RED"
if i_colour == "2":
i_colour = "YELLOW"
if i_colour == "3":
i_colour = "BLACK"
Player1_Cards[i,i_colour]
Если я печатаю (i, i_colour), игнорируя массив, примерами того, что он может выполнить, являются:
6 YELLOW
28 YELLOW
8 RED
3 BLACK
22 RED
2 BLACK
26 RED
25 YELLOW
8 RED
20 RED
16 BLACK
12 YELLOW
4 RED
20 BLACK
1 YELLOW
Ответ №1:
Более простой способ реализовать это — использовать понимание списка:
import random
colours = ['RED', 'BLUE', 'YEllOW']
player_hand = [(random.randint(1, 30), random.choice(colours)) for _ in range(15)]
Output:
# 21 BLUE
# 22 BLUE
# 25 YEllOW
# 11 BLUE
# 4 RED
...
Комментарии:
1. Просто небольшая придирка: поскольку
i
не используется, возможно,for _ in range(1, 16)
было бы лучше (также, обратите внимание,range(1, 16)
вместоrange(16)
, это не одно и то же!).
Ответ №2:
Попробуйте это:
Player1_Cards = []
в начале. затем в конце цикла:
Player1_Cards.append((i, i_colour))
И после цикла:
print(Player1_Cards)
У вас также есть ошибка в вашем коде:
for i in range(1,16):
i = random.randint(1,30)
Оба варианта присваивают переменной i
значение. Это не имеет смысла таким образом. Если вы просто хотите выполнить свой цикл пятнадцать раз, лучше используйте _
вместо:
for _ in range(1,16):
Комментарии:
1. Ах, спасибо, я это очень ценю. Кроме того, как вы могли бы гарантировать, что карты player1 не совпадают с картами player2?
2. Я предлагаю вынуть карту игрока 1 из колоды , прежде чем брать карту игрока 2. Сделайте это так, как вы делали бы в реальной жизни: создайте колоду из всех карт, перетасуйте колоду, затем возьмите n верхних для игрока 1, после чего возьмите m верхних для игрока 2.
3.
deck = list(range(52))
(для покерной колоды),random.shuffle(deck)
,player1cards = deck[0:12]
player2cards = deck[12:24]
. Затем вам нужно интерпретировать простые числа как карты, например, вот так:suit = card % 4
,value = card / 4
,VALUE_NAMES = [ '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A' ]
и использоватьVALUE_NAMES[value]
для получения имени значения карты.