云顶集团娱4118-4118ccm云顶集团
做最好的网站

python之常用模块,今天Python练手小游戏

日期:2019-12-12编辑作者:云顶集团

图片 1 

匡适逢其时.bat文件里的门径后,双击运转就可以。

图片 2

思路: 
1:主飞机从最底层y = 1生成,左右移动 ,每趟左右x轴随机移动n个地点,並且移交送达过的地点每三个岗位都会转移一个子弹,并发出。假使此职责Y轴正巧有小飞机,则击落风姿浪漫架且贰回只好击落,加一分。(击落多架除非下三回随机地方还在原地)

6.hashlib模块

文件属性:

将上述代码另存成auto_version.py文件后,新建auto_version.bat文件,写入以下内容:

2:小飞机到底层时未有,即y = 0时候未有。(那个原则暂且失效)

6.hashlib模块

  摘要算法,也称哈希算法,它能将字符串转成数字,分歧的字符串转成的数字料定不一致,平日用16进制表示。不论在哪台机器上,在如曾几何时候总括,对肖似的字符串结果一而再再而三同样的

  任何摘要算法都是把最棒多的数额集结映射到一个轻巧的联谊中。由此多少个不等的多寡经过某些摘要算法也许有可能拿到雷同的摘要,这种情形被叫做碰撞

用处:

  密文验证的时候加密

  文件的风流倜傥致性校验

# md5算法:产业界通用算法

# sha算法:安全全面越来越高,它有相当多样(sha1,sha2,sha3等),后边数字越大,安全周详越高,且赢得的数字结果越长,总结时间越长。它的用法和md5相近,只需把md5换来sha1就能够。

密文验证的时候加密:

# hashhlib基本用法
import hashlib
m = hashlib.md5()                     # 创建了一个md5算法对象
m.update('aptx4869'.encode('utf-8'))  # 必须将字符串转换成utf-8格式
print(m.hexdigest())                  # 固定格式
# 6d1ce7aa0a1d988dc96a2abcd187b45a

import hashlib
m = hashlib.md5()
m.update('apt'.encode('utf-8'))   # 对源码进行拆分加密,得到的结果与整体加密一致
m.update('x4869'.encode('utf-8'))
print(m.hexdigest())
# 6d1ce7aa0a1d988dc96a2abcd187b45a
# 一段字符串直接进行摘要和分成几段摘要的结果是相同的


# 如果数字过于简单,就可以根据密文进行暴力破解获得源码,安全性不是太好,因此可以采用加盐的方式加密
# 加盐:在源码的基础上提前加一层静态码‘aptx4869’进行二次加密
m3 = hashlib.md5('aptx4869'.encode('utf-8'))
m3.update('123456'.encode('utf-8'))
print(m3.hexdigest())
# 21a36cc3275d352d92ee741b5425c330

# 这种方式较第一种比较安全性有所提高

# 动态加盐: 对于用户登录,可以通过相应的用户登录名进行一次加密,用密码二次加密,密码随着用户账户的变化而变化
username = 'Learning'
password = 'aptx4869'
m4 = hashlib.md5(username.encode('utf-8'))
m4.update(password .encode('utf-8'))
print(m4.hexdigest())
# b9112f155c08b48bba0e595236facc40

# 这种方式安全性大大的有所提高,登陆过程建议使用 

文本的风流浪漫致性校验:(用来证明文件内容是还是不是被曲解)

# 该函数一次性全部交验,如果文件较大,则耗时较大
import hashlib
def check(filename):
    md5obj = hashlib.md5()
    with open(filename,'rb') as f:
            content = f.read()
            md5obj.update(content)
    return md5obj.hexdigest()

# 该函数对于较大的文件,一次性以一定的字节数读取验证来验证一致性
def check(filename):
    md5obj = hashlib.md5()
    with open(filename,'rb') as f:
        while True:
            content = f.read(1024)  
            if content:
                md5obj.update(content)
            else:    # 如果文件为空
                break
    return md5obj.hexdigest()


ret1 = check('file1.txt')     
ret2 = check('file2.txt')
print(ret1)
print(ret2)   

那么难点来了,怎样申明七个文件的生龙活虎致性呢?

图片 3图片 4

import hashlib
def compare(filename1,filename2):
    md5sum = []
    for file in [filename1,filename2]:
        md5 = hashlib.md5()
        with open(file,'rb') as f:
            while True:
                content = f.read(1024)
                if content:
                    md5.update(content)
                else:break
            md5sum.append(md5.hexdigest())
    if md5sum[0] == md5sum[1]:return True
    else :return False

print(compare('f1','f2'))

View Code

图片 5图片 6

import hashlib
def loc(filname1, filname2):
    def check(filename):
        md5obj = hashlib.md5()
        with open(filename,'rb') as f:
            while True:
                content = f.read(5)
                if content:
                    md5obj.update(content)
                else:    # 非空
                    break
        return md5obj.hexdigest()
    if  check(filname1) == check(filname2):
        return True
    else:
        return False

print(loc('a.txt', 'a1.txt'))

View Code

  名字

思想的给文件链接增添版本号的章程是利用gulp-rev,这里建议的解决方案是利用python来代替gulp-rev。

代码如下:

7.configparser

在布局文件里必需有分组(节),分组的组名能够不管起 ,能够蕴涵三个或多少个组,能够叫DEFAULT,它皆有所独特的含义(暗中同意的是全局变量)

# 创建ini文件
import configparser
config = configparser.ConfigParser()
config["DEFAULT"] = {'luffy':'香蕉人',
                     'zero':'三把刀',
                     'sanzhi':'秋刀鱼'}
config['name'] = {'rojie':'onepiece',
                  'BB':'c',
                  'dd':'N'}
# config['www.onepiece.online'] = {'我就试试集合行不行'}  # 报错,只能是字典形式
config['www.onepiece.online'] = {'我就试试集合行不行':'不行啊'}
with open('one.ini', 'w') as f:
   config.write(f)

 写入后内容情势(这里自身是间接用计算机自带的文书阅读器展开的,暗许是gbk格式,用别样阅读器非gbk会生出乱码):

[DEFAULT]
zero = 三把刀
sanzhi = 秋刀鱼
luffy = 香蕉人

[name]
dd = N
bb = c
rojie = onepiece

[www.onepiece.online]
本身就尝试集结可以还是不可以 = 不行呀

增加和删除改操作

# 增删改操作
import configparser
config=configparser.ConfigParser()
config.read('one.ini')
# 删除节'name'
config.remove_section('name')
# 删除节下的某个value值
config.remove_option('www.onepiece.online','我就试试集合行不行')
# 判断是否存在某个标题
print(config.has_section('name'))
# 判断标题section1下是否有user
print(config.has_option('www.onepiece.online','我就试试集合行不行'))
# 添加一个标题
config.add_section('EGG')
#在标题EGG下添加name=egon,age=18的配置
config.set('EGG','name','egon')
config.set('EGG','age','18')

总结:

# section  能够直接操作他的靶子来收获具有的节消息

# option  能够经过找到的节来查看所有的项

4.4.0常用操作方法

 read(3):

  1. 文书张开方式为文本方式时,代表读取3个字符

  2. 文书张开药格局为b形式时,代表读取3个字节

其余的文书内光标移动都是以字节为单位的如:seek,tell,truncate

注意:

  1. seek(卡塔尔(قطر‎是以bytes为单位活动的,遵照字节调解光标地点

  2.tell(卡塔尔(قطر‎是按字节读取光标地点

  3. truncate是截断文件,所以文件的展开药方式必得可写,但是不能够用w或w+等艺术展开,因为那样直接清空文件了,所以truncate要在r+或a或a+等情势下测验效果。

1 import time
2 with open('test.txt','rb') as f:
3     f.seek(0,2)
4     while True:
5         line=f.readline()
6         if line:
7             print(line.decode('utf-8'))
8         else:
9             time.sleep(0.2)

 

 

模块:

  计算机程序的付出进度中,随着程序代码越写越来越多,在二个文件里代码就能够愈加长,越来越不轻易有限支撑。为了编写制定可尊崇的代码,我们把过多函数分组,分别放到分裂的文本里,那样,种种文件包涵的代码就相对少之又少,很多编程语言都利用这种组织代码的艺术。在 Python 中,三个.py 文件就称为多个模块(Module)。

模块分类:

  内置模块  python安装时自带的

  扩充模块  外人写好的,安装之后方可一直利用

        itchat模块(和Wechat相关), beautifulsoap(爬虫模块), selenium(网页自动化测验工具)

        django tornado(框架)

  自定义模块 本身写的模块 

文件名:

import os
import re
import uuid
import sys


def file_extension(path):
    return os.path.splitext(path)[1]


basePath = sys.argv[1]
if len(sys.argv)==1:
    sys.exit()


html_list = []


def find_html(path):
    files = os.listdir(path=path)

    for item in files:
        abs_path = os.path.join(path, item)
        if not os.path.isdir(abs_path) and file_extension(abs_path) == ".html":
            html_list.append(abs_path)

        if (os.path.isdir(abs_path)):
            find_html(abs_path)


def deal_html(html_list):
    for html_path in html_list:
        html_file = open(html_path, "r+", encoding='UTF-8')
        content = html_file.read()
        # print(html_file.read())
        # res = re.sub(r'<link (.*) href="(.*).css".*>',r'<link 1 href="2.css?v=1"3>',content)
        res1 = re.sub(r'<link (.*) href="(.*).css.*"(.*)>', lambda x: '<link ' + x.group(1) + ' href="' + x.group(
            2) + '.css?v=' + uuid.uuid1().hex + '"' + x.group(3) + '>', content)
        res2 = re.sub(r'<script src="(.*).js.*"></script>',
                      lambda x: '<script src="' + x.group(1) + '.js?v=' + uuid.uuid1().hex + '"></script>', res1)
        html_file.seek(0)
        html_file.truncate()
        html_file.write(res2)
        html_file.close()


if __name__ == '__main__':
    find_html(basePath)
    deal_html(html_list)

想打听更加多Python知识也许想与越来越多的恋人一齐念书沟通,能够加群705673780,群众文化艺术件内更加多免费资料可供就学啊~

5.种类化模块 

序列化

把对象(变量卡塔尔从内部存款和储蓄器中成为可存款和储蓄或传输的长河称之为类别化,在Python中叫pickling,在别的语言中也被称之为serialization,marshalling,flattening等等,都是三个意味。

体系化目标

  • 持续化某种意况。在断电可能关机以前可以将日前内部存款和储蓄器中全体的多寡保存下来,后一次程序运维时方可从当前保留的文本内容继续施行。
  • 跨平台数量交互作用。

种类化有多个模块json和pickle,shelve

  json   全部编制程序语言都通用的种类化格式,可是它援救的数据类型特简单(只协助数字,字符串,系列,字典等,不帮助元祖

  pickle  只好在python语言的次第之间传递数据使用,它帮衬python中装有数据类型

  shelve  在py3之后才有,python专有的连串化模块,只针对文件。它只提供一个open方法,而且只可以用字典方式拜会内容

json

 Json模块提供了三个职能:dumps、loads,这五个只在内部存款和储蓄器中操作数据,首要在互联网传输中运用,和七个数据类型与公事打交道

             dump、load ,那五个是一贯将对象系列化之后写入文件,它依赖于贰个文件句柄

import json
dic={'k1':'v1','k2':'v2','k3':'v3'}
str_dic = json.dumps(dic) #将字典转换成字符串,转换后的字典中的元素是由双引号表示的
print(str_dic,type(str_dic))#{"k1": "v1", "k2": "v2", "k3": "v3"} <class 'str'>

dic2 = json.loads(str_dic)#将一个字符串转换成字典类型
print(dic2,type(dic2))#{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} <class 'dict'>

import json
dic={'k1':'v1','k2':'v2','k3':'v3'}
f = open('a.txt','w',encoding='utf-8')
json.dump(dic,f,ensure_ascii=False)  # 先接收要序列化的对象 再接受文件句柄
f.close()

f = open('a.txt','r',encoding='utf-8')
ret = json.load(f)
print(type(ret),ret)

 # json在写入多次dump的时候,不能够对应试行数拾回load来去除数据,pickle能够

# json假诺要写入七个成分,应先将元素dumps种类化,再f.write(序列化+‘n’卡塔尔国写入文件。读的时候先按行读取,再利用loads将读出来的字符串调换到相应数据类型。

pickle(能够把python中的任性数据类型系列化)

  在硬盘上囤积文件有很各个方法,文本文件只是中间一种,借使想囤积列表也许目的之类的开始和结果,能够把对象转变来字符串的形式写入文本文件,然则假使要从文件中复苏对象,则这几个就复杂化了。而python提供的pickle恰巧能产生那或多或少:

# 通过pickle存储python原生对象:
import pickle
D = {'a': 1, 'b': 2}
F = open('datafile.pkl', 'wb')
pickle.dump(D, F)       # pickle.dump()可以把任意对象序列化成一个bytes,然后就可以把bytes写入文件
F.close()

# 取回字典,再用pickle模块中load函数进行一次重建
F = open('datafile.pkl', 'rb')
E = pickle.load(F)
F.close()


import pickle
file = 'wish.data'
lis = ['apple', 'banban']
f = open(file, 'wb')
pickle.dump(lis, f)
f.close()

del lis
f = open(file, 'rb')
storedlis = pickle.load(f)
print(storedlis)    # 又得到了列表

关于类别化自定义类的指标:

class A:
    def __init__(self,name,age):
        self.name=name
        self.age=age
a = A('luffy',18)
# import json
# json.dumps(a)   # 报错,说明json无法存储实例化对象
import pickle
ret = pickle.dumps(a)
print(ret)   # 打印出来的是一串字节
obj = pickle.loads(ret)
print(obj)    # 打印出对象地址
print(obj.__dict__)   # {'name': 'luffy', 'age': 18}

python之常用模块,今天Python练手小游戏。在load的时候,必需拥有被load数据类型对应的类在内部存款和储蓄器里面

shelve(用法律专科高校讲链接)

  python专有的连串化模块,只针对文件,只提供了三个open方法,且是用key来采访的,使用起来和字典相像。

import shelve
f = shelve.open('a.txt')
f['key'] = {'int': 10, 'float': 9.5, 'string': 'Sample data'}
f['ds'] = '范围分为we分我发'
f.close()
# 直接对文件句柄进行操作,就可以存储文件,而且程序会给我们自动创建三个后缀为dir,bak,dat的文件,其中以bat结尾的文件存储的就是b字节数据类型的数据

f1 = shelve.open('a.txt')
a = f1['ds']   # 用key直接取出存储的内容,如果key不存在则会报错
f1.close()
print(a)

# 设置只读模式
f2 = shelve.open('a.txt', flag='r')
f2['key']['float'] = 3.14    # 修改结构中得值,不可以
f2['space'] = 'dwd'          # 覆盖原来的结构,可以
f1.close()

f3 = shelve.open('a.txt')
b = f3['key']['float']       # 对结构的值作修改,但是失败了
f3.close()
print(b)    # 9.5

4.4文本操作方法

python ./auto_version.py "D:your project dir"
        elif self.x < pos_x:

            for i in range(self.x,pos_x + 1):

                self.Interval.append(i)

            print("炮台从坐标x=%d移动到x=%d,沿途轰了%d炮"%(self.x,pos_x,pos_x + 1 -self.x ))

            print(">>>轰出%d个炮的位置是x ="% (pos_x + 1 -self.x),end = "")

            print(self.Interval)

        else:

            self.Interval.append(pos_x)

            print(">>>炮台原地轰了一炮")

            print(">>>轰炮的坐标是x = %s"% str(self.Interval))

 

        """初始化炮台到移动的目标"""

        self.x = pos_x

        self.y = pos_y

        return (pos_x,pos_y)

 

class Small:

    def __init__(self):

        """在y=25随机生成小飞机位置"""

        self.x = r.randint(0,legal_x[1])

        self.y = legal_y[1]

 

    def move(self):

        """固定移动,每次向下一步"""

        new_x = self.x

        mew_y = self.y - 1

        """判断是否越界"""

        if mew_y <= legal_y[0]:

            self.x = r.randint(0,legal_x[1])

            self.y = legal_y[1]

        else:

            self.x = new_x

            self.y = mew_y            

        return (new_x , mew_y)

 

class Boom:

    """核武器"""

    def __init__(self):

        self.x = r.randint(0,legal_x[1])

        self.y = 1

 

 2. random模块

本文由云顶集团娱4118发布于云顶集团,转载请注明出处:python之常用模块,今天Python练手小游戏

关键词:

半即时制手游做职分嫌麻烦云顶集团:,Python爬

停放操作 软件名:anaconda 版本:Anaconda3-5.0.1-Windows-x86_64哈工业余大学学镜像 下载链接: 软件名:Pycharm 版本:py...

详细>>

台积电推出品质增强的7nm和5nm成立工艺,AI把关劲

据国外媒体报导,人工智能和物联网本领在食物饮品行当的行使越发频仍。在此二日的壹次访问中,干红厂SugarCreek...

详细>>

苹果第三财务情状净收益100,Google开掘6处Motoro

侥幸的是,那么些漏洞是由平安商量人口发掘的,他们无意使用那一个漏洞来贪图利益。ZDNet建议,像这样的狐狸尾巴...

详细>>

靠降税巨惠和以旧换新,FB脑机项目拿到进展

推特(TWTR.US卡塔尔国表示,这个市廛并不以为这种本领飞快就能够被消费者所收受。 五月二十一日新闻,据国美国媒...

详细>>