python的序列可以包含多个元素,开发者只要实现符合序列要求的特殊方法,就可以实现自己的序列

  序列最重要的特征就是可以包含多个元素,序列有关的特使方法:

  1. __len__(self):该方法的返回值决定该序列元素的个数
  2. __getitem__(self,key):获取指定索引的对应的元素。key应该是整数值,否则会引发TypeError
  3. __contains__(self,item):判断序列是否包含元素
  4. __setitem__(self,key,value):设置指定索引对应的元素
  5. __delitem__(self,key):删除指定索引对应的元素

  问题描述:自定义一个序列,该序列按顺序包含52张扑克,分别是黑桃,红心,梅花,方块的2-A

  要求:提供序列的各种操作方法

7 def check_key(key):
8 if not isinstance(key,int):raise TypeError("索引值必须是整数")
9 if key < 0:raise IndexError("索引值必须是非负数")
10 if key >= 52:raise IndexError("索引值不能大于%d" %52)
11 class poker:
12 def __init__(self):
13 #用于储存被修改的数据
14 self.__change = {}
15 #用于存储已经删除元素的索引
16 self.__delete = []
17 def __len__(self):
18 return 52
19
20 def __getitem__(self,key):
21 check_key(key)
22 if key in self.__change:
23 return self.__change[key]
24 if key in self.__delete:
25 return None
26 ret = ""
27 i = key // 13
28 if i == 0:
29 ret = "黑桃"
30 elif i == 1:
31 ret = "红心"
32 elif i == 2:
33 ret = "梅花"
34 else:
35 ret = "方块"
36 i = key%13
37 if i < 9:
38 ret = ret + str(i + 2)
39 if i == 9:
40 ret = ret + "J"
41 if i == 10:
42 ret = ret + "Q"
43 if i == 11:
44 ret = ret + "K"
45 if i == 12:
46 ret = ret + "A"
47 #根据计算返回元素列表
48 return ret
49 def __setitem__(self,key,value):
50 check_key(key)
51 self.__change[key] = value
52 def __delitem__(self,key,value):
53 check_key(key)
54 if key not in self.__delete:
55 self.__delete.append(key)
56 if key in self.__change:
57 del self.__change[key]
58 if __name__ == "__main__":
59 sequece = poker()
60 print(len(sequece))
61 for i in sequece:
62 print(i,end = "\t")
63 print()

运行结果:

52
黑桃2   黑桃3   黑桃4   黑桃5   黑桃6   黑桃7   黑桃8   黑桃9   黑桃10
黑桃J   黑桃Q   黑桃K   黑桃A   红心2   红心3   红心4   红心5   红心6
红心7   红心8   红心9   红心10  红心J   红心Q   红心K   红心A   梅花2
梅花3   梅花4   梅花5   梅花6   梅花7   梅花8   梅花9   梅花10  梅花J
梅花Q   梅花K   梅花A   方块2   方块3   方块4   方块5   方块6   方块7
方块8   方块9   方块10  方块J   方块Q   方块K   方块A

  大家可能会有疑问,该序列是如何生成序列中的所有元素的?

  该序列本身并不保存序列元素,序列会根据索引动态的计算序列元素,因此序列需要被修改和被删除的元素。该序列引用__change,__delete来保存被修改和被删除的元素。

 7 """
8 自定义一个序列,该序列顺序包含所有的三位数(100,101.....999)
9
10 """
11
12 def check_key(key):
13 if not isinstance(key,int):raise TypeError("索引值必须是整数")
14 if key < 0:raise IndexError("索引值必须是非负数")
15 if key > 899:raise IndexError("索引值不能大于%d" %900)
16 class third_number:
17 def __init__(self):
18 #用于储存被修改的数据
19 self.__change = {}
20 #用于存储已经删除元素的索引
21 self.__delete = []
22 def __len__(self):
23 return 900
24
25 def __getitem__(self,key):
26 check_key(key)
27 if key in self.__change:
28 return self.__change[key]
29 if key in self.__delete:
30 return None
31 number = key + 100
32 return number
33
34 def __setitem__(self,key,value):
35 check_key(key)
36 self.__change[key] = value
37 def __delitem__(self,key,value):
38 check_key(key)
39 if key not in self.__delete:
40 self.__delete.append(key)
41 if key in self.__change:
42 del self.__change[key]
43 if __name__ == "__main__":
44 sequece = third_number()
45 print(len(sequece))
46 for i in sequece:
47 print(i,end = "\t")
48 print()
49 print(sequece[1])

python-自定义一个序列的更多相关文章

  1. Python自定义一个数组类,支持数组之间的四则运算和其他常见方法

    class MyArray: '''保证输入的内容是整型.浮点型''' def ___isNumber(self, num): if not isinstance(num, (int,float)): ...

  2. Python展开一个嵌套的序列

    摘自<Python Cookbook> 4.6 任务 序列中的子序列可能是序列,子序列的子项仍有可能是序列,以此类推,则序列嵌套可以达到任意的深度.需要循环遍历一个序列,将其所有的子序列展 ...

  3. python的reduce函数的使用方法详解以及使用案例,相加,相乘(处理一个序列,然后把序列进程合并操作)

    1.求列表的数字相加之和,还是之前的习惯,写for循环来实现 num_1=[1,2,3,4,5,6,7,8,9] a=0 for n in num_1: #a=a+n a+=n print (a) C ...

  4. 【循序渐进学Python】4. Python中的序列——字典

    字典是Python内建的六种序列之一.字典作为一种常用的数据结构,字典中的值没有特定顺序,每个值都对应于一个唯一的键.键可以是数字.字符串甚至是元组. 1. 创建和使用字典 Python中字典可以使用 ...

  5. 【循序渐进学Python】2. Python中的序列——列表和元组

    序列概览 在Python中有六种内建的序列:列表.元组.字符串.Unicode字符串.buffer对象和xrange对象.在这里暂时只讨论列表和元组.列表和元组的主要区别在于:列表可以修改,元组(不可 ...

  6. Python学习三---序列、列表、元组

    一.序列 1.1.序列概念 pythn中最基本的数据结构是序列(sequence). 序列中每个元素被分配一个序号-元素索引,第一个索引是0,第二个是1,以此类推.类似JAVA中数组和集合中的下标. ...

  7. python高级(二)—— python内置序列类型

    本文主要内容 序列类型分类: (1)容器序列.扁平序列 (2)可变序列.不可变序列 列表推导式 生成器表达式 元组拆包 切片 排序(list.sort方法和sorted函数) bisect pytho ...

  8. Python数据类型之“序列概述与基本序列类型(Basic Sequences)”

    序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要以下几种类型: 3种基本序列类型(Basic Sequence Types):list. ...

  9. Python基础:序列(列表、元组)

    一.概述 列表(list)是由一个个 Python对象 组成的序列.其中,Python对象 可以是任何类型的对象,包括 Python标准类型(数值.字符串.列表.元组和字典)以及 用户自定义类型(类) ...

随机推荐

  1. HDU4578 Transformation(多标记线段树)题解

    题意: 操作有:\(1\).区间都加\(a\):\(2\).区间都乘\(a\):\(3\).区间都重置成\(a\):\(4\).询问区间幂次和\(\sum_{i=l}^rnum[i]^p(p\in\{ ...

  2. 杭电多校HDU 6601 Keen On Everything But Triangle(主席树)题解

    题意: 有\(n\)根长度不一的棍子,q次询问,求\([L,R]\)区间的棍子所能组成的周长最长的三角形.棍长\(\in [1, 1e9]\),n\(\in [1, 1e5]\). 思路: 由于不构成 ...

  3. Git使用指南(下)

    9 初识分支 把每一次的提交,都用线连起来,你会发现,很连贯. C/C++    指针的概念 git reset --hard commitid HEAD    如果说内容已经add到暂存区,此时要想 ...

  4. JWT实现登录认证实例

    JWT全称JSON Web Token,是一个紧凑的,自包含的,安全的信息交换协议.JWT有很多方面的应用,例如权限认证,信息交换等.本文将简单介绍JWT登录权限认证的一个实例操作. JWT组成 JW ...

  5. tfrecords转np.array

    import tensorflow as tf import numpy as np from keras.utils import to_categorical import sys def tfr ...

  6. H5 页面如何展示大量的表格数据

    H5 页面如何展示大量的表格数据 列数过多 图表化 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  7. H5 CSS 悬浮滚动条

    H5 CSS 悬浮滚动条 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  8. fibonacci number & fibonacci sequence

    fibonacci number & fibonacci sequence https://www.mathsisfun.com/numbers/fibonacci-sequence.html ...

  9. mobile css & rem & em & px

    mobile css & rem & em & px 1 rem === 16px 任意浏览器的默认字体高都是 16px, 所有未经调整的浏览器都符合: 1em=16px, 那 ...

  10. TweenMax & GSAP & SVG Animation

    TweenMax & GSAP & SVG Animation svg animation https://greensock.com/tweenmax GSAP https://ww ...