Python 비교 카드 크기 프로그램 코드 예시 실현

5706 단어 python순서포커
Udacity 과정의 첫 번 째 프로젝트 입 니 다.
먼저 거시적 으로 사고방식 을 파악 해 보 자.목적 은 텍 사 스 포커 의 크기 를 비교 하 는 문 제 를 만 드 는 것 이다
우선,먼저 처리 함 수 를 추상 화하 여 반환 값 의 크기 에 따라 결 과 를 제시한다.
그 다음 에 우 리 는 두 개 또는 여러 개의 카드 의 크기 를 어떻게 비교 하 는 지 정의 하고 크기 를 비교 하기 위해 우 리 는 먼저 5 장의 카드 를 예비 처리 하고 이 를 내림차 순 으로 정렬 합 니 다.다음 과 같 습 니 다.

def card_ranks(hand):
  ranks = ['--23456789TJQKA'.INDEX(r) for r, s in hand]
  ranks.sort(reverse=True)
  return ranks
그 다음 에 우 리 는 모두 9 가지 상황 을 들 고 숫자 로 모든 상황 의 등급 을 대표 하 며 Python 의 비교 기능 을 이용 하여 등급 을 1 위 에 놓 고 등급 이 같 으 면 뒤의 것 을 비교 할 수 있다.

def hand_rank(hand):
  "Return a value indicating the ranking of a hand."
  ranks = card_ranks(hand) 
  if straight(ranks) and flush(hand):
    return (8, max(ranks))
  elif kind(4, ranks):
    return (7, kind(4, ranks), kind(1, ranks))
  elif kind(3, ranks) and kind(2, ranks):
    return (6, kind(3, ranks), kind(2, ranks))
  elif flush(hand):
    return (5, ranks)
  elif straight(ranks):
    return (4, max(ranks))
  elif kind(3, ranks):
    return (3, kind(3, ranks), ranks)
  elif two_pair(ranks):
    return (2, two_pair(ranks), ranks)
  elif kind(2, ranks):
    return (1, kind(2, ranks), ranks)
  else:
    return (0, ranks)
등급 이 같 으 면 각 세트 에서 카드 의 크기 를 비교 하 는 것 을 볼 수 있다.동시에 우 리 는 세 개의 함수 가 필요 합 니 다.동화,순자,그리고 kind(n,ranks)를 대표 하고 ranks 가 n 장의 카드 를 가 진 포 인 트 를 대표 합 니 다.이곳 의 세 가지 함 수 는 매우 교묘 하 게 실현 되 었 고 set 의 무 거 운 특성 을 이용 하 였 다.

def straight(ranks):
  return (max(ranks) - min(ranks)) == 4 and len(set(ranks)) == 5

def flush(hand):
  suit = [s, for r, s in hand]
  return len(set(suit)) == 1
def kind(n, ranks):
  for s in ranks:
    if ranks.count(s) == n : return s
  return None
우 리 는 두 개의 쌍 을 포함 하고 있 기 때문에 하나의 함수 가 이러한 상황 인지 아 닌 지 를 판단 해 야 한 다 는 것 을 알 게 되 었 습 니 다.이 함수 에서 kind()함 수 를 호출 했 습 니 다.kind()함수 가 단락 특성 을 만족 시 키 기 때문에 먼저 얻 은 만족 상황 의 포인트 만 되 돌려 주 었 습 니 다.그래서 이 를 뒤 집 은 후에 한쪽 kind 를 호출 했 습 니 다.만약 에 얻 은 결과 가 같 으 면 한 쌍(또는 없 음)만 있 습 니 다.안 그러면 두 개 야.

def two_pairs(ranks):
  pair = kind(2, ranks)
  lowpair = kind(2, list(reverse(ranks)))
  if pair != lowpair:
    return (pair, lowpair)
  else:
    return None
자,전체적인 뼈 대 를 다 만 든 셈 입 니 다.그 다음 에 처리 하면 bug 가 발생 할 수 있 습 니 다.먼저 A2345 입 니 다.정렬 할 때 A 가 14 로 계산 되 기 때문에 이 문제 에 대해 단독으로 if 를 열거 해 야 합 니 다.

  A   :
def card_ranks(hand):
  ranks = ['--23456789TJQKA'.INDEX(r) for r, s in hand]
  ranks.sort(reverse=True)
  return [5, 4, 3, 2, 1] if (ranks = [14, 5, 4, 3, 2] else ranks
그 다음 에 더욱 간소화 되 었 고 생각 이 좋 았 다.

def poker(hands):
  return allmax(hands, key=hand_ranks)
def allmax(iterable, key=None):
  result, maxval = [], None
  ket = key or lambda(x): x
  for x in iterable:
    xval = key(x)
    if not result or xval > maxval:
      result, maxval = [x], xval
    elif:
      result.append(x)
  return result
"""     ,     ,      """
import random
mydeck = [r+s for r in '23456789TJKQA' for s in'SHDC]
def deal(numhands, n=5, deck = [r+s for r in '23456789TJKQA' for s in'SHDC]):
  random.shuffle(deck)
  return [deck[n*i:n*(i + 1)] for i in range(numhands)]
def hand_ranks(hand):
  groups = group['--23456789TJQKA'.index(r) for r, s in hand]
  counts, ranks = unzip(groups)
  if rnaks == (14, 5, 4, 3, 2, 1):
    ransk = (5, 4, 3, 2, 1)
  straight = len(ranks) == 5 and max(ranks) - min(ranks) == 4
  flush = len(set([s for r, s in hand])) ==1
  return(9 if (5,) == count else
     8 if straight and flush else
     7 if (4, 1) == counts else
     6 if (3, 2) == counts else
     5 if flush else
     4 if straight else
     3 if (3, 1, 1) == counts else
     2 if (5, 1, 1) == counts else
     1 if (2, 1, 1, 1) == counts else
     0), ranks
def group(items):
  groups = [(items.count(x), x) for x in set(items)]
  return sorted(groups, reverse = True)
def unzips(pairs):return zip(*pairs)

def hand_ranks(hand):
   groups = group['--23456789TJQKA'.index(r) for r, s in hand]
  counts, ranks = unzip(groups)
  if rnaks == (14, 5, 4, 3, 2, 1):
    ransk = (5, 4, 3, 2, 1)

  straight = len(ranks) == 5 and max(ranks) - min(ranks) == 4
  flush = len(set([s for r, s in hand])) ==1
  return max(count_ranks[counts], 4*straight + 5 * flush), ranks
count_rankings = {(5,):10, (4, 1):7, (3,2):6, (3,1,1):3, (2,2,1):2,
(2,1,1,1): 1,(1,1,1,1,1):0}
정리 한 다음 에 한 문제 에 직면 하 는 사고 절차:

started:understand problems look at specification See if it make sense 
define the piece of problem reuse the piece you have test! >explore 
                 
correctness elegance efficienct featrues
총결산
이상 은 파 이 썬 이 카드 크기 프로그램 코드 예 시 를 비교 하 는 데 도움 이 되 기 를 바 랍 니 다.관심 이 있 는 친 구 는 본 사 이 트 를 계속 참고 할 수 있 습 니 다.
Python 3 간단 한 실례 계산 동화 확률 코드
Python 언어 설명 최대 연속 서브 시퀀스 와
Python 데이터 시각 화 정상 분포 단순 분석 및 구현 코드
부족 한 점 이 있 으 면 댓 글로 지적 해 주세요.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기