Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions solutions/python/card-games/1/lists.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
"""Functions for tracking poker hands and assorted card tasks.

Python list documentation: https://docs.python.org/3/tutorial/datastructures.html
"""


def get_rounds(number):
"""Create a list containing the current and next two round numbers.

:param number: int - current round number.
:return: list - current round and the two that follow.
"""
rounds = [number, number + 1, number + 2]
return rounds


def concatenate_rounds(rounds_1, rounds_2):
"""Concatenate two lists of round numbers.

:param rounds_1: list - first rounds played.
:param rounds_2: list - second set of rounds played.
:return: list - all rounds played.
"""
all_rounds = rounds_1 + rounds_2
return all_rounds


def list_contains_round(rounds, number):
"""Check if the list of rounds contains the specified number.

:param rounds: list - rounds played.
:param number: int - round number.
:return: bool - was the round played?
"""

return number in rounds


def card_average(hand):
"""Calculate and returns the average card value from the list.

:param hand: list - cards in hand.
:return: float - average value of the cards in the hand.
"""

return sum(hand) / len(hand)


def approx_average_is_average(hand):
"""Return if the (average of first and last card values) OR ('middle' card) == calculated average.

:param hand: list - cards in hand.
:return: bool - does one of the approximate averages equal the `true average`?
"""

middle_index = len(hand) // 2
edge_card_avg = (hand[0] + hand[-1]) / 2
return edge_card_avg == card_average(hand) or hand[middle_index] == card_average(hand)


def average_even_is_average_odd(hand):
"""Return if the (average of even indexed card values) == (average of odd indexed card values).
:param hand: list - cards in hand.
:return: bool - are even and odd averages equal?
"""

even_index = [card for index, card in enumerate(hand) if index % 2 == 0]
odd_index = [card for index, card in enumerate(hand) if index % 2 != 0]

return sum(even_index) / len(even_index) == sum(odd_index) / len(odd_index)


def maybe_double_last(hand):
"""Multiply a Jack card value in the last index position by 2.

:param hand: list - cards in hand.
:return: list - hand with Jacks (if present) value doubled.
"""

if hand [-1] == 11:
hand.pop()
hand.append(22)
return hand