欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python用類實現(xiàn)撲克牌發(fā)牌的示例代碼

 更新時間:2020年06月01日 14:58:09   作者:林大夕可  
這篇文章主要介紹了Python用類實現(xiàn)撲克牌發(fā)牌的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧

1. 題目

編寫程序, 4名牌手打牌,計算機隨機將52張牌(不含大小鬼)發(fā)給4名牌手,在屏幕上顯示每位牌手的牌。

提示:
設(shè)計出3個類:Card類、Hand類和Poke類。
Card類代表一張牌,其中FaceNum字段指出是牌面數(shù)字1~13,Suit字段指出的是花色,值“梅”為梅花,“方”為方塊,“紅”為紅心,“黑”為黑桃。
Hand類代表一手牌,可以認為是一位牌手手里的牌,其中cards列表變量存儲牌手手里的牌??梢栽黾优?、清空手里的牌、把一張牌給別的牌手。
Poke類代表一副牌,可以把一副牌看作是有52張牌的牌手,所以繼承Hand類。

1.1 輸出樣例

This is a module with classes for playing cards.
牌手 1:紅桃6 黑桃6 梅花A 方片6 黑桃2 梅花10 紅桃3 方片4 方片10 黑桃J 紅桃Q 紅桃10 紅桃8 
牌手 2:梅花J 梅花9 紅桃7 紅桃2 方片K 黑桃K 梅花3 方片7 黑桃Q 黑桃10 梅花Q 梅花8 黑桃7 
牌手 3:梅花2 方片A 黑桃3 方片9 黑桃4 紅桃K 紅桃J 梅花7 紅桃4 方片2 梅花4 梅花6 紅桃5 
牌手 4:黑桃5 紅桃9 方片8 梅花5 方片J 黑桃A 梅花K 方片5 黑桃9 方片3 黑桃8 方片Q 紅桃A

2. 題解

2.1 代碼

# Card類:一張牌
class Card:
  """A playing card.card"""
  RANKS = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
  SUITS = ['梅花', '方片', '紅桃', '黑桃']

  def __init__(self, rank, suit, face_up=True):
    self.rank = rank        # 牌面數(shù)字1~13
    self.suit = suit        # 花色
    self.is_face_up = face_up    # 是否顯示牌的正面,True為正面,F(xiàn)alse為反面

  def __str__(self):         # 重寫print()方法,打印一張牌的信息
    if self.is_face_up:
      rep = self.suit + self.rank
    else:
      rep = 'XX'
    return rep

  def pic_order(self):       # 牌的順序號
    if self.rank == 'A':
      FaceNum = 1
    elif self.rank == 'J':
      FaceNum = 11
    elif self.rank == 'Q':
      FaceNum = 12
    elif self.rank == 'K':
      FaceNum = 13
    else:
      FaceNum = int(self.rank)
    if self.suit == '梅花':
      Suit = 1
    elif self.suit == '方片':
      Suit = 2
    elif self.suit == '紅桃':
      Suit = 3
    else:
      Suit = 4
    return (Suit - 1) * 13 + FaceNum

  def flip(self):         # 翻牌方法
    self.is_face_up = not self.is_face_up


# Hand類:一手牌
class Hand:
  """A hand of playing cards Hand"""

  def __init__(self):
    self.cards = []       # cards列表變量存儲牌手手里的牌

  def __str__(self):        # 重寫print()方法,打印出牌手的所有牌
    if self.cards:
      rep = ''
      for card in self.cards:
        rep += str(card) + '\t'
    else:
      rep = '無牌'
    return rep

  def clear(self):         # 清空手里的牌
    self.cards = []

  def add(self, card):       # 增加手里的牌
    self.cards.append(card)

  def give(self, card, other_hand):  # 把一張牌給其他選手
    self.cards.remove(card)
    other_hand.add(card)
    # other_hand.append(card)  # 上面兩行可以用這一行代替


# Poke類:一副牌
# 繼承Hand類
class Poke(Hand):
  """Poke類代表一副牌,可以看做是有52張牌的牌手,所以繼承Hand類。由于其中cards列表變量要存儲52張牌
  而且要發(fā)牌,洗牌,所以增加方法如下方法:"""

  def populate(self):         # 生成一副牌
    for suit in Card.SUITS:
      for rank in Card.RANKS:
        self.add(Card(rank, suit))

  def shuffle(self):         # 洗牌
    import random
    random.shuffle(self.cards)   # 打亂牌的順序

  def deal(self, hands, per_hand=13): # 將牌發(fā)給玩家,每人默認13張牌
    for rounds in range(per_hand):
      for hand in hands:
        if self.cards:
          top_card = self.cards[0]
          self.cards.remove(top_card)
          hand.add(top_card)
          # self.give(top_card,hand) #上兩句可以用此句替換
        else:
          print('不能繼續(xù)發(fā)牌了,牌已經(jīng)發(fā)完了!')


if __name__ == "__main__":
  print('This is a module with classes for playing cards.')
  players = [Hand(), Hand(), Hand(), Hand()]
  poke1 = Poke()
  poke1.populate()       # 生成一副牌
  poke1.shuffle()        # 洗牌
  poke1.deal(players, 13)    # 發(fā)給每人13張牌
  n = 1
  for hand in players:
    print('牌手', n, end=':')
    print(hand)
    n = n + 1

到此這篇關(guān)于Python用類實現(xiàn)撲克牌發(fā)牌的示例代碼的文章就介紹到這了,更多相關(guān)Python 撲克牌發(fā)牌內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Python實現(xiàn)簡單的多任務(wù)mysql轉(zhuǎn)xml的方法

    Python實現(xiàn)簡單的多任務(wù)mysql轉(zhuǎn)xml的方法

    這篇文章主要介紹了Python實現(xiàn)簡單的多任務(wù)mysql轉(zhuǎn)xml的方法,結(jié)合實例形式分析了Python查詢mysql結(jié)果集轉(zhuǎn)xml格式數(shù)據(jù)輸出的相關(guān)操作技巧,需要的朋友可以參考下
    2017-02-02
  • Python語法糖遍歷列表時刪除元素方法示例詳解

    Python語法糖遍歷列表時刪除元素方法示例詳解

    這篇文章主要為大家介紹了Python語法糖遍歷列表時刪除元素詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Python爬取視頻(其實是一篇福利)過程解析

    Python爬取視頻(其實是一篇福利)過程解析

    這篇文章主要介紹了Python爬取視頻(其實是一篇福利)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2019-08-08
  • Python常見數(shù)據(jù)類型轉(zhuǎn)換操作示例

    Python常見數(shù)據(jù)類型轉(zhuǎn)換操作示例

    這篇文章主要介紹了Python常見數(shù)據(jù)類型轉(zhuǎn)換操作,結(jié)合實例形式分析了Python針對列表、集合、元組、字典等數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • python爬蟲之requests庫使用代理方式

    python爬蟲之requests庫使用代理方式

    這篇文章主要介紹了python爬蟲之requests庫使用代理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python字典和集合講解

    Python字典和集合講解

    這篇文章主要給大家假關(guān)節(jié)的是Python字典和集合,字典是Python內(nèi)置的數(shù)據(jù)結(jié)構(gòu)之一,是一個無序的序列;而集合是python語言提供的內(nèi)置數(shù)據(jù)結(jié)構(gòu),沒有value的字典,集合類型與其他類型最大的區(qū)別在于,它不包含重復(fù)元素。想具體了解有關(guān)python字典與集合,請看下面文章內(nèi)容
    2021-10-10
  • Python條件分支?if?語句全講解(一文掌握)

    Python條件分支?if?語句全講解(一文掌握)

    在Python編程中,布爾運算符有明確的優(yōu)先級順序,影響代碼邏輯判斷,從高到低依次是:括號()、not、and、or,括號用于明確運算順序,not具有次高優(yōu)先級,影響單個布爾值,and和or則根據(jù)優(yōu)先級順序結(jié)合布爾值,正確理解和應(yīng)用這些優(yōu)先級對于編寫有效和準確的條件語句至關(guān)重要
    2024-10-10
  • python生成excel的實例代碼

    python生成excel的實例代碼

    這篇文章主要為大家詳細介紹了python生成excel的實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 表格梳理解析python內(nèi)置時間模塊看完就懂

    表格梳理解析python內(nèi)置時間模塊看完就懂

    這篇文章主要介紹了python內(nèi)置的時間模塊,本文用表格方式清晰的對Python內(nèi)置時間模塊進行語法及用法的梳理解析,有需要的朋友建議收藏參考
    2021-10-10
  • Python實例之wxpython中Frame使用方法

    Python實例之wxpython中Frame使用方法

    本文介紹下wxpython中Frame的用法,不錯的python編程實例,有需要的朋友參考下
    2014-06-06

最新評論