流畅的Python(1)- 一摞Python风格的纸牌
生活随笔
收集整理的這篇文章主要介紹了
流畅的Python(1)- 一摞Python风格的纸牌
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. namedtuple 具名元祖
- 1.2 代碼
- 2. 特殊方法覆寫
1. namedtuple 具名元祖
namedtuple的特點是只有少量屬性,沒有方法。
1.2 代碼
# 導入相關數據庫 import random from collections import namedtuple from random import choice# 定義單個紙牌Cards類,有屬性rank 和 suit Cards = namedtuple('Cards', ['rank', 'suit'])# 一套紙牌 class FrechDeck:# 批量生成列表ranks和suitsranks = [str(n) for n in range(2, 11)] + list('JQKA')suits = "spades diamonds clubs hearts".split()def __init__(self):# 初始化生成一套紙牌self._cards = [Cards(rank, suit) for rank in self.ranksfor suit in self.suits]# 返回長度def __len__(self):return len(self._cards)# 根據序號返回值def __getitem__(self, item):return self._cards[item]# 實例化紙牌 my_frenchdeck = FrechDeck() # 獲取紙牌的長度 print(f"len(my_frenchdeck)={len(my_frenchdeck)}")# 循環迭代獲得紙牌 for i in my_frenchdeck:print(i) print("*" * 100) # 對紙牌進行切片處理 print(f"my_frenchdeck[-1]={my_frenchdeck[-1]}") print(f"my_frenchdeck[5]={my_frenchdeck[5]}") print(f"my_frenchdeck[0:5]={my_frenchdeck[0:5]}") print(f"my_frenchdeck[:-5]={my_frenchdeck[:-5]}") print(f"choice(my_frenchdeck)={choice(my_frenchdeck)}")# 給每個紙牌花色進行賦權重 suit_values = dict(spades=3, diamonds=1, clubs=0, hearts=2)# 根據傳入的單個card計算出總的權重,依據suit_value+rank def spades_high(card):rank_value = FrechDeck.ranks.index(card.rank)return rank_value * len(suit_values) + suit_values[card.suit]print("*" * 100) i = -1 # 根據總權重值進行排序 for card in sorted(my_frenchdeck, key=spades_high):i += 1print(f"i={i},card={card},weights = {spades_high(card)}")2. 特殊方法覆寫
from math import hypot# 定義一個向量Vector class Vector:def __init__(self, x=0, y=0):self.x = xself.y = y# 覆寫向量打印的寫法def __repr__(self):return "Vector(%r,%r)" % (self.x, self.y)# 覆寫向量abs方法,向量的模def __abs__(self):return hypot(self.x, self.y)# 覆寫向量加法def __add__(self, other):x = self.x + other.xy = self.y + other.yreturn Vector(x, y)def __bool__(self):# return bool(abs(self))return bool(self.x or self.y)# 覆寫向量和標量的乘法def __mul__(self, scale):return Vector(self.x * scale, self.y * scale)vector1 = Vector(2, 3) vector2 = Vector(4, 5) print(f"bool(vector1)={bool(vector1)}") print(f"vector1 + vector2={vector1 + vector2}") print(f"abs(vector1)={abs(vector1)}") print(f"vector1 * 3={vector1 * 3}") bool(vector1)=True vector1 + vector2=Vector(6,8) abs(vector1)=3.6055512754639896 vector1 * 3=Vector(6,9)- 用生成器初始化元組和數組
總結
以上是生活随笔為你收集整理的流畅的Python(1)- 一摞Python风格的纸牌的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iPhone 各屏幕尺寸及解析
- 下一篇: Angular CLI的简单使用(1)