zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    消除ie上的:为了有利于保护安全性,IE已限制此网页运行可以访问计算机的脚本或 ActiveX 控件
    JS代码放在head和body中的区别
    iis与apache共用80端口方法集
    如何制作wordpress模板,WordPress模板技术手册
    zt 给博墅加个clocklink时钟
    MSSQL数据库:存储过程实例学习(1)从两个表中取出头两行,然后合并到一个表中
    ecmall 用户后台店铺条幅 在firefox7 以上无法预览的问题
    .NET MVC 实现动态换版
    一道嚼烂的面试题
    [1].gSOAP简介
  • 原文地址:https://www.cnblogs.com/youngao/p/9315618.html
Copyright © 2011-2022 走看看