Я изучаю Python и работаю над самосовершенствованным проектом карточной игры - Blackjack. Согласно правилам, если у игрока есть начальная рука, где точки на каждой карте одинаковы, игрок может разделить руку на две части; Одна карта рассматривается каждой разделенной руке, которая затем становится двумя руками. .org/wiki/blackjack
Это то, чего я хочу достичь:
Проверьте начальную руку игрока, чтобы увидеть, имеет ли обе карты одинаковое значение точки; Если да, дайте игроку возможность разделить его карты. Если он решит разделить, создайте две руки из начальной руки. Еще раз, проверьте точечные значения разделенных рук и следуйте тому же процессу, пока карты не будут разделены, или игрок не решит не разделять или не достигнет 3 расщепления (эквивалентно 4 рукам). Код начинается с принятия списка, представляющего начальную руку, и я хочу, чтобы он выводил список из 4 списков, представляющих окончательные руки после разделения. Список, когда итерация над ним с помощью цикла для петли. Я хотел добавить элементы в конце списка во время запуска цикла, а код работает; Тем не менее, я знаю, что этой практики следует избегать как общее правило, поэтому я ищу альтернативное решение. очень ясно.import random
def split_hand(cards):
"""Takes the player's cards as an argument and returns 2 hands of two cards each, i.e.
a list of two lists of two cards each"""
split_cards = [[cards] for i in range(2)]
for card in split_cards:
card.append(random.choice(test_card_deck))
return split_cards
test_card_deck = ["10 of Spades", "6 of Clubs", "Queen of Clubs", "Jack of Diamonds"]
# Dictionary of the cards with their corresponding points
test_card_dict = {"10 of Spades": 10, "6 of Clubs": 6, "Queen of Clubs": 10, "Jack of Diamonds": 10}
# Deal an initial hand to the player
player_cards = ["10 of Spades", "Queen of Clubs"]
# Initialise variables
final_hands = []
hands = [player_cards]
split_counter = 0
"""This is working but the code is iffy because I am modifying the list (hands) while it is being iterated over; alternative needed"""
for hand in hands:
if test_card_dict[hand[0]] != test_card_dict[hand[1]]:
final_hands.append(hand)
else:
if split_counter < 3:
print(f"\nYour cards: [{", ".join(hand)}]")
split = input("Would you like to split? Type 'y' for yes or 'n' for no: ")
if split == "y":
split_counter += 1 # Increment counter every time a hand is split
result_of_split = split_hand(hand)
for each_set_of_cards in result_of_split:
hands.append(each_set_of_cards) # I wanted the split cards to get added on at the end of 'hands' and be processed
else:
final_hands.append(hand)
else:
final_hands.append(hand)
print(final_hands)
< /code>
Это мой первый вопрос здесь; Я надеюсь, что я смог описать свою проблему и чего я хочу достичь. Ищу предложения/альтернативные направления/устранение неполадок ... любая помощь, которую я могу получить. Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/794 ... -iteration
Работа с расщеплением карт в Блэкджеке без изменения списка во время итерации ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение