part1:猜拳游戏
1 #coding=utf-8 #当有汉语时可能编译器不认识,需要定义代码 2 ''' 3 多行注释 4 写这个程序是为了熟悉python的基本语法 5 这是第一个小例子包含简单的if判断,循环和输入输出 6 实现功能是循环猜数字游戏 7 ''' 8 #这是一个python程序---单行注释 9 10 11 import random #类似Java的导入包操作 12 13 while True: #python 中没有大括号这个概念,利用缩进和冒号来进行代码的分割 14 15 computer = random.randint(1,3) 16 #不需要专门定义变量,用到即定义 括号的作用为限制随机数的范围 17 18 print("请选择: ") 19 # 作为换行符,这个print可不是简单的c语言中的print---print(name+addr) 20 #类似与java中都print 21 22 player = int(input("1:石头 2:剪刀 3:布 0:退出 ")) 23 #int()为强制类型转换 a=input()可作为接受输入,会自动匹配类型,其实在这里不加int也能正常工作,加int只是为了保证下面if的比较,由于直接的是数字比较所以加上int比较保险 24 if player==0: #就算是if语句也没有括号 25 break 26 if(player==1 and computer==2) or (player==2 and computer==3) or (player==3 and computer==1): 27 print("恭喜你,赢了!") 28 elif player==computer: #没有else if 合为一个关键字了 29 print("平局,差一点咯!") 30 else: 31 print("哎呀,输了")
part 2: 为老师分配办公室
1 '''这是第二个程序主要功能: 2 为8为老师随机分配3个办公室 3 语法:for循环 列表 4 ''' 5 import random 6 7 rooms=[[],[],[]] 8 #定义了一个列表,且是嵌套的 9 #rooms的含义是:包含了办公室和办公室里的老师,建立起办公室和老师的联系 10 ''' 11 列表类似于c语言的数组但功能更强大,里面不仅能装各种类型的数据 12 还可以装不同类型的数据,还可以不用提前定义范围 13 ''' 14 15 teachers = ["A","B","C","D","E","F","G","H"] 16 #定义了老师,并对每位老师赋予名字,对于字符串和单个字符python中没有严格 17 #的区分,单引号双引号均可,但要保证是成对出现的 18 19 for name in teachers: #for 循环的遍历,name是定义并使用的,python中没有定义这个操作 20 randomNum = random.randint(0,2) 21 rooms[randomNum].append(name) 22 ''' 23 python通过缩进来分辨代码块 24 romms.append是向列表中添加元素 25 不要把name认为是int i 这种变量,其实更像c++中的iterator:it 把元素保存 26 python中的for采用的是迭代的方法遍历的 27 ''' 28 29 i = 1 #由于日常序号是从1开始的所以设定初始门号为1 30 for room in rooms: 31 print("办公室%d里面的老师是:"%i) 32 for name in room: 33 print(name,end="") 34 #print()默认的是输出后就换行,end=“”就是为了让其不换行 35 print(" ") #起一个换行的作用 36 i+=1 #没有i++这个操作
part 3:学生管理系统01
1 stuInfos = [] #保存学生信息,使用列表,stuInfos 为全局变量 2 3 def main(): 4 5 while True: 6 printMenu() #调用打印函数,打印出主界面 7 key = int(input("请选择功能:")) 8 #当要输入字符串时,要用双引号括起来,对于数字python3会自动处理的 9 #在python2中认为输入都是字符串看待,因此需要转换类型 10 11 if key == 1: 12 addStuInfo() 13 elif key == 2: 14 removeStuInfo() 15 elif key == 3: 16 updateStuInfo() 17 elif key == 4: 18 findStuInfo() 19 elif key == 5: 20 showStuInfo() 21 else : 22 break 23 ''' 24 在main这个函数的定义中可以发现addStuInfo()这样的函数是调用在定义之前的,python是支持这种操作的 25 但是不能把main函数的执行放在定义之前,不是因为main函数的特殊性,python中main函数就是普通的函数 26 是因为在这个程序中main是直接执行的函数,要先有定义,而def main 是定义函数,可以有前引用 27 ''' 28 29 #定义了一个初始界面的函数,可以前引用而不加声明 30 def printMenu(): 31 print("="*30) 32 print(" 学生管理系统") 33 print("1. 添加学生信息") 34 print("2. 删除学生信息") 35 print("3. 修改学生信息") 36 print("4. 查询学生信息") 37 print("5. 显示所有学生信息") 38 print("0. 退出系统") 39 print("="*30) 40 41 def addStuInfo(): 42 newId = input("请输入新学生学号:") 43 newName = input("请输入新学生姓名:") 44 newSex = input("请输入新学生性别:") 45 46 47 newInfo = {} #newInfo 要保存姓名 性别 等信息需要有对应的关系,所以采用字典保存,类似于c++中的map,一对一 48 49 newInfo['name'] = newName 50 newInfo['sex'] = newSex 51 newInfo['id'] = newId 52 53 stuInfos.append(newInfo) 54 55 def removeStuInfo(): 56 findId = input("请输入要删除的学生学号:") 57 for tempInfo in stuInfos: #遍历列表,temInfo是一个字典,几种格式的嵌套(列表里套字典) 58 if tempInfo['id'] == findId: 59 stuInfos.remove(tempInfo) 60 print("删除学生成功!") 61 break; 62 63 64 def findStuInfo(): 65 findId = input("请输入要查找的学生学号:") 66 flag = 0 67 for tempInfo in stuInfos: 68 if tempInfo['id'] == findId: 69 print("学号 姓名 性别") 70 print("%s %s %s"%(tempInfo['id'],tempInfo['name'],tempInfo['sex'])) 71 flag =1 72 if flag == 0: 73 print("输入的学号不存在!请重新输入") 74 findStuInfo() 75 76 def showStuInfo(): 77 print("学号 姓名 性别") 78 for tempInfo in stuInfos: 79 print("%s %s %s"%(tempInfo['id'],tempInfo['name'],tempInfo['sex'])) 80 81 82 #调用main函数,python中main函数不在是必须的了,没有主函数概念 83 main() 84 85 ''' 86 这个程序有许多不完善的地方: 87 查找功能没有实现,操作前没有确认学生是否存在,当两个学号相同时也没有给出提示 88 只是简单地实现这个功能,了解python的基础语法 89 '''
part 4:飞机游戏
1 #codeing=utf-8 #为了保证在python2中也能用 2 3 import pygame #导入python中专门的游戏包 4 import time #导入时间的包,后面sleep函数 5 from pygame.locals import * #从pygame里导入按键检测的包 6 error = 0.0000001 7 8 class HeroPlane(object): 9 def __init__(self,screen): #在创建对象的时候就进行初始化,相当于构造函数 10 11 self.x =200 #设置飞机的默认位置 12 self.y =450 13 self.screen = screen #把显示的窗口传递给飞机对象,后面能够使用 14 self.imageName = "hero.gif" #飞机的保存路径 15 self.image = pygame.image.load(self.imageName).convert() #根据路径生成飞机图片 16 self.bulletList = [] #用来存储飞机发射的子弹,子弹包含位置和图片信息,所以每一个子弹都是一个对象 17 18 def display(self): 19 self.screen.blit(self.image,(self.x,self.y)) #在设定的位置处显示出飞机 20 21 '''不考虑bulletList内存的情况下,实际上随着子弹数目的增加内存迟早会有用尽的时候 22 为了避免这一情况可以尽心判断当子弹在视野之外时删除子弹 23 for bullet in self.bulletList: #把子弹的显示放在飞机的显示里,不要放在主函数里否则是面向过程了 24 bullet.display() 25 bullet.move() #让子弹移动,其实质是刷新子弹的位置''' 26 27 28 29 '''for i in self.bulletList: 30 if self.y < 0: 31 self.bulletList.remove(i) 32 这样删除会带来一个隐患,以a=[1,2,3,4,5]当删除3时,列表会自动向前补,4会占据3的位置但由于for循环 33 已经遍历过3的位置l,所以会漏掉4这样操作不安全 34 正确的思路是,再定义一个列表,把要删除的子弹对象先放在列表中(原列表仍有子弹,只是复制了一下)然后遍历 35 新列表,在遍历的时候删除原列表的子弹 36 ''' 37 38 needDelItemList = [] #存放要删除的子弹 39 40 for i in self.bulletList: 41 if i.judge(): #在判断的时候面向对象里如果要使用属性最好定义一个方法,直接self.y < 0 不太好 42 needDelItemList.append(i) #存放子弹 43 for i in needDelItemList: 44 self.bulletList.remove(i) #删除子弹 45 for bullet in self.bulletList: #遍历并移动子弹 46 bullet.display() 47 bullet.move() 48 49 def moveLeft(self): 50 self.x -= 10 51 def moveRight(self): 52 self.x += 10 53 def moveUP(self): 54 self.y -=10 55 def moveDown(self): 56 self.y +=10 57 def shootBullet(self): 58 newBullet = Bullet(self.x,self.y,self.screen) #在发射子弹时不单单要有坐标,还要有此时的屏幕 59 self.bulletList.append(newBullet) 60 '''闲着无聊玩的 61 def moveL(self): 62 if self.y < 140 : 63 self.y += 0.2 64 if int(self.y) % 10 ==0 and self.x <55 : 65 self.shootBullet() 66 if abs(self.y -140) < error: 67 self.x += 0.2 68 if int(self.x) % 10 ==0 and self.x < 121: 69 self.shootBullet() 70 if abs(self.x-120) < error: 71 72 flag = 1 73 print(flag) 74 def moveF(self): 75 if abs(self.x-150) < error: 76 self.x += 0.2 77 print("123") 78 else: 79 self.y -= 0.2 80 if int(self.y)%10 == 0: 81 self.shootBullet() 82 ''' 83 84 class Bullet(object): 85 def __init__(self,x,y,screen): 86 self.x = x+40 87 self.y = y-20 88 self.screen = screen 89 self.image = pygame.image.load("bullet-3.gif").convert() 90 91 def move(self): 92 self.y -=1 93 94 def display(self): 95 self.screen.blit(self.image,(self.x,self.y)) 96 97 def judge(self): #尽管函数有返回值也不需要声明 98 if self.y < 0: 99 return True 100 else: 101 return False 102 103 class EnemyPlane(object): #照搬hreoplane的格式 104 def __init__(self,screen): 105 self.x = 10 106 self.y = 10 107 self.screen =screen 108 self.imageName = "enemy-1.gif" 109 self.image = pygame.image.load(self.imageName).convert() 110 self.bulletList = [] 111 def display(self): 112 self.screen.blit(self.image,(self.x,self.y)) 113 114 115 if __name__ == "__main__": 116 117 flag = 0 118 119 screen = pygame.display.set_mode((480,650),0,32) 120 #创建一个窗口大小为480*650; 0,32为固定模式,标准规定 121 122 background = pygame.image.load("background.png").convert() 123 #创建一张背景图片 124 125 heroPlane = HeroPlane(screen) #创建飞机的对象 126 enemyPlane = EnemyPlane(screen) #创建一个敌机对象 127 128 while True: #循环执行 129 screen.blit(background,(0,0)) #把背景图片贴到窗口上;(0,0)表示图片(0,0)位置开始贴 130 heroPlane.display() #调用显示方法 131 enemyPlane.display() 132 133 '''if flag == 0: 134 heroPlane.moveL() 135 if int(flag) == 1: 136 print("123") 137 heroPlane.moveF() 138 ''' 139 #获取事件,按键 140 for event in pygame.event.get(): 141 if event.type ==QUIT: #QUIT:窗口上的叉号 142 print("exit") 143 exit() #结束程序的执行 144 elif event.type == KEYDOWN: 145 if event.key == K_a or event.key == K_LEFT: #按下小写的a或者是方向键左箭头 146 #print("left") 程序编写时的检测代码 147 heroPlane.moveLeft() 148 elif event.key == K_d or event.key == K_RIGHT: 149 #print("right") 150 heroPlane.moveRight() 151 elif event.key == K_w or event.key == K_UP: 152 #print("up") 153 heroPlane.moveUP() 154 elif event.key == K_s or event.key == K_DOWN: 155 #print("down") 156 heroPlane.moveDown() 157 elif event.key == K_SPACE: 158 #print("space") 159 heroPlane.shootBullet() 160 time.sleep(0.01) #防止CPU占用过高 161 162 pygame.display.update() #更新要显示的内容
1 #coding=utf-8 2 import time 3 import pygame 4 from pygame.locals import* 5 import random 6 7 #创建一个基类,因为飞机和敌机都需要传递screen和name所以提取出来,减少代码 8 class Base: 9 def __init__(self,screen,name): 10 self.screen = screen 11 self.name = name 12 13 class Plan(Base): #飞机类继承了基类 14 def __init__(self,screen,name): 15 super().__init__(screen,name) #调用父类的方法,注意此时的参数为plan的name和screen 16 self.image=pygame.image.load(self.imageName).convert() #保存要显示的飞机图片 17 self.bulletList=[] #存储飞机发射的子弹 18 19 def display(self): #显示方法 20 self.screen.blit(self.image,(self.x,self.y)) #设置飞机要显示的位置 21 22 needDelItemList=[] #存放需要删除的对象信息 23 for i in self.bulletList: 24 if i.judge(): 25 needDelItemList.append(i) 26 for i in needDelItemList: 27 self.bulletList.remove(i) 28 29 for bullet in self.bulletList: #遍历更新导弹 30 bullet.display() 31 bullet.move() #修改所有导弹的位置 32 33 def shootBullet(self): #发射导弹 34 newBullet=PublicBullet(self.x,self.y,self.screen,self.name) 35 self.bulletList.append(newBullet) 36 37 #创建一个玩家飞机类,继承自飞机类 38 class GamePlan(Plan): 39 def __init__(self,screen,name): #重写父类的__init__方法 40 self.x=200 #设置玩家飞机默认的位置 41 self.y=450 42 self.imageName='hero.gif' 43 super().__init__(screen,name) 44 def moveLeft(self): 45 self.x-=10 46 def moveRight(self): 47 self.x+=10 48 49 #创建一个敌人飞机类,继承自飞机类 50 class EnemyPlan(Plan): 51 def __init__(self,screen,name): 52 self.x=0 53 self.y=0 54 self.imageName='enemy-1.gif' 55 super().__init__(screen,name) 56 self.direction='right' #敌机要自行移动,先初始化其移动方向 57 def move(self): 58 #如果碰到了右边的边界,就往左走,碰到了左边的边界,就往右走 59 if self.direction=='right': 60 self.x+=2 61 elif self.direction=='left': 62 self.x-=2 63 64 if self.x>480-50: #规定了左和右的范围,50是飞机的宽度,480是窗口的宽度 65 self.direction='left' 66 elif self.x<0: 67 self.direction='right' 68 69 def shootBullet(self): #随机发射导弹 70 num=random.randint(1,100) 71 if num==88: #当为某一个固定的数时发射,控制随机数的产生范围,即可控制速度 72 super().shootBullet() 73 74 class PublicBullet(Base): #导弹类 75 def __init__(self,x,y,screen,planName): 76 super().__init__(screen,planName) 77 #根据飞机的名字,来选择导弹的类型,即哪个飞机发射的,还要设置子弹飞行的方向 78 if planName=='game': 79 imageName='bullet-3.gif' 80 self.x=x+40 #子弹相对于飞机的位置,不同子弹相对于飞机的位置不同 81 self.y=y-20 82 elif planName=='enemy': 83 imageName='bullet-1.gif' 84 self.x=x+30 85 self.y=y+30 86 self.image=pygame.image.load(imageName).convert() 87 88 def move(self): #导弹的移动方法 89 if self.name=='game': 90 self.y-=2 91 elif self.name=='enemy': 92 self.y+=2 93 94 def display(self): #导弹的显示方法 95 self.screen.blit(self.image,(self.x,self.y)) 96 97 def judge(self): #判断导弹是否超出屏幕范围 98 if self.y>650 or self.y<0: 99 return True 100 else: 101 return False 102 103 if __name__=='__main__': 104 screen=pygame.display.set_mode((480,650),0,32) 105 background=pygame.image.load('background.png').convert() 106 107 gamePlan=GamePlan(screen,"game") #创建一个玩家飞机对象 108 109 enemyPlan=EnemyPlan(screen,"enemy") #创建一个敌人飞机对象 110 111 while True: 112 screen.blit(background,(0,0)) #把背景图片放到窗口中显示 113 gamePlan.display() 114 enemyPlan.move() 115 enemyPlan.shootBullet() 116 enemyPlan.display() 117 118 for event in pygame.event.get(): #判断是否点击了退出按钮 119 if event.type==QUIT: 120 exit() 121 elif event.type==KEYDOWN: 122 123 if event.key==K_a or event.key==K_LEFT: 124 gamePlan.moveLeft() 125 elif event.key==K_d or event.key==K_RIGHT: 126 gamePlan.moveRight() 127 elif event.key==K_SPACE: #控制飞机让其发射导弹 128 gamePlan.shootBullet() 129 130 pygame.display.update() #整个屏幕的更新 131 time.sleep(0.01)