Сохранение всех результатов ЦИКЛА FOR в массиве

#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] для получения имени значения карты.