递归函数

python --递归--匿名函数--枚举--xlwt模块--redis--mysql--加密解密

时光总嘲笑我的痴心妄想 提交于 2019-12-02 12:29:45
知识点一、递归 def fun(): num = int(input('输入内容')) if num%2 == 0: print('偶数') return else: fun()fun() 知识点二、匿名函数 #匿名函数#f = lambda x,b:str(x+b)#入参:返回值#(0,30)补零,map()循环函数,str(x).zfill(2)补零result = list(map(lambda x:str(x).zfill(2),range(1,30)))print(result) #枚举内置函数l = [ 315, "矿泉水", "女", 27, "上海", "摩羯座", "18317155664", 100 ]for index,value in enumerate(l): print('%s-%s'%(index,value)) 知识点三、excel文件 1、写文件 1、1简单写入字符串 import xlwtimport xlutilsbook = xlwt.Workbook()#打开文件sheet = book.add_sheet('sheet1')#添加sheet页# sheet.write(0,0,'名字')#(行,列,内容)# sheet.write(0,1,'电话')# sheet.write(1,0,'小航')# sheet.write(1,1,

递归求阶乘和

社会主义新天地 提交于 2019-12-02 11:45:25
函数fact应返回n的阶乘。函数sum应返回 1!+2!+…+n! 的值。 # include <stdio.h> int fact ( int n ) ; //求单个数的的阶乘 int sum ( int n ) ; int main ( ) { int n ; scanf ( "%d" , & n ) ; printf ( "%d" , sum ( n ) ) ; return 0 ; } int fact ( int n ) { if ( n == 1 || n == 0 ) //0的阶乘也是1 return 1 ; else return n * fact ( n - 1 ) ; } int sum ( int n ) { if ( n == 0 ) return 0 ; if ( n == 1 ) return fact ( n ) ; else return fact ( n ) + sum ( n - 1 ) ; //fact(n)就是计算当前n的阶乘,sum是计算下一个的数的阶乘往后的和 } 来源: https://blog.csdn.net/weixin_45653525/article/details/102757716

使用递归计算给定数组元素的总和

此生再无相见时 提交于 2019-12-02 06:31:56
计算给定数组 arr 中所有元素的总和,转载自CSDN博客网 1.不考虑算法复杂度,用递归做:   function sum(arr) {    var len = arr.length;    if (len == 0){    return 0;    } else if (len == 1){    return arr[0];    } else {    return arr[0] + sum(arr.slice(1));    }   } 2.常规循环:   function sum(arr) {    var s = 0;    for ( var i=arr.length-1; i>=0; i--) {    s += arr[i];    }    return s;   } 3.函数式编程 map-reduce:   function sum(arr) {    return arr.reduce( function (prev, curr, idx, arr){    return prev + curr;    });   } 4.forEach遍历:   function sum(arr) {    var s = 0;    arr.forEach( function (val, idx, arr) {    s += val;    }, 0);   

iOS: 线程中那些常见的锁

拟墨画扇 提交于 2019-12-02 06:13:15
一、介绍 在多线程开发中,锁的使用基本必不可少,主要是为了解决资源共享时出现争夺而导致数据不一致的问题,也就是线程安全问题。锁的种类很多,在实际开发中,需要根据情况选择性的选取使用,毕竟使用锁也是消耗CPU的。 本人虽然一直有使用多线程进行开发,但是对于锁的使用和理解并不是特别的深入,这不看到一篇挺mark的博客: https://www.jianshu.com/p/a236130bf7a2 ,在此基础上稍添加点东西转载过来(尊重原创),一是为了记录便于随时翻阅,而是为了写一遍加深印象,知识都是一个copy和attract的过程。 二、种类 1、互斥锁 概念:对共享数据进行锁定,保证同一时刻只能有一个线程去操作。 抢到锁的线程先执行,没有抢到锁的线程就会被挂起等待。 等锁用完后需要释放,然后其它等待的线程再去抢这个锁,那个线程抢到就让那个线程再执行。 具体哪个线程抢到这个锁是由cpu调度决定的。 常用: @synchronized:同步代码块 example:执行操作 /** *设置属性值 */ -(void)setMyTestString:(NSString *)myTestString{ @synchronized(self) { // todo something _myTestString = myTestString; } } example:创建单例 //注意

二叉树的简单介绍和二叉树的二叉链表存储表示

 ̄綄美尐妖づ 提交于 2019-12-02 01:08:27
二叉树的概念: 二叉树是度不大于2的有序树,二叉树的每个结点最多有两个子树,分别称为“左子树”和“右子树”。二叉树还常被用于实现二叉查找树和二叉堆。 二叉树的性质: 1. 在二叉树的第 i 层上最多有 2 i-1 个结点( i ≥ 1 ) 2. 深度为d的二叉树最多有2^d-1个结点(d ≥ 1) 3. 对于任意一个二叉树,如果度为0的结点个数为n个,度为2的结点为m个,则n = m + 1。 4. 含n个结点的完全二叉树深度为 ⌊ log2n ⌋ +1 。 5. 若对含 n 个结点的完全二叉树从上到下且从左至右进行1至n的编号,则对完全二叉树中编号为i的结点: (1) 若i=1,则该结点是二叉树的根,无双亲,否则,编号为 ⌊ i/2 ⌋ 的结点为其双亲结点; (2) 若2i>n,则该结点无左孩子,否则,编号为2i 的结点为其左孩子结点; (3) 若2i+1>n,则该结点无右孩子,否则,编号为2i+1 的结点为其右孩子结点。 二叉树的二叉链表存储结构的定义及基本操作的实现: //库函数头文件包含 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <queue> using namespace std; //函数状态码的定义 #define TRUE 1 #define FALSE 0

排序算法

隐身守侯 提交于 2019-12-01 15:34:31
说道排序,我们经常提到时间复杂度和空间复杂度,那么什么是时间复杂度什么又是空间复杂度呢? 时间复杂度:时间复杂度是指执行这个算法所需要的计算工作量 求解算法的时间复杂度的具体步骤是:   ⑴ 找出算法中的基本语句;   算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。   ⑵ 计算基本语句的执行次数的数量级;   只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。   ⑶ 用大Ο记号表示算法的时间性能。   将基本语句执行次数的数量级放入大Ο记号中。   如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加 空间复杂度:空间复杂度是指执行这个算法所需要的内存空间   空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度;计算机上占用内存包括   程序代码所占用的空间,输入输出数据所占用的空间,辅助变量所占用的空间这三个方面。   程序代码所占用的空间取决于算法本身的长短,输入输出数据所占用的空间取决于要解决的问题,   是通过参数表调用函数传递而来,只有辅助变量是算法运行过程中临时占用的存储空间,与空间复杂度相关;   通常来说

结对编程作业(python实现)

南楼画角 提交于 2019-12-01 13:35:24
一、 Github项目地址: https://github.com/asswecanfat/git_place/tree/master/oper_make 二、 PSP2.1表格: PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 150 150 · Estimate · 估计这个任务需要多少时间 150 150 Development 开发 1340 1720 · Analysis · 需求分析 50 60 · Design Spec · 生成设计文档 40 60 · Design Review · 设计复审 30 30 · Coding Standard · 代码规范 20 20 · Design · 具体设计 100 120 · Coding · 具体编码 1000 1250 · Code Review · 代码复审 60 80 · Test · 测试(自我测试,修改代码,提交修改) 40 100 Reporting 报告 90 130 · Test Report · 测试报告 50 80 · Size Measurement · 计算工作量 20 20 · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 20 30 合计

结对编程(python实现)

天涯浪子 提交于 2019-12-01 13:33:24
一、 Github项目地址: https://github.com/asswecanfat/git_place/tree/master/oper_make 二、 PSP2.1表格: PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 150 150 · Estimate · 估计这个任务需要多少时间 150 150 Development 开发 1340 1720 · Analysis · 需求分析 50 60 · Design Spec · 生成设计文档 40 60 · Design Review · 设计复审 30 30 · Coding Standard · 代码规范 20 20 · Design · 具体设计 100 120 · Coding · 具体编码 1000 1250 · Code Review · 代码复审 60 80 · Test · 测试(自我测试,修改代码,提交修改) 40 100 Reporting 报告 90 130 · Test Report · 测试报告 50 80 · Size Measurement · 计算工作量 20 20 · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 20 30 合计

python3 递归函数return返回None

点点圈 提交于 2019-12-01 09:12:17
今天写了一个函数,执行之后打印出来的结果是None,不明白,之后百度了一下,这里记一下过程,免得之后再踩坑 #!/usr/bin/python3# -*- coding:utf-8 -*-def binarysystem_to_decimalsystem(): '''实现二进制转十进制''' binarysystem = input('请输入数据:') decimalsystem_sum = 0 try: binarysystem = float(binarysystem) except ValueError: print('输入错误,请重新输入') binarysystem_to_decimalsystem() else: binarysystem = str(binarysystem) if len(binarysystem.replace('1', '').replace('0', '').replace('.', '')) == 0: binarysystem = binarysystem.split('.') binarysystem_int = binarysystem[0] # 整数部分 binarysystem_int = binarysystem_int[::-1] binarysystem_float = binarysystem[1] # 小数部分 for i

【python】-- GIL锁、线程锁(互斥锁)、递归锁(RLock)

二次信任 提交于 2019-12-01 08:31:37
GIL锁 计算机有4核,代表着同一时间,可以干4个任务。如果单核cpu的话,我启动10个线程,我看上去也是并发的,因为是执行了上下文的切换,让看上去是并发的。但是单核永远肯定时串行的,它肯定是串行的,cpu真正执行的时候,因为一会执行1,一会执行2.。。。。正常的线程就是这个样子的。但是,在python中,无论有多少核,永远都是假象。无论是4核,8核,还是16核.......不好意思,同一时间执行的线程只有一个(线程),它就是这个样子的。这个是python的一个开发时候,设计的一个缺陷,所以说python中的线程是假线程。 1、 全局解释器锁(GIL)  无论你启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行 2、GIL存在的意义?  因为python的线程是调用操作系统的原生线程,这个原生线程就是C语言写的原生线程。因为python是用C写的,启动的时候就是调用的C语言的接口。因为启动的C语言的远程线程,那它要调这个线程去执行任务就必须知道上下文,所以python要去调C语言的接口的线程,必须要把这个上限问关系传给python,那就变成了一个我在加减的时候要让程序串行才能一次计算。就是先让线程1,再让线程2.......  每个线程在执行的过程中,python解释器是控制不了的,因为是调的C语言的接口,超出了python的控制范围