Python基础--01小项目体现的基础知识

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("哎呀,输了")
View Code

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++这个操作
View Code

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 '''
View Code

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() #更新要显示的内容
version1.0
  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)
verison2.0
原文地址:https://www.cnblogs.com/youngao/p/9315618.html