# -*- coding: utf-8 -*-
'''
Created on 2020年1月29日
@author: insisted_search
1. 自定义 一个序列,该序列按顺序包含 52 张扑克牌,分别是黑桃、红心、草花、方块的 2~A 。
要求:提供序列的各种操作方法 。
'''
def check_key(key):
if not isinstance(key, int):raise TypeError("索引值必须是整数")
if key < 0:raise IndexError('索引值必须是非负数')
if key >= 52:raise IndexError('索引值不能超过%d'%52)
class PokerSeq:
def __init__(self):
self.__changed = {}
self.__deleted = []
def __len__(self):
return 52
def __getitem__(self,key):
check_key(key)
if key in self.__changed:
return self.__changed[key]
if key in self.__deleted:
return None
ret = ''
t_i = key//13
if t_i == 0:
ret = '黑桃';
elif t_i == 1:
ret = '红心'
elif t_i == 2:
ret = '草花'
else:
ret = '方块'
t_i = key%13
if t_i<9:
ret = ret+str(t_i+2)
elif t_i == 9:
ret = ret+'J'
elif t_i == 10:
ret = ret+'Q'
elif t_i == 11:
ret = ret+'K'
else:
ret = ret+'A'
return ret
def __setitem__(self,key,value):
check_key(key)
self.__changed[key] = value
def __delitem__(self,key):
check_key(key)
if key not in self.__deleted : self.__deleted.append(key)
if key in self.__changed : del self.__changed[key]
if __name__ == '__main__':
sq = PokerSeq()
print(len(sq))
for i in sq:
print(i,end=' ')
sq[1]='大王'
print(sq[1])
del sq[1]
print(sq[1])
sq[1]='小王'
print(sq[1])
pass
# -*- coding: utf-8 -*-
'''
Created on 2020年1月29日
@author: insisted_search
2. 自定义一个序列,该序列按顺序包含所有三位数(如 100 101 102 … ) 。要求 : 提供序列的
各种操作方法。
'''
def check_key(key):
if not isinstance(key, int):raise TypeError("索引值必须是整数")
if key < 0:raise IndexError('索引值必须是非负数')
if key >= 1000-100:raise IndexError('索引值不能超过%d'%52)
class ThreeSeq:
def __init__(self):
self.__changed = {}
self.__deleted = []
def __len__(self):
return 1000-100
def __getitem__(self,key):
check_key(key)
if key in self.__changed:
return self.__changed[key]
if key in self.__deleted:
return None
return key+100
def __setitem__(self,key,value):
check_key(key)
self.__changed[key] = value
def __delitem__(self,key):
check_key(key)
if key not in self.__deleted : self.__deleted.append(key)
if key in self.__changed : del self.__changed[key]
if __name__ == '__main__':
sq = ThreeSeq()
print(len(sq))
for i in sq:
print(i,end=' ')
print('')
sq[1]='1000'
print(sq[1])
del sq[1]
print(sq[1])
sq[1]='1100'
print(sq[1])
pass
# -*- coding: utf-8 -*-
'''
Created on 2020年1月29日
@author: insisted_search
3. 自定义一个迭代器,该迭代器分别返回 1 , 1+2, 1+2+3 …的累积和 。
'''
class AndIter:
def __init__(self,end_num):
if end_num < 1:
raise ValueError('异常:初始化值不能小于1')
self.__end_num = end_num
self.__and_value = 0
self.__init_num = 1
def __next__(self):
if self.__init_num>self.__end_num:
raise StopIteration("异常:停止迭代")
self.__and_value += self.__init_num
self.__init_num = self.__init_num +1
return self.__and_value
def __iter__(self):
return self
if __name__ == '__main__':
iter = AndIter(10)
for ie in iter:
print(ie,end=' ')
print("")
try:
iter = AndIter(2)
print(next(iter))
print(next(iter))
print(next(iter))
except Exception as e:
print(e)
try:
iter = AndIter(0)
except Exception as e:
print(e)
pass
# -*- coding: utf-8 -*-
'''
Created on 2020年1月29日
@author: insisted_search
4. 自定义一个生成器,该生成器可按顺序返回 52张扑克牌 , 分别是黑桃、红心、草花、方块
的 2~A 。
'''
def PokerCreate():
hs = ['黑桃','红心','草花','方块']
sz = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
for h in hs:
for s in sz:
yield h+s
if __name__ == '__main__':
pc = PokerCreate()
for p in pc:
print(p)
pass
'''
Created on 2020年1月29日
@author: insisted_search
5. 自定义一个生成器,可依次返回 l , 2, 3, 4 …的阶乘 。
'''
def FactorialCreate(value):
fac = 1
for i in range(1,value+1):
fac = fac*i
yield fac
if __name__ == '__main__':
fc = FactorialCreate(10)
for f in fc:
print(f)
pass
# -*- coding: utf-8 -*-
'''
Created on 2020年1月29日
@author: insisted_search
6. 自定义一个生成器,可依次访问前面目录下的所有 Python 源文件(以 .py 为后缀的文件〉 。
'''
import os
import fnmatch
def search_files():
for root, dirs, files in os.walk('.'):
for filename in fnmatch.filter(files, '*.py'):
yield os.path.join(root, filename)
if __name__ == '__main__':
sf = search_files()
for s in sf:
print(s)
pass
# -*- coding: utf-8 -*-
'''
Created on 2020年1月29日
@author: insisted_search
7. 自定义 一个代表 二维坐标系上某个点的 Point 类(包括 x 、 y 两个属性),为 Point 类提供自
定义的减法运算符支持,计算结果返回两点之间的距离 。
'''
import math
class Point:
def __init__(self,x,y):
self.__x = x
self.__y = y
def __sub__(self,other):
if not isinstance(other, Point):
raise TypeError('减法要求目标为Point')
return math.sqrt((self.__x-other.__x)**2+(self.__y-other.__y)**2)
if __name__ == '__main__':
a = Point(0,0)
b = Point(3,4)
print(b-a)
pass
# -*- coding: utf-8 -*-
'''
Created on 2020年1月29日
@author: insisted_search
8. 自定义代表扑克牌的 Card 类(包括花色和牌面值),为 Card 类提供自定义的比较大小的运
算符支持 , 大小比较标准是先比较牌面值,如果牌面值相等则比较花色,花色大小规则为 : 黑桃>
红心>草花>方块 。
'''
class Card:
def __init__(self,hs,sz):
if hs == '黑桃':
self.__hs = 4
elif hs == '红心':
self.__hs = 3
elif hs == '草花':
self.__hs = 2
elif hs == '方块':
self.__hs = 3
else:
raise ValueError("花色不正确")
t_v = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
self.__sz = t_v.index(sz)
def __lt__(self,other):
if not isinstance(other, Card):
raise TypeError('比较要求目标为Card')
if self.__sz == other.__sz:
if self.__hs < other.__hs:
return True
else:
return False
elif self.__sz < other.__sz:
return True
else:
return False
def __le__(self,other):
if not isinstance(other, Card):
raise TypeError('比较要求目标为Card')
if self.__sz == other.__sz:
if self.__hs <= other.__hs:
return True
else:
return False
elif self.__sz <= other.__sz:
return True
else:
return False
def __eq__(self,other):
if not isinstance(other, Card):
raise TypeError('比较要求目标为Card')
if self.__sz == other.__sz and self.__hs == other.__hs:
return True
else:
return False
def __ne__(self,other):
if not isinstance(other, Card):
raise TypeError('比较要求目标为Card')
if self.__sz == other.__sz and self.__hs == other.__hs:
return False
else:
return True
def __gt__(self,other):
if not isinstance(other, Card):
raise TypeError('比较要求目标为Card')
if self.__sz == other.__sz:
if self.__hs > other.__hs:
return True
else:
return False
elif self.__sz > other.__sz:
return True
else:
return False
def __ge__(self,other):
if not isinstance(other, Card):
raise TypeError('比较要求目标为Card')
if self.__sz == other.__sz:
if self.__hs >= other.__hs:
return True
else:
return False
elif self.__sz >= other.__sz:
return True
else:
return False
if __name__ == '__main__':
a = Card('黑桃','4')
b = Card('红心','4')
print(a<b)
print(a<=b)
print(a==b)
print(a!=b)
print(a>b)
print(a>=b)
pass
来源:CSDN
作者:guzl86
链接:https://blog.csdn.net/insisted_search/article/details/104108462