python 0基础学习笔记12:高阶函数、测试、远程访问windows、破解密码

高阶函数-map:

def chr2int(chr):
    return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[chr]

list1 = ['2','4','1','6']
res = map(chr2int,list1)
print(res)
print(list(res))

l = map(str,[1,2,3,4])
print(list(l))

结果:
<map object at 0x0000000002826E10>
[2, 4, 1, 6]
[‘1’, ‘2’, ‘3’, ‘4’]

高阶函数reduce(fit,lsd):

参数1为函数,参数2 为列表
功能:一个函数作用在序列上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素累计运算。
reduce(f,[a,b,c,d]
f(f(f(a,b),c),d)

高阶函数-filter(fn,lsd):

参数1 为函数,参数2为序列
功能:用于过滤序列,把传入的函数依次作用与序列的每个元素,根据返回的是True还是Flase决定是否保留该元素。

list1 = [1,2,3,4,5,6,7,8,9]

def func(num):
    if num%2==0:
        return True
    return False
l = filter(func,list1)
print(list(l))#[2, 4, 6, 8]

高阶函数-sorted:

排序:冒泡、选择、 快速、插入、计数器等排序方法

#升序排序
list1 = [1,9,3,4,5,6,7,8]
print(sorted(list1))#[1, 3, 4, 5, 6, 7, 8, 9]
#按绝对值大小排序,key接受函数来实现自定义排序规则
list2 = [1,9,-3,4,5,-6,7,8]
print(sorted(list2,key = abs))#[1, -3, 4, 5, -6, 7, 8, 9]
print(sorted(map(abs,list2)))#[1, 3, 4, 5, 6, 7, 8, 9]

#降序排序,reverse表示反转
print(sorted(list1,reverse = True))#[9, 8, 7, 6, 5, 4, 3, 1]

list3 = ['e3rf','fgea43r12','34567xcv','21sazcvf']
print(sorted(list3,key = len))#默认升序['e3rf', '34567xcv', '21sazcvf', 'fgea43r12']
def mylen(str):
    return len(str)
print(sorted(list3,key = mylen))#结果同上,说明这里的len可以自己定义函数

对函数进行单元测试:

单元测试:
作用:用来对一个函数、类、模块来进行正确性校验工作。
结果:1、单元测试通过,说明我们测试的函数功能正常
2、单元测试不通过,说明函数功能有BUG,要么测试条件输入有误

def mySum(x,y):
    return x+y
def mySub(x,y):
    return x-y
import unittest
from ceshi import mySum
from ceshi import mySub

class Test(unittest.TestCase):
    def setUp(self):
        print('开始测试自动调用')
    def tearDown(self):
        print('结束测试时自动调用')
    #为了测试mySum
    def test_mySum(self):
        self.assertEqual(mySum(1,2),3,'加法有误')
    def test_mySub(self):
        self.assertEqual(mySub(2,1),1,'减法有误')
if __name__ == '__main__':
    unittest.main()

对类进行单元测试:

class Person(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def getAge(self):
        return self.age
from person import Person

per = Person('tom',20)
print(per.getAge())
import unittest
from person import Person

class Test(unittest.TestCase):
    def test_init(self):
        p = Person('zhangsan',23)
        self.assertEqual(p.name,'zhangsan','属性赋值有误')
    def test_getAge(self):
        p = Person('zhangsan',25)
        self.assertEqual(p.getAge(),p.age,'函数有误')
if __name__ == '__main__':
    unittest.main()

文档测试:

import doctest
#doctest模块可以提取注释中的代码执行,严格按照python交互模式的输入提取
def mySum(x,y):
    '''
    get The Sum from x and y
    :param x: firstNum
    :param y: SecondNum
    :return: sum
    example:
    #注意有空格
    >>> print(mySum(1,2))
    3
    '''
    return x+y
print(mySum(1,2))
doctest.testmod()

远程访问windows:

import telnetlib

def telnetDoSomething(IP,user,passwd,command):
    try:
    #链接服务器
        telnet = telnetlib.Telnet(IP)
    #设置调试级别
        telnet.set_debuglevel(2)

    #读取输入用户名信息
        rt = telnet.read_until('Login username:'.encode('utf-8'))
    #写入用户名
        telnet.write((user+'\r\n').encode('utf-8'))
    # 读取输入用户密码信息
        rt = telnet.read_until('Login passwd:'.encode('utf-8'))
    # 写入密码
        telnet.write((passwd + '\r\n').encode('utf-8'))
    # 读取验证IP
        rt = telnet.read_until('Domain name:'.encode('utf-8'))
    # 写
        telnet.write((IP + '\r\n').encode('utf-8'))
    # 登陆成功,写指令
        rt = telnet.read_until('>'.encode('utf-8'))
        telnet.write((command + '\r\n').encode('utf-8'))
    #命令执行成功,会继续读到>,失败的话,一般不会是>
        rt = telnet.read_until('>'.encode('utf-8'))
    #断开链接
        telnet.close()
        return True
    except:
        return False
if __name__ == '__main__':
    IP = '10.0.142.197'
    user = ''
    passwd = '***'
    command = 'tasklist'
    telnetDoSomething(IP,user,passwd,command)

密码破解:

#Arrangement:排列
# Permutation:全排列
import itertools
mylist = list(itertools.permutations([1,2,3,4],3))
print(mylist)
print(len(mylist))
#组合
mylist = list(itertools.combinations([1,2,3,4],3))
print(mylist)
print(len(mylist))
#用于生成密码,其他可能还需要加大小写的字母
mylist = list(itertools.product([0,1,2,3,4,5,6,7,8,9],repeat=4))
print(mylist)
print(len(mylist))

破解密码:穷举法

import itertools
import time
passwd = (''.join(x) for x in itertools.product('0123456789',repeat=3))
# print(next(passwd))
# print(next(passwd))
# print(next(passwd))
while True:
    try:
        time.sleep(0.5)
        str = next(passwd)
        print(str)
    except StopIteration as e:
        break
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值