简单结构:整数、浮点数、布尔值、字符串
多维结构:列表、元组、集合、字典
大概的数据类型有:
整数(int):
表示整数,例如:
# 整形 x = 2 print('%s%s'%('整型:' , x) )
浮点数(float) :
表示带有小数点的数值,例如:
# 浮点型 y = 1.23 print('%s%s'%('浮点型:' , y) )
布尔值(bool):
表示真(True)或假(False)的值,用于逻辑运算,例如:
# 布尔值 is_true = True print('%s%s'%('布尔值:' , is_true) )
字符串(str):
表示文本数据,可以使用单引号或双引号表示,例如:
# 字符串 text = "Welcome, Python!" print('%s%s'%('字符串:' , text) )
列表(list):
有序的可变容器,可以包含不同数据类型的元素,例如:
# 列表 colorlist = [99, 88, 'red'] print('%s%s'%('列表:' , colorlist) )
# 如何创建list列表 #1,创建空列表 l1 = [] print('%s%s'%('l1空列表:',l1)) #2,使用list()函数 l2 = list('I love world!') print('%s%s'%('l2列表:',l2)) l3 = list([1,'gem',[{12,67},'我是子列表中的内容']]) print('%s%s'%('l3列表:',l3)) #列表操作,增删改查 #######新增 # 1,list新增元素,在列表末尾添加新元素。 l1.append('18班') l1.append('苹果') print('%s%s'%('l1空列表append新增元素:',l1)) # 2,extend()方法在列表末尾添加另一个列表中的所有元素,添加的东西可以是字典、元组、集合、字典 lx = [1,2,3,'你好','幸福'] l1.extend(lx) print('%s%s'%('l1列表用extend新增元素:',l1)) # 使用insert()方法,将元素插入到列表指定位置 例如:l1.insert(index,obj) index就是索引的意思,插入到第几个位置,从0开始数 listInsert = [1,2,3,4,5,6] listInsert.insert(1,'我插入到索引1指定位置') print('%s%s'%('Insert插入列表:',listInsert)) ######## 列表删除 #1,del可以删除列表中指定元素的位置,根据索引删除的,例如删除索引为1的'索引1指定位置' delList = [1,'索引1指定位置',2,3,4,5,6] del delList[1] print('%s%s'%('del删除列表指定元素:',delList)) #2,remove()方法也可以删除list中的某个元素,如果移除目标中有多个要移除的元素,那么只会移除匹配到的第一个 removeList = ['上海','北京','深圳','上海'] removeList.remove('上海') print('%s%s'%('remove删除列表指定元素:',removeList)) #3,使用pop()方法删除list中的元素 例如:list.pop(0),这和是删除列表中第一个元素,对应的索引是0 popList = ['上海','北京','深圳','上海'] popList.pop(0) print('%s%s'%('pop删除列表指定元素:',popList)) ###### 列表的修改 editList =['1班','2班','香蕉','橘子'] editList[0]='把1班改为你好' print('%s%s'%('修改列表指定元素:',editList)) ######列表元素的访问 coffee = ['黑咖啡','奥利奥咖啡','热拿铁','冰美式'] # 1,使用in操作符,i代表的是对应的数值 for i in coffee: print(i,end= ' ') # 2, 使用range()函数 # 求coffee列表的长度,这个可以用索引来获取对象,i代表的是索引 length =len(coffee) for i in range(length): print(i,end= ' ') print(coffee[i],end= ' ') ##3,使用iter()函数 for i in iter(coffee): print(i,end= ' ') #4,使用enumerate()函数 遍历列表元素及下标 for i in enumerate(coffee): print('%s%s'%('我是enumerate的下标:',i[0])) print(i,end= ' ')
元组(tuple):
和list类似不同之处在于,有序的不可变容器,例如:
# 元组 my_tuple = (3, 2, 'orange') print('%s%s'%('元组:' , my_tuple) )
######tuple学习 #使用tuple函数创建元组 cre_tuple=tuple(('a','b','c')) print(cre_tuple) ##单个元素 cre_tuple1=(20,'night','warmDay','kiki','link','pink') ###元组的查询 #索引访问 print(cre_tuple1[0]) print(cre_tuple1[-1]) print(cre_tuple1[2]) #切片访问使用切片访问元组的格式为 # tuple_name[strat : end : step] ,其中,start 表示起始索引,end 表示结束索引,step 表示步长。 print(cre_tuple1[0:5:1]) # for循环遍历元组 for i in cre_tuple1: print(i) ###修改元组(元组不可变),可以转换为列表,修改列表后再转换为元组 fruit_tuple =('番茄','香蕉','苹果','梨子') fruit_list=list(fruit_tuple) fruit_list[1]='banana' fruit_tuple = tuple(fruit_list) print(fruit_tuple) ###元组之间的合并、复制 #合并 x=(1,2,3) y=(4,5,6) print(x+y) #复制 print(x * 5) ###删除元组,元组是不可变的,里面的单个元素无法删除和修改,但是可以删除整个元组 del_tuple=('x','y','z','c','v') print(del_tuple) del del_tuple print(del_tuple)
集合(set):
无序的可变容器,不允许重复元素,例如:
# 集合 my_set = {1, 2, 3} print('%s%s'%('集合:' , my_set) )
####集合是个无序、不重复的元素序列 #创建集合 #1,花括号集合 fruits_set={'apple','banana','orange','potato'} print('%s%s'%('fruits_set:' , fruits_set) ) #2,使用set()函数创建 set2=set([1,2,3]) print('%s%s'%('set2:' , set2) ) #3,创建空集合 set3=set() print('%s%s'%('set3:' , set3) ) ##增加元素 #添加单个元素 set3.add('老鹰') print('%s%s'%('set3添加一个元素:' , set3) ) #添加多个元素 set3.update(['小鸡','狐狸','大灰狼']) print('%s%s'%('set3添加多个元素:' , set3) ) ##删除元素 print('%s%s'%('fruits_set:' , fruits_set) ) # remove(删除指定元素),元素不存在时抛出KeyError fruits_set.remove('apple') print('%s%s'%('fruits_set,用remove删除' , fruits_set) ) # discard删除指定元素,元素不存在时不报错 fruits_set.discard('potato') fruits_set.discard('1') print('%s%s'%('fruits_set,用discard删除' , fruits_set) ) #pop()随机删除一个元素并返回 fruits_set.pop() print('%s%s'%('fruits_set,用pop随机删除一个还剩' , fruits_set) ) #clear()清空集合 fruits_set.clear() print('%s%s'%('fruits_set,用clear清空集合' , fruits_set) ) ##集合运算,比如并集、交集、差集、对称差集 #1,并集,两个集合加起来 A={1,2,3} B={3,4,5} #下面两个并集效果一样的,只是写法不一样 print(A | B) print(A.union(B)) #2,交集,就是相同的部分 print(A & B) print(A.intersection(B)) #3, 差集,存在于A集合但不存在于B集合的所有元素,数字3在集合b中,所以不显示 print(A - B) # 输出: {1, 2} print(A.difference(B)) # 同上 # 4,对称差集,两个集合中不重复,不共有的数字集 print(A^B) print(A.symmetric_difference(B))
字典(dict):
无序的键值对集合,例如:
my_dict = {'name': 'Jay', 'age': 35}
print('%s%s'%('字典:' , my_dict) )
####字典的特性:1,字典是无序的只能通过key键来获取值。2,键必须是唯一不可变的数据类型,让比如数字、字符串、元组等。列表不可作为键 #### 值可以是任意类型的对象 #字典查询 scores_dict={'语文':105,'数学':140,'英语':120} #通过键key->'语文'获得对应的分数105 print(scores_dict['语文']) #字典是新增 #通过key添加key-value键值对 scores_dict['物理']=97 print('%s%s'%('scores_dict,用key-value新增字典' , scores_dict) ) # 字典键值对删除 通过del关键字删除 del scores_dict['语文'] print('%s%s'%('scores_dict,用del删除字典' , scores_dict) ) # 修改字典 ,通过key修改value,数学14改成150 scores_dict['数学']=150 print('%s%s'%('scores_dict,用键修改字典数值,140->150' , scores_dict) )
复数(complex):
包含实部和虚部的数值,例如:
# 复数 z = 4 + 4j print('%s%s'%('复数:' , z) )
字节串(bytes):
以字节为单位的不可变序列,例如:
# 字节串 b = b'python' print('%s%s'%('字节串:' , b) )
字节数组(bytearray) :
以字节为单位的可变序列,例如:
# 字节数组 ba = bytearray(b'python') print('%s%s'%('字节数组:' , ba) )
课外小游戏,小恐龙
import pygame # pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple/ '''-------------------------------定义一个小恐龙的类-------------------------------''' class Dragon: #实例化的时候需要输入创建的游戏窗口对象 def __init__(self, Screen): #小恐龙的默认参数 self.screen = Screen self.rectangle = pygame.Rect(50, 210, 40, 45) #小恐龙的边框,预先设计好就不需要移动到地上 self.status = True #两种状态对应两个图片 #定义小恐龙的两种状态(读取图片放在列表里) self.StatusPicture = [ pygame.image.load('./picture/dragon1.png'), pygame.image.load('./picture/dragon2.png') ] self.jump_speed = 0 #小恐龙的跳跃速度,当为正的时候上升,为负的时候下降 self.alive = True #生命状态 self.jump_flag = False #跳跃标志,判断小恐龙是否跳跃 self.count = 0 #更新小恐龙的状态 def update(self): #如果当前没有检测到跳跃且小恐龙在地上,轮流显示图片 if self.jump_flag == False and self.rectangle[1] == 210: if self.count % 15 == 0: #控制小恐龙踏步速度 self.status = not self.status #轮流显示图片,这样可以造成小恐龙在跑的现象 if self.status: screen.blit(self.StatusPicture[0], self.rectangle) else: screen.blit(self.StatusPicture[1], self.rectangle) self.count += 1 self.count %= 10000 #防止溢出 #如果检测到按下跳跃并且小恐龙在地上那就判定为有效跳跃 if self.jump_flag and self.rectangle[1] == 210: self.jump_speed = 15 #将上升速度调为15 #如果小恐龙的跳跃速度不为0,或者当前在空中,说明正在跳跃周期 if self.jump_speed != 0 or self.rectangle[1] != 210: self.rectangle[1] -= self.jump_speed #将小恐龙框移动 self.jump_speed -= 1 #将速度降低,效果为上升越来越慢,下降越来越快 if self.rectangle[1] >= 210: #防止将小恐龙移动到地下 #落地后恢复默认值等待下次跳跃 self.Y_axis = 210 self.jump_speed = 0 self.jump_flag = False #如果在空中那就显示两个图片,效果就是两个脚都伸直(没有太大意义) self.screen.blit(self.StatusPicture[0], self.rectangle) self.screen.blit(self.StatusPicture[1], self.rectangle) '''-------------------------------定义一个地图的类-------------------------------''' class Map: #实例化的时候需要输入创建的游戏窗口对象 def __init__(self, Screen): self.screen = Screen self.speed = 3 #初始速度(像素) self.background_1 = pygame.image.load('./picture/background1.png') # 加载图片 self.background_2 = pygame.image.load('./picture/background2.png') self.background_rectangle_1 = self.background_1.get_rect() # 获取图片大小的矩形区域 self.background_rectangle_2 = self.background_2.get_rect() self.background_rectangle_2[0] = self.background_rectangle_1.right def update(self): #移动框 self.background_rectangle_1 = self.background_rectangle_1.move(-self.speed, 0) self.background_rectangle_2 = self.background_rectangle_2.move(-self.speed, 0) if self.background_rectangle_1.right < 0: #判断第一个背景框如果移动到了窗口外面 self.background_rectangle_1[0] = self.background_rectangle_2.right #将第一个背景框移动到第二个背景框后面,形成循环 if self.background_rectangle_2.right < 0: #和上面同理,最终实现的效果就是两个图片排着队从窗口前划过 self.background_rectangle_2[0] = self.background_rectangle_1.right #将图片放到框里面 self.screen.blit(self.background_1, self.background_rectangle_1) self.screen.blit(self.background_2, self.background_rectangle_2) #主程序 if __name__ == "__main__": "-------------------------------初始化部分-------------------------------" pygame.init() # 初始化pygame pygame.display.set_caption('Dino') #设置窗口标题 screen = pygame.display.set_mode([734, 286]) # 创建并显示窗口,设置这个大小是因为一张背景图就是这么大 clock = pygame.time.Clock() #创建一个时间对象用于控制游戏运作的快慢 map = Map(screen) #创建地图实例 dragon = Dragon(screen) #创建小恐龙实例 score = 0 #设置初始分数 "-------------------------------主循环部分-------------------------------" running = True while running: # 死循环确保窗口一直显示 clock.tick(60) #越大越快 for event in pygame.event.get(): # 遍历所有事件 if event.type == pygame.QUIT: # 如果程序发现单击关闭窗口按钮 running = False if event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN: dragon.jump_flag = True map.update() #更新地图元素框的位置 dragon.update() #更新小恐龙元素框的位置 #这部分暂时测试用 现在背景的移动速度和时间成正比 score += 1 if score % 100 == 0: map.speed += 0.5 pygame.display.flip() # 更新全部显示 pygame.quit()
对应的图片:
目录:

-----------------------
背景1

***********背景2

***********龙1

************龙2

************