Я пытаюсь сделать игру в блэкджек на питоне. Я столкнулся с проблемой, потому что я пытаюсь использовать случайный модуль с моей игрой. Я использовал случайный модуль, чтобы получить число, которое совпадает с порядковым номером в моем списке. Список, который я сделал, состоял из номиналов карт. Я не знаю, как распечатать эти значения, используя случайный индекс, хотя. Вот мой код:

# this is a blackjack game made in python
import random
import time

# make a list full of the card values
cards = (["A", "K", "Q", "J", 2, 3, 4, 5, 6, 7, 8, 9, 10])

indexNum1 = random.randint(0,12)
indexNum2 = random.randint(0,12)
indexNum3 = random.randint(0,12)
indexNum4 = random.randint(0,12)
indexNum5 = random.randint(0,12)

for card in cards:
    print card(indexNum1)
    print card(indexNum2)
    print card(indexNum3)
    print card(indexNum4)
    print card(indexNum5)

Я надеюсь, что кто-то может помочь мне решить эту проблему. Благодарность!

-1
Paige Manalo 29 Авг 2017 в 03:54

3 ответа

Лучший ответ

Вы можете индексировать cards напрямую, например:

print(cards[indexNum1])

Но если вы хотите в цикле, вы должны перебрать индексы:

for cardidx in (indexNum1, indexNum2, indexNum3, indexNum4, indexNum5):
    print(cards[cardidx])

Но вы делаете это намного сложнее, чем нужно, потому что в настоящее время ваш код может вернуть 5 тузов - что, я полагаю, вам не нужно:

cards = ["A", "K", "Q", "J", 2, 3, 4, 5, 6, 7, 8, 9, 10]
hand = random.sample(cards, k=5)
for card in hand:
    print(card)
5
AChampion 29 Авг 2017 в 01:04

Если вы хотите правильно смоделировать колоду карт, вам нужно сделать это:

import random

def clean_deck():
    return list("AJQK234567890") * 4

def draw_cards(deck, n):
    return [deck.pop() for _ in range(n)]

deck = clean_deck()
random.shuffle(deck)

for card in draw_cards(deck, 5):
    print(card)

Это отслеживает колоду карт, буквально shuffles их, которая является удобной random функцией, а затем «вытягивает» из колоды (pops). Вы должны следить за колодой, чтобы вы могли, например, нарисовать 4 туза, но тогда больше не осталось бы. Этот подход также постоянен при вытягивании карт - когда вы вытаскиваете карты из колоды, они фактически удаляются, поэтому вы также не можете нарисовать более 4 тузов за всю игру. Он потерпит крах, если вы попытаетесь вытянуть из пустой колоды, хотя вы можете поместить выражение if в draw_cards, чтобы пополнить колоду, если это необходимо, но вы должны знать, что это произойдет, если колода побежит вне - это может привести к странным вещам, таким как 5 тузов в игре.

Я изменил все ваши цифры на строки, так как их нельзя использовать как целые числа, если некоторые карты не являются целыми числами. (Альтернативой является сохранение их всех как целых чисел, что можно сделать с помощью функции range - по предположению range(13) или, если вы хотите перейти от 2, range(2, 15)). Я также изменил 10 на 0, поскольку 0 не использовался, и это сделало его намного более лаконичным. Это должно быть достаточно легко изменить обратно, если хотите.

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

0
Izaak van Dongen 29 Авг 2017 в 01:23

Если вы хотите случайным образом выбрать k карт без повторений и сохранить индексы, это может помочь:

import random

cards = (["A", "K", "Q", "J", 2, 3, 4, 5, 6, 7, 8, 9, 10])
indices = random.sample(range(len(cards)), k=5)
print 'Indices are:', indices, '\nCards chosen are:',[cards[index] for index in indices]
0
Y.C.Sun 29 Авг 2017 в 01:43