Как определить лучший покерный покер (равенство списков в питоне) - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь создать программу, которая позволяет пользователям играть в покер (за фальшивые деньги, не приходите за мной по IRS), и у меня возникла проблема с попыткой определить кикеров на лучшие руки. Поэтому изначально я думал сортировать значения карт (без мастей), которые мне нравятся [14, 12, 10, 8, 6] (с 14 для туза выше). И сравните его с другим списком, скажем [14, 12, 10, 8, 7] (7 кикеров), чтобы увидеть, какой рейтинг выше. Каждая рука состоит из одной из 5 комбинаций карт из 7 доступных карт в холдеме. Моей первоначальной мыслью было сделать:

def better_hand_with_kicker(list0, list1):
    for index in range(5):
        if list0[index] >= list1[index]:
            continue
        else:
            return False
    return True

Тем не менее, это не сработает, если любое число будет меньше. Например, между [14, 12, 10, 8, 6] и [14, 13, 9, 7, 5] будет возвращено, что [14, 12, 10, 8, 6] выше, потому что даже если (13> 12) выигрывает в другой руке, третий слот (9 <10) вызовет предложение <code>return False.

Поэтому я подумал о немного более сложном:

def better_hand_with_kicker(list0, list1):
    for index in range(5):
        if list0[index] == list1[index]:
            continue
        elif list0[index] > list1[index]:
            return True
        else:
            return False
    return True # this would really be a tie

Теперь это работает, но я полагаю, что должно быть гораздо более элегантное решение ...

1 Ответ

1 голос
/ 11 мая 2019

Было гораздо более элегантное решение!После поиска в Интернете идей о неравенстве между списками и поиска этого удивительного поста я понял, что мое решение было невероятно неадекватным.Лучшим решением было бы использовать:

def better_hand_with_kicker(list0, list1):
    if list0 > list1:
        return True
    return False

При этом используется тот факт, что неравенство списка будет оцениваться аналогично другой функции, которую я создал, а именно:

Сравнениеиспользует лексикографическое упорядочение: сначала сравниваются первые два элемента, и если они различаются, это определяет результат сравнения;если они равны, сравниваются следующие два элемента и т. д., пока не будет исчерпана любая последовательность.

Предостережение заключается в том, что каждый список должен быть sorted() до этой оценки неравенства.Надеюсь, этот пост поможет кому-то в будущем пытаться использовать неравенства в списках целых чисел.В моем сценарии использования это намного более сжато, оно превратило целую функцию, которую я писал, в один оператор if, для которого мне больше не нужна функция!Теперь мой код может быть просто:

if list0 > list1:
    # do stuff

Без функции необходимо.Я не уверен, почему онлайн-учебники не охватывают эту функцию ... В любом случае,

Хвала StackOverflow!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...