流畅的Python(1)- 一摞Python风格的纸牌
生活随笔
收集整理的這篇文章主要介紹了
流畅的Python(1)- 一摞Python风格的纸牌
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1. namedtuple 具名元祖
- 1.2 代碼
- 2. 特殊方法覆寫(xiě)
1. namedtuple 具名元祖
namedtuple的特點(diǎn)是只有少量屬性,沒(méi)有方法。
1.2 代碼
# 導(dǎo)入相關(guān)數(shù)據(jù)庫(kù) import random from collections import namedtuple from random import choice# 定義單個(gè)紙牌Cards類(lèi),有屬性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]# 返回長(zhǎng)度def __len__(self):return len(self._cards)# 根據(jù)序號(hào)返回值def __getitem__(self, item):return self._cards[item]# 實(shí)例化紙牌 my_frenchdeck = FrechDeck() # 獲取紙牌的長(zhǎng)度 print(f"len(my_frenchdeck)={len(my_frenchdeck)}")# 循環(huán)迭代獲得紙牌 for i in my_frenchdeck:print(i) print("*" * 100) # 對(duì)紙牌進(jìn)行切片處理 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)}")# 給每個(gè)紙牌花色進(jìn)行賦權(quán)重 suit_values = dict(spades=3, diamonds=1, clubs=0, hearts=2)# 根據(jù)傳入的單個(gè)card計(jì)算出總的權(quán)重,依據(jù)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 # 根據(jù)總權(quán)重值進(jìn)行排序 for card in sorted(my_frenchdeck, key=spades_high):i += 1print(f"i={i},card={card},weights = {spades_high(card)}")2. 特殊方法覆寫(xiě)
from math import hypot# 定義一個(gè)向量Vector class Vector:def __init__(self, x=0, y=0):self.x = xself.y = y# 覆寫(xiě)向量打印的寫(xiě)法def __repr__(self):return "Vector(%r,%r)" % (self.x, self.y)# 覆寫(xiě)向量abs方法,向量的模def __abs__(self):return hypot(self.x, self.y)# 覆寫(xiě)向量加法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)# 覆寫(xiě)向量和標(biāo)量的乘法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)- 用生成器初始化元組和數(shù)組
總結(jié)
以上是生活随笔為你收集整理的流畅的Python(1)- 一摞Python风格的纸牌的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: iPhone 各屏幕尺寸及解析
- 下一篇: python 离散点 等高线_飞时达软件