Python趣味代码整合之提升学生编程兴趣

        这篇文章主要是整合一些趣味代码,一方面自己对这些内容比较感兴趣,另一方面希望这些代码能提升学生的编程兴趣,其主旨是代码能在我的电脑上运行并有些趣味。
        参考资料:
                         知乎 - 可以用 Python 编程语言做哪些神奇好玩的事情?
                         知乎 - 学习Python的迷茫,如何高效有趣地学习Python?
                         知乎 - 想知道大家都用python写过哪些有趣的脚本?
                         自学 python 后你用 Python 做过哪些有趣的项目

        下载地址:
                         http://download.csdn.net/detail/eastmount/9662828

        内容包括:
                         一.Python使用turtle绘制国旗
                         二.Python图片转换位字符画
                         三.Python实现俄罗斯方块
                         四.Python自动生成二维码
                         五.Python实现飞机大战
                         六.Python 25行代码实现人脸识别


一. Python使用turtle绘制国旗


        参考文章:http://blog.csdn.net/nancliu/article/details/37972855
                         http://www.oschina.net/code/snippet_103482_14802
        代码如下:

# -*- coding: utf-8 -*-
import turtle  
import time  
import os  
#  
def  draw_square(org_x, org_y, x, y):  turtle.setpos(org_x, org_y)  # to left and bottom connor  turtle.color('red', 'red')  turtle.begin_fill()  turtle.fd(x)  turtle.lt(90)  turtle.fd(y)  turtle.lt(90)  turtle.fd(x)  #print(turtle.pos())  turtle.lt(90)  turtle.fd(y)  turtle.end_fill()  def draw_star(center_x, center_y, radius):  print(center_x, center_y)  turtle.pencolor('black')  turtle.setpos(center_x, center_y)  pt1 = turtle.pos()  turtle.circle(-radius, 360 / 5)  pt2 = turtle.pos()  turtle.circle(-radius, 360 / 5)  pt3 = turtle.pos()  turtle.circle(-radius, 360 / 5)  pt4 = turtle.pos()  turtle.circle(-radius, 360 / 5)  pt5 = turtle.pos()  turtle.color('yellow', 'yellow')  turtle.begin_fill()  turtle.goto(pt3)  turtle.goto(pt1)  turtle.goto(pt4)  turtle.goto(pt2)  turtle.goto(pt5)  turtle.end_fill()  
print(turtle.pos())  turtle.pu()  
draw_square(-320, -260, 660, 440)  
star_part_x = -320  
star_part_y = -260 + 440  
star_part_s = 660 / 30  
center_x, center_y = star_part_x + star_part_s * 5, star_part_y - star_part_s * 5  
turtle.setpos(center_x, center_y)  # big star center  
turtle.lt(90)  
draw_star(star_part_x + star_part_s * 5, star_part_y - star_part_s * 2, star_part_s * 3)  # draw 1st small star  
turtle.goto(star_part_x + star_part_s * 10, star_part_y - star_part_s * 2)    # go to 1st small star center  
turtle.lt(round(turtle.towards(center_x, center_y)) - turtle.heading())  
turtle.fd(star_part_s)  
turtle.rt(90)  
draw_star(turtle.xcor(), turtle.ycor(), star_part_s)  # draw 2nd small star  
turtle.goto(star_part_x + star_part_s * 12, star_part_y - star_part_s * 4)    # go to 1st small star center  
turtle.lt(round(turtle.towards(center_x, center_y)) - turtle.heading())  
turtle.fd(star_part_s)  
turtle.rt(90)  
draw_star(turtle.xcor(), turtle.ycor(), star_part_s)  # draw 3rd small star  
turtle.goto(star_part_x + star_part_s * 12, star_part_y - star_part_s * 7)    # go to 1st small star center  
turtle.lt(round(turtle.towards(center_x, center_y)) - turtle.heading())  
turtle.fd(star_part_s)  
turtle.rt(90)  
draw_star(turtle.xcor(), turtle.ycor(), star_part_s)  # draw 4th small star  
turtle.goto(star_part_x + star_part_s * 10, star_part_y - star_part_s * 9)    # go to 1st small star center  
turtle.lt(round(turtle.towards(center_x, center_y)) - turtle.heading())  
turtle.fd(star_part_s)  
turtle.rt(90)  
draw_star(turtle.xcor(), turtle.ycor(), star_part_s)  
turtle.ht()  
time.sleep(5)  
#os._exit(1)  
         运行结果如下所示,它是动态绘制过程。


  

        注意安装第三方包的方法如下所示:



        在Command Window界面下进入Anaconda2\Scripts文件夹,通过pip安装。





二. Python图片转换位字符画


        参考文字:实验楼 - Python图片转字符画(50行代码)
        代码如下:
# -*- coding: utf-8 -*-
"""
Created on Sun Oct 23 12:45:47 2016@author: yxz15
"""from PIL import Image
import osserarr=['@','#','$','%','&','?','*','o','/','{','[','(','|','!','^','~','-','_',':',';',',','.','`',' ']
count=len(serarr)def toText(image_file):image_file=image_file.convert("L")#转灰度asd =''#储存字符串for h in range(0,  image_file.size[1]):#hfor w in range(0, image_file.size[0]):#wgray =image_file.getpixel((w,h))asd=asd+serarr[int(gray/(255/(count-1)))]asd=asd+'\r\n'return asddef toText2(image_file):asd =''#储存字符串for h in range(0,  image_file.size[1]):#hfor w in range(0, image_file.size[0]):#wr,g,b =image_file.getpixel((w,h))gray =int(r* 0.299+g* 0.587+b* 0.114)asd=asd+serarr[int(gray/(255/(count-1)))]asd=asd+'\r\n'return asdimage_file = Image.open("test.jpg") # 打开图片
image_file=image_file.resize((int(image_file.size[0]*0.9), int(image_file.size[1]*0.5)))#调整图片大小print u'Info:',image_file.size[0],' ',image_file.size[1],' ',count 
try:os.remove('./tmp.txt')
except  WindowsError:passtmp=open('tmp.txt','a')tmp.write(toText2(image_file))tmp.close()
        运行结果如下所示,输入图片转换成txt文字显示。




        缺点:如何通过一个文本编辑器查看原图呢?txt只能设置宋体8号字体最小,但是不能显示全部内容。



三. Python实现俄罗斯方块


        参考文章:趣味python编程之经典俄罗斯方块 - lykyl
        需要注意配置文件 elsfk.cfg,定义了单一方向的原始方块形状组合,具体的格式说明请参见getConf中的注解。同时需要引入"msyh.ttc"中文字体。
        elsfk.cfg文件内容如下:
;1,1,1,1;;
1,1,1,0;1,0,0,0;;
1,1,1,0;0,0,1,0;;
0,1,0,0;1,1,1,0;;
1,1,0,0;1,1,0,0;;
1,1,0,0;0,1,1,0;;
0,1,1,0;1,1,0,0;;
        代码如下:
# -*- coding:utf-8 -*-
'''
经典俄罗斯方块
游戏基于python2.7、pygame1.9.2b8编写。游戏注解中出现的术语解释:
舞台:整个游戏界面,包括堆叠区、成绩等显示区,下个出现方块预告区。
堆叠区:游戏方块和活动方块形状堆放区域,游戏中主要互动区。
方块(基础方块):这里的方块是对基础的小四方形统称,每个方块就是一个正方形。
方块形状:指一组以特定方式组合在一起的方块,也就是大家常说的下落方块形状,比如长条,方形,L形等。
固实方块:特指堆叠区中不能再进行移动,可被消除的基础方块集合。version:1.0
author:lykyl
createdate:2016.9.29
'''import sys  
reload(sys)  
sys.setdefaultencoding('utf8')import random,copy
import pygame as pg
from pygame.locals import *'''
常量声明
'''
EMPTY_CELL=0        #空区标识,表示没有方块
FALLING_BLOCK=1     #下落中的方块标识,也就是活动方块。
STATIC_BLOCK=2      #固实方块标识'''
全局变量声明
变量值以sysInit函数中初始化后的结果为准
'''
defaultFont=None        #默认字体
screen=None     #屏幕输出对象
backSurface=None        #图像输出缓冲画板
score=0     #玩家得分记录
clearLineScore=0        #玩家清除的方块行数
level=1     #关卡等级
clock=None      #游戏时钟
nowBlock=None       #当前下落中的方块
nextBlock=None      #下一个将出现的方块
fallSpeed=10        #当前方块下落速度
beginFallSpeed=fallSpeed        #游戏初始时方块下落速度
speedBuff=0     #下落速度缓冲变量
keyBuff=None        #上一次按键记录
maxBlockWidth=10        #舞台堆叠区X轴最大可容纳基础方块数
maxBlockHeight=18       #舞台堆叠区Y轴最大可容纳基础方块数
blockWidth=30       #以像素为单位的基础方块宽度
blockHeight=30      #以像素为单位的基础方块高度
blocks=[]       #方块形状矩阵四维列表。第一维为不同的方块形状,第二维为每个方块形状不同的方向(以0下标起始,一共四个方向),第三维为Y轴方块形状占用情况,第四维为X轴方块形状占用情况。矩阵中0表示没有方块,1表示有方块。
stage=[]        #舞台堆叠区矩阵二维列表,第一维为Y轴方块占用情况,第二维为X轴方块占用情况。矩阵中0表示没有方块,1表示有固实方块,2表示有活动方块。
gameOver=False      #游戏结束标志
pause=False     #游戏暂停标志def printTxt(content,x,y,font,screen,color=(255,255,255)):'''显示文本args:content:待显示文本内容x,y:显示坐标font:字体screen:输出的screencolor:颜色'''imgTxt=font.render(content,True,color)screen.blit(imgTxt,(x,y))class point(object):'''平面坐标点类attributes:x,y:坐标值'''def __init__(self,x,y):self.__x=xself.__y=ydef getx(self):return self.__xdef setx(self,x):self.__x=xx=property(getx,setx)def gety(self):return self.__ydef sety(self,y):self.__y=yy=property(gety,sety)    def __str__(self):return "{x:"+"{:.0f}".format(self.__x)+",y:"+"{:.0f}".format(self.__y)+"}"class blockSprite(object):'''方块形状精灵类下落方块的定义全靠它了。attributes:shape:方块形状编号direction:方块方向编号xy,方块形状左上角方块坐标block:方块形状矩阵'''def __init__(self,shape,direction,xy):self.shape=shapeself.direction=directionself.xy=xydef chgDirection(self,direction):'''改变方块的方向args:direction:1为向右转,0为向左转。'''dirNumb=len(blocks[self.shape])-1if direction==1:self.direction+=1if self.direction>dirNumb:self.direction=0else:self.direction-=1if self.direction<0:self.direction=dirNumbdef clone(self):'''克隆本体return:返回自身的克隆'''return blockSprite(self.shape,self.direction,point(self.xy.x,self.xy.y))def _getBlock(self):return blocks[self.shape][self.direction]block = property(_getBlock)def getConf(fileName):'''从配置文件中读取方块形状数据每个方块以4*4矩阵表示形状,配置文件每行代表一个方块,用分号分隔矩阵行,用逗号分隔矩阵列,0表示没有方块,1表示有方块。因为此程序只针对俄罗斯方块的经典版,所以方块矩阵大小以硬编码的形式写死为4*4。args:fileName:配置文件名'''global blocks   #blocks记录方块形状。with open(fileName,'rt') as fp:for temp in fp.readlines():blocks.append([])blocksNumb=len(blocks)-1blocks[blocksNumb]=[]#每种方块形状有四个方向,以0~3表示。配置文件中只记录一个方向形状,另外三个方向的矩阵排列在sysInit中通过调用transform计算出来。blocks[blocksNumb].append([])row=temp.split(";")for r in range(len(row)):col=[]ct=row[r].split(",")#对矩阵列数据做规整,首先将非“1”的值全修正成“0”以过滤空字串或回车符。for c in range(len(ct)):if ct[c]!="1":col.append(0)else:col.append(1)#将不足4列的矩阵通过补“0”的方式,补足4列。for c in range(len(ct)-1,3):col.append(0)blocks[blocksNumb][0].append(col)#如果矩阵某行没有方块,则配置文件中可以省略此行,程序会在末尾补上空行数据。for r in range(len(row)-1,3):blocks[blocksNumb][0].append([0,0,0,0])blocks[blocksNumb][0]=formatBlock(blocks[blocksNumb][0])def sysInit():'''系统初始化包括pygame环境初始化,全局变量赋值,生成每个方块形状的四个方向矩阵。'''global defaultFont,screen,backSurface,clock,blocks,stage,gameOver,fallSpeed,beginFallSpeed,nowBlock,nextBlock,score,level,clearLineScore,pause#pygame运行环境初始化pg.init()screen=pg.display.set_mode((500,550))backSurface=pg.Surface((screen.get_rect().width,screen.get_rect().height))pg.display.set_caption("block")clock=pg.time.Clock()pg.mouse.set_visible(False)#游戏全局变量初始化defaultFont=pg.font.Font("msyh.ttc",16)        #yh.ttf这个字体文件请自行上网搜索下载,如果找不到就随便用个ttf格式字体文件替换一下。nowBlock=NonenextBlock=NonegameOver=Falsepause=Falsescore=0level=1clearLineScore=0beginFallSpeed=20fallSpeed=beginFallSpeed-level*2#初始化游戏舞台stage=[]for y in range(maxBlockHeight):stage.append([])for x in range(maxBlockWidth):stage[y].append(EMPTY_CELL)#生成每个方块形状4个方向的矩阵数据for x in range(len(blocks)):#因为重新开始游戏时会调用sysinit对系统所有参数重新初始化,为了避免方向矩阵数据重新生成,需要在此判断是否已经生成,如果已经生成则跳过。if len(blocks[x])<2:t=blocks[x][0]for i in range(3):t=transform(t,1)blocks[x].append(formatBlock(t))#transform,removeTopBlank,formatBlock这三个函数只为生成方块形状4个方向矩阵使用,在游戏其他环节无作用,在阅读程序时可以先跳过。
def transform(block,direction=0):  '''生成指定方块形状转换方向后的矩阵数据args:block:方块形状矩阵参数direction:转换的方向,0代表向左,1代表向右return:变换方向后的方块形状矩阵参数'''result=[]for y in range(4):result.append([])for x in range(4):if direction==0:result[y].append(block[x][3-y])else:result[y].append(block[3-x][y])return result def removeTopBlank(block):'''清除方块矩阵顶部空行数据args:block:方块开关矩阵return:整理后的方块矩阵数据'''result=copy.deepcopy(block)blankNumb=0while sum(result[0])<1 and blankNumb<4:del result[0]result.append([0,0,0,0])blankNumb+=1return resultdef formatBlock(block):'''整理方块矩阵数据,使方块在矩阵中处于左上角的位置args:block:方块开关矩阵return:整理后的方块矩阵数据'''result=removeTopBlank(block)#将矩阵右转,用于计算左侧X轴线空行,计算完成后再转回result=transform(result, 1)result=removeTopBlank(result)result=transform(result,0)return resultdef checkDeany(sprite):'''检查下落方块是否与舞台堆叠区中固实方块发生碰撞args:sprite:下落方块return:如果发生碰撞则返回True'''topX=sprite.xy.xtopY=sprite.xy.yfor y in range(len(sprite.block)):for x in range(len(sprite.block[y])):if sprite.block[y][x]==1:yInStage=topY+yxInStage=topX+xif yInStage>maxBlockHeight-1 or yInStage<0:return Trueif xInStage>maxBlockWidth-1 or xInStage<0:return Trueif stage[yInStage][xInStage]==STATIC_BLOCK:return True                return Falsedef checkLine():'''检测堆叠区是否有可消除的整行固实方块根据检测结果重新生成堆叠区矩阵数据,调用updateScore函数更新玩家积分等数据。return:本轮下落周期消除的固实方块行数'''global stageclearCount=0    #本轮下落周期消除的固实方块行数tmpStage=[]     #根据消除情况新生成的堆叠区矩阵,在有更新的情况下会替换全局的堆叠区矩阵。for y in stage:#因为固实方块在堆叠矩阵里以2表示,所以判断方块是否已经满一整行只要计算矩阵行数值合计是否等于堆叠区X轴最大方块数*2就可以。if sum(y)>=maxBlockWidth*2:tmpStage.insert(0,maxBlockWidth*[0])clearCount+=1else:tmpStage.append(y)if clearCount>0:stage=tmpStageupdateScore(clearCount)return clearCountdef updateStage(sprite,updateType=1):'''将下落方块坐标数据更新到堆叠区数据中。下落方块涉及的坐标在堆叠区中用数字1标识,固实方块在堆叠区中用数字2标识。args:sprite:下落方块形状updateType:更新方式,0代表清除,1代表动态加入,2代表固实加入。'''global stagetopX=sprite.xy.xtopY=sprite.xy.yfor y in range(len(sprite.block)):for x in range(len(sprite.block[y])):if sprite.block[y][x]==1:if updateType==0:if stage[topY+y][topX+x]==FALLING_BLOCK:stage[topY+y][topX+x]=EMPTY_CELLelif updateType==1:if stage[topY+y][topX+x]==EMPTY_CELL:stage[topY+y][topX+x]=FALLING_BLOCKelse:stage[topY+y][topX+x]=STATIC_BLOCKdef updateScore(clearCount):'''更新玩家游戏记录,包括积分、关卡、消除方块行数,并且根据关卡数更新方块下落速度。args:clearCount:本轮下落周期内清除的方块行数。return:当前游戏的最新积分'''global score,fallSpeed,level,clearLineScoreprizePoint=0    #额外奖励分数,同时消除的行数越多,奖励分值越高。if clearCount>1:if clearCount<4:prizePoint=clearCount**clearCountelse:prizePoint=clearCount*5score+=(clearCount+prizePoint)*level#玩得再牛又有何用? :)if score>99999999:score=0clearLineScore+=clearCountif clearLineScore>100:clearLineScore=0level+=1if level>(beginFallSpeed/2):level=1fallSpeed=beginFallSpeedfallSpeed=beginFallSpeed-level*2return scoredef drawStage(drawScreen):'''在给定的画布上绘制舞台args:drawScreen:待绘制的画布'''staticColor=30,102,76       #固实方块颜色activeColor=255,239,0       #方块形状颜色fontColor=200,10,120        #文字颜色baseRect=0,0,blockWidth*maxBlockWidth+1,blockHeight*maxBlockHeight+1        #堆叠区方框#绘制堆叠区外框drawScreen.fill((180,200,170))pg.draw.rect(drawScreen, staticColor, baseRect,1)#绘制堆叠区内的所有方块,包括下落方块形状for y in range(len(stage)):for x in range(len(stage[y])):baseRect=x*blockWidth,y*blockHeight,blockWidth,blockHeightif stage[y][x]==2:pg.draw.rect(drawScreen, staticColor, baseRect)elif stage[y][x]==1:pg.draw.rect(drawScreen, activeColor, baseRect)#绘制下一个登场的下落方块形状printTxt("Next:",320,350,defaultFont,backSurface,fontColor)if nextBlock!=None:for y in range(len(nextBlock.block)):for x in range(len(nextBlock.block[y])):baseRect=320+x*blockWidth,380+y*blockHeight,blockWidth,blockHeightif nextBlock.block[y][x]==1:pg.draw.rect(drawScreen, activeColor, baseRect)#绘制关卡、积分、当前关卡消除整行数printTxt("Level:%d" % level,320,40,defaultFont,backSurface,fontColor)printTxt("Score:%d" % score,320,70,defaultFont,backSurface,fontColor)printTxt("Clear:%d" % clearLineScore,320,100,defaultFont,backSurface,fontColor)#特殊游戏状态的输出if gameOver:printTxt("GAME OVER",230,200,defaultFont,backSurface,fontColor)   printTxt("<PRESS RETURN TO REPLAY>",200,260,defaultFont,backSurface,fontColor)   if pause:printTxt("Game pausing",230,200,defaultFont,backSurface,fontColor)   printTxt("<PRESS RETURN TO CONTINUE>",200,260,defaultFont,backSurface,fontColor)   def process():'''游戏控制及逻辑处理'''global gameOver,nowBlock,nextBlock,speedBuff,backSurface,keyBuff,pauseif nextBlock is None:nextBlock=blockSprite(random.randint(0,len(blocks)-1),random.randint(0,3),point(maxBlockWidth+4,maxBlockHeight))if nowBlock is None:nowBlock=nextBlock.clone()nowBlock.xy=point(maxBlockWidth//2,0)nextBlock=blockSprite(random.randint(0,len(blocks)-1),random.randint(0,3),point(maxBlockWidth+4,maxBlockHeight))#每次生成新的下落方块形状时检测碰撞,如果新的方块形状一出现就发生碰撞,则显然玩家已经没有机会了。gameOver=checkDeany(nowBlock)#游戏失败后,要将活动方块形状做固实处理if gameOver:updateStage(nowBlock,2)'''对于下落方块形状操控以及移动,采用影子形状进行预判断。如果没有碰撞则将变化应用到下落方块形状上,否则不变化。'''tmpBlock=nowBlock.clone()       #影子方块形状'''处理用户输入对于用户输入分为两部分处理。第一部分,将退出、暂停、重新开始以及形状变换的操作以敲击事件处理。这样做的好处是只对敲击一次键盘做出处理,避免用户按住单一按键后程序反复处理影响操控,特别是形状变换操作,敲击一次键盘换变一次方向,玩家很容易控制。'''for event in pg.event.get():if event.type== pg.QUIT:sys.exit()pg.quit()elif event.type==pg.KEYDOWN:if event.key==pg.K_ESCAPE:sys.exit()pg.quit()elif event.key==pg.K_RETURN:if gameOver:sysInit()returnelif pause:pause=Falseelse:pause=Truereturnelif not gameOver and not pause:if event.key==pg.K_SPACE:tmpBlock.chgDirection(1)elif event.key==pg.K_UP:tmpBlock.chgDirection(0)if not gameOver and not pause:'''用户输入处理第二部分,将左右移动和快速下落的操作以按下事件处理。这样做的好处是不需要玩家反复敲击键盘进行操作,保证了操作的连贯性。由于连续移动的速度太快,不利于定位。所以在程序中采用了简单的输入减缓处理,即通过keyBuff保存上一次操作按键,如果此次按键与上一次按键相同,则跳过此轮按键处理。'''keys=pg.key.get_pressed()if keys[K_DOWN]:tmpBlock.xy=point(tmpBlock.xy.x,tmpBlock.xy.y+1)keyBuff=Noneelif keys[K_LEFT]:if keyBuff!=pg.K_LEFT:tmpBlock.xy=point(tmpBlock.xy.x-1,tmpBlock.xy.y)keyBuff=pg.K_LEFTelse:keyBuff=Noneelif keys[K_RIGHT]:if keyBuff!=pg.K_RIGHT:tmpBlock.xy=point(tmpBlock.xy.x+1,tmpBlock.xy.y)keyBuff=pg.K_RIGHTelse:keyBuff=Noneif not checkDeany(tmpBlock):updateStage(nowBlock,0)nowBlock=tmpBlock.clone()#处理自动下落speedBuff+=1if speedBuff>=fallSpeed:speedBuff=0tmpBlock=nowBlock.clone()tmpBlock.xy=point(nowBlock.xy.x,nowBlock.xy.y+1)if not checkDeany(tmpBlock):updateStage(nowBlock,0)nowBlock=tmpBlock.clone()updateStage(nowBlock,1)else:#在自动下落过程中一但发生活动方块形状的碰撞,则将活动方块形状做固实处理,并检测是否有可消除的整行方块updateStage(nowBlock,2)checkLine()nowBlock=Noneelse:updateStage(nowBlock,1)drawStage(backSurface)screen.blit(backSurface,(0,0))pg.display.update()clock.tick(40)def main():'''主程序'''getConf("elsfk.cfg")sysInit()while True:process() if __name__ == "__main__":main()
        运行结果如下所示:

  

        注意:需要pip install pygame安装该包,同时横向移动每次感觉总是两步。



四. Python自动生成二维码


        参考文章:https://github.com/sylnsfar/qrcode/
        中文地址:https://github.com/sylnsfar/qrcode/blob/master/README-cn.md
        从github上下载源代码,代码如下:


        然后需要"pip install myqr"安装包,命令行方式如下:
# 概括
myqr    Words[-v {1,2,3,...,40}][-l {L,M,Q,H}][-n output-filename][-d output-directory][-p picture_file][-c][-con contrast][-bri brightness]
        普通二维码 介绍了 Words, -v, -l, -n, -d
        艺术二维码 介绍了 -p, -c, -con, -bri
        动态GIF二维码 介绍了动态的生成方法和注意点

myqr https://github.com -n github_qr.jpg  -d .../paths/


        同时,重点是可以在线生成二维码。
        网址:http://www.amazing-qrcode.com/
        添加最近我申请的域名"www.eastmountyxz.com"并上传图片,如下所示:



          得到如下所示的二维码,通过微信扫码是可以访问我的主页的,不错。

        问题:如何运行py文件及动态二维码,即调用"myqr https://github.com"。




五. Python实现飞机大战


        原文地址:使用Pygame制作微信打飞机游戏PC版 - Kill Console
        下载地址:https://github.com/Kill-Console/PythonShootGame
        第一步,显示背景。
        第二步,显示飞机。
        第三步,让飞机动起来。


        运行结果如下所示:

  




六. Python 25行代码实现人脸识别


        原文推荐:http://python.freelycode.com/contribution/detail/36
        摄像识别:借助摄像头在Python中实现人脸检测 - Python部落
        详解推荐:http://www.cnblogs.com/hdu-2010/p/5861142.html


        1.安装OpenCV
        下载地址为:https://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.13/opencv-2.4.13.exe/download
        安装后如下图所示,选择build\python\2.7\x86\cv2.pyd,复制到python-2.7.9\Lib\site-packages\中即可。


        关于C或者JAVA接口的安装,可参考build\doc\opencv_tutorials.pdf, 里面各种平台的详细安装步骤,以及结合IDE编译的说明。

        2.下载源码
        github网址:https://github.com/shantnu/FaceDetect/
        

        3.运行代码及结果
        运行输入如下代码,去到文件夹下:
        C:\>cd C:\Users\yxz15\Desktop\FaceDetect-master
        python face_detect.py bbbb.jpg haarcascade_frontalface_default.xml


        运行结果如下所示,可以看到人脸都识别出来了。




        4.源码详解
        face_detect.py代码如下所示:
import cv2
import sys# Get user supplied values
imagePath = sys.argv[1]
cascPath = sys.argv[2]# Create the haar cascade
faceCascade = cv2.CascadeClassifier(cascPath)# Read the image
image = cv2.imread(imagePath)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# Detect faces in the image
faces = faceCascade.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=5,minSize=(30, 30)#flags = cv2.CV_HAAR_SCALE_IMAGE
)print("Found {0} faces!".format(len(faces)))# Draw a rectangle around the faces
for (x, y, w, h) in faces:cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)cv2.imshow("Faces found", image)
cv2.waitKey(0)


        其他推荐代码:(由于没有运行成功,暂不添加进来)
        Python趣味编程:定时给Ta讲笑话
        Genetic Programming: Evolution of Mona Lisa
        https://github.com/andersbll/neural_artistic_style


        最后文章对你有所帮助,上课内容还需要继续探索,但enjoy myself~
          (By:Eastmount 2016-10-24 下午6点半  http://blog.csdn.net/eastmount/   )



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/70326.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

趣学算法第二次

14天阅读挑战赛一、一棋盘的麦子 计算一棋盘的麦子&#xff0c;python代码如下&#xff1a; import matplotlib.pyplot as plt s[] def cal(n):sum0i0while i<n:sumsumpow(2,i)i1s.append(sum)return s nint(input("请输入一个数&#xff1a;")) xrange(n1) for …

《趣学算法》阅读笔记(二)

14天阅读挑战赛 话不多说&#xff0c;我们接着上篇文章《趣学算法》阅读笔记&#xff08;一&#xff09;&#xff0c;继续总结学习 1. 第一章 算法之美 1.3 哥德巴赫猜想的证明 哥德巴赫猜想&#xff1a;任一大于2的偶数&#xff0c;都可表示成两个素数之和。 验证&#xff1…

趣学python编程答案_《趣学Python编程》习题总结

上周买了本书叫《趣学Python编程》&#xff08;英文名&#xff1a;Python for kids&#xff09;&#xff0c;昨天看完后把书后面的题都做了下。由于第1、2章没有习题&#xff0c;第13章及之后都是描写实例的章节&#xff0c;因此这个总结性的文章中只包含了第3-12章的习题答案。…

小鹅通课程下载(一)

【需求】 花钱买了小鹅通付费课程&#xff0c;想要下载到本地观看或者存档&#xff1f; 【问题】 直接下载视频会有aes-256加密&#xff0c;要自己通过m3u8找密钥用openssl解码 【解决方案】 &#xff08;仅用于windows系统&#xff09; 小鹅通exe运行工具&#xff0c;双击打…

GPT4官方联网功能和插件功能

chatgpt免费入口 http://chat.xutongbao.top https://mbd.baidu.com/newspage/data/landingsuper?context%7B%22nid%22%3A%22news_9764161741531547244%22%7D&n_type-1&p_from-1

mac微信备份位置macos手机微信备份的文件迁移走

mac微信备份位置 如果你没有更改过mac版微信的备份文件夹的位置的话&#xff0c;那么mac版微信备份的聊天记录被保存在电脑的【/User/用户/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/】 一个叫【Backup】的文件夹当…

One Chat for Mac(多功能聊天软件)

One Chat for Mac版,这款软件并不能直接进行聊天服务&#xff0c;但是One Chat Mac可以将一系列的聊天软件进行整合并拥有易于使用的用户界面和用户体验&#xff0c;并且提示通知全部都可以自定义。 测试系统&#xff1a; Macos10.14.6系统 One Chat for Mac版教程 下载完成…

这款应用,让Windows软件也能在Mac上使用起来

伴随着苹果秋季发布会的结束&#xff0c;苹果电脑近期也有了一些降级促销活动&#xff0c;我趁机入手了一台iMac台式&#xff0c;准备从Windows系统转投到Mac系统的怀抱中。 兴致勃勃用了几天后&#xff0c;我发现了一个大问题&#xff01;公司使用的财务统计软件&#xff0c;没…

拿去吧!27款MacBook软件推荐给你

1、ClipboardManager 历史剪粘板管理工具 一个能记录你的剪贴板的软件 人类的本质就是 ctrl c和ctrl v&#xff0c;当复制粘贴多了&#xff0c;自然而然需要一款管理工具 2、自动切换输入法 一个能根据打开应用&#xff0c;自动切换输入法的软件 以我举例&#xff1a;敲代…

Mac上超实用的6款软件,老用户都知道!

今天为大家带来的是6款超实用的Mac软件&#xff0c;让你不再走弯路。 第一款&#xff1a;Amphetamine 防休眠的利器 Amphetamine for mac是应用在Mac上的一款防休眠工具&#xff0c;可以自定义哪些程序运行时不休眠&#xff0c;做到自定义Mac睡眠时间&#xff0c;可以通过超级简…

Mac电脑到底该用什么下载软件?Folx苹果电脑专用

Mac电脑到底该用什么下载软件&#xff1f;我用过的下载管理器中,Folx可以说是数一数二的了&#xff0c;它简洁的界面具有非常浓烈的Mac风格。标签管理、BT搜索、Music集成等功能也是非常的实用。 而 Folx 5对于我&#xff0c;值得说道的就是它的下载管理功能。它能够帮助我非常…

Linux terminal 终端快捷键

Linux terminal 终端快捷键 文章目录 Linux terminal 终端快捷键1. 常用快捷键2. 移动光标3. 编辑命令3. Bang(!)命令4. 控制命令 1. 常用快捷键 ctrl左右键: 在单词之间跳转ctrla: 跳到本行的行首ctrle: 跳到页尾Ctrlu&#xff1a;删除当前光标前面的文字 &#xff08;还有剪…

Windows Terminal 常用快捷键

Windows Terminal 常用快捷键 快捷键使用CtrlShift数字打开新控制台CtrlAlt数字切换控制台ShiftAlt/横向打开新控制台ShiftAlt_/-纵向打开新控制台ShiftAlt方向键控制控制台字体大小CtrlShiftw关闭当前控制台Alt方向键在本标签内切换控制台

Android 桌面快捷方式

Android 快捷方式 使用方式 ShortcutUtils.getInstance().addShortcut(this, MainActivity2.class, liveBundle, "live_Id", "看直播", "看直播", R.drawable.live).addShortcut(this, MainActivity2.class,vodBundle, "vod_Id", &qu…

快捷方式管理软件推荐

文章目录 前言一、Rolan1、简介&#xff1a;2、功能&#xff1a;3、使用&#xff1a; 二、Maye1、简介&#xff1a;2、界面&#xff1a; 三、Lily1、简介&#xff1a;2、功能&#xff1a;3、界面&#xff1a; 四、音速启动一、简介&#xff1a;二、界面&#xff1a; 五、Luink一…

如何在Linux桌面上创建快捷方式?

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 一般而言&#xff0c;Linux环境下在命令行上通过软件包管理工具安装软件&#xff0c;或者从网站直接下载已经编译好的二进制软件包&#xff0c;软件安装好之后不会在桌面上创建快捷方式。接下来如果想要在桌…

Android桌面图标快捷方式

一、背景 长按桌面图标实现快捷方式最早是iOS提供的功能,而Android最早在Android 7.1版本也提供了对这方面的支持,于是在短时间内,像微信,支付宝,头条等流量级应用都提供了这方面的支持,如下图。 现在,长按桌面图标快捷方式已经是很成熟的功能,实现上也比较简单,主…

神州数码与神州控股、神州信息共同主办首届技术年会,透露出什么信号?

11 月 8 日&#xff0c;神州控股、神州数码集团、神州信息共同主办“数字中国 2019 技术年会”&#xff0c;聚焦云计算、大数据、人工智能、区块链、5G 等前沿技术创新与应用实践&#xff0c;众多领域的技术专家展开了深度交流&#xff0c;共同探讨数字时代的技术创新与协同发展…

微软英伟达领投2万张H100打造全球最强超算一跃成为OpenAI强劲敌

OpenAI六大劲敌之一Inflection AI&#xff0c;最新融资13亿美元&#xff01; 这家由DeepMind创始人之一创立的人工智能初创公司&#xff0c;从微软、英伟达、和3位亿万富翁&#xff08;Reid Hoffman、盖茨和Eric Schmidt&#xff09;获得了融资。 Inflection AI发文称&#xf…