python算法

Python面试必须要看的15个问题

若如初见. 提交于 2020-03-04 06:11:43
引言 想找一份Python开发工作吗?那你很可能得证明自己知道如何使用Python。下面这些问题涉及了与Python相关的许多技能,问题的关注点主要是语言本身,不是某个特定的包或模块。每一个问题都可以扩充为一个教程,如果可能的话。某些问题甚至会涉及多个领域。 我之前还没有出过和这些题目一样难的面试题,如果你能轻松地回答出来的话,赶紧去找份工作吧! 问题1 到底什么是Python?你可以在回答中与其他技术进行对比(也鼓励这样做)。 答案 下面是一些关键点: Python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和Ruby。 Python是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似 x=111 和 x="I'm a string" 这样的代码,程序不会报错。 Python非常适合面向对象的编程(OOP),因为它支持通过组合(composition)与继承(inheritance)的方式定义类(class)。Python中没有访问说明符(access specifier,类似C++中的 public 和 private ),这么设计的依据是“大家都是成年人了”。 在Python语言中,函数是第一类对象(first-class objects)。这指的是它们可以被指定给变量

Python面试必须要看的15个问题

橙三吉。 提交于 2020-03-04 06:11:11
到底什么是Python?你可以在回答中与其他技术进行对比(也鼓励这样做)。 答案 下面是一些关键点: Python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和Ruby。 Python是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似 x=111 和 x="I'm a string" 这样的代码,程序不会报错。 Python非常适合面向对象的编程(OOP),因为它支持通过组合(composition)与继承(inheritance)的方式定义类(class)。Python中没有访问说明符(access specifier,类似C++中的 public 和 private ),这么设计的依据是“大家都是成年人了”。 在Python语言中,函数是第一类对象(first-class objects)。这指的是它们可以被指定给变量,函数既能返回函数类型,也可以接受函数作为输入。类(class)也是第一类对象。 Python代码编写快,但是运行速度比编译语言通常要慢。好在Python允许加入基于C语言编写的扩展,因此我们能够优化代码,消除瓶颈,这点通常是可以实现的。 numpy 就是一个很好地例子,它的运行速度真的非常快,因为很多算术运算其实并不是通过Python实现的。

python【蓝桥杯vip练习题库】ADV-99栅格打印问题

喜夏-厌秋 提交于 2020-03-04 02:06:05
试题 算法提高 栅格打印问题 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述   编写一个程序,输入两个整数,作为栅格的高度和宽度,然后用“+”、“-”和“|”这三个字符来打印一个栅格。   输入格式:输入只有一行,包括两个整数,分别为栅格的高度和宽度。   输出格式:输出相应的栅格。   输入输出样例 样例输入 3 2 样例输出 ±±+ | | | ±±+ | | | ±±+ | | | ±±+ """ @Author:Lixiang @Blog(个人博客地址): https://lixiang007.top/ @WeChat:18845312866 """ import math import string import sys from itertools import permutations import cmath hang , lie = list ( map ( int , input ( ) . strip ( ) . split ( ) ) ) if hang <= 0 or lie <= 0 : sys . exit ( ) flag = hang while flag : flag -= 1 for i in range ( lie + 1 ) : if i == lie : print ( "+" , end = "" ) else :

Tornado

 ̄綄美尐妖づ 提交于 2020-03-04 00:47:23
Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。 Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅 C10K problem 。) pip install tornado 源码安装 https: / / pypi.python.org / packages / source / t / tornado / tornado - 4.3 .tar.gz 一、快速上手 第一步:执行脚本,监听xxxx端口 第二步:浏览器客户端访问 /index --> http://127.0.0

Python __new__和__init__

旧街凉风 提交于 2020-03-03 20:03:57
__new__ 和 __init__ # __init__是实例级别的算法, __new__是类级别的算法 class User ( object ) : def __init__ ( self , username , password ) : self . username = username ; self . password = password print ( '对象已经构建好了' ) #new该方法是当对象构建的时候由解释器自动回调的方法, 该方法必须"返回当前类的对象"" #new方法没有通过, 那么后面的就不会进行 def __new__ ( cls , username , password ) : print ( "User类开始构建" ) return object . __new__ ( cls ) user = User ( "chenjiang" , "chenjiang" ) print ( user ) 结果 User类开始构建 对象已经构建好了 < __main__.User object at 0x0000012508B38A90 > 来源: CSDN 作者: 一个爬坑的Coder 链接: https://blog.csdn.net/qq_39583550/article/details/104630784

PYTHON数据结构与算法学习笔记(六)

[亡魂溺海] 提交于 2020-03-03 02:52:56
目录 树与树算法 树的概念 树的存储与表示 二叉树 二叉树的性质 二叉树的创建 二叉树的遍历 广度优先遍历(层次遍历) 深度优先遍历 树与树算法 树的概念 树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 1、每个节点有零个或多个子节点; 2、没有父节点的节点称为根节点; 3、每一个非根节点有且只有一个父节点; 4、除了根节点外,每个子节点可以分为多个不相交的子树。 例 : 树的术语 1、 节点的度 :一个节点含有的子树的个数称为该节点的度; 2、 树的度 :一棵树中,最大的节点的度称为树的度; 3、 叶节点或终端节点 :度为零的节点; 4、 父节点 :若一个节点含有子节点,则这个节点称为其子节点的父节点; 5、 子节点 :一个节点含有的子树的根节点称为该节点的子节点; 6、 兄弟节点 :具有相同父节点的节点互称为兄弟节点; 7、 节点的层次 :从根开始定义起,根为第1层,根的子节点为第2层,以此类推; 8、 树的高度或深度 :树中节点的最大层次; 9、 堂兄弟节点 :父节点在同一层的节点互为堂兄弟; 10、 节点的祖先 :从根到该节点所经分支上的所有节点;

python实现RSA加解密

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-03 02:12:53
RSA的算法涉及三个参数,n、e、d。 其中,n是两个大质数p、q的积,n的二进制表示所占用的位数,就是所谓的密钥长度。 e和d是一对相关的值,e可以任意取,但要求e与(p-1)*(q-1)互质;再选择d,要求(d*e)mod((p-1)*(q-1))=1。 (n,e),(n,d)就是密钥对。其中(n,e)为公钥,(n,d)为私钥。 RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^d mod n;B=A^e mod n;(公钥加密体制中,一般用公钥加密,私钥解密) e和d可以互换使用,即: A=B^d mod n;B=A^e mod n; 代码参考如下: #coding -*- utf:8 -*- import math import random #生成素数数组 def prime_array(): arraya = [] for i in range(2,100): #生成前100中的素数,从2开始因为2是最小的素数 x = prime(i,2) #i为素数时返回True,则将x加入arraya数组中;2为测试值 if x: arraya.append(i) return arraya #判断是否为素数 def prime(n, test_divisor): if math.sqrt(n) < test_divisor: return True

算法题:猜数字-Python实现

旧巷老猫 提交于 2020-03-02 21:21:18
今天刷的第一道算法题,先拿一道简单点的试试手,这道题目的要求是: 两个人甲乙在猜数字,甲先从1,2,3三个数字中随机抽3次,结果是guess。乙随后也随机抽三次,结果是answer。然后对比甲乙两个人的结果。示例如下: guess:[1,2,3], answer: [1, 2, 3] 那么结果就是猜对了3次 guess: [1,2,3] answer:[3,2,1] 那么结果就是猜对了1次 guess: [1,2,3], answer:[3, 3,1] 那么结果就是猜对了0次 即将guess和answer两个作为参数输入,返回猜对的次数。 我想出来的几个答案如下所示: 答案1: class Solution: def game(self, guess: List[int], answer: List[int]) -> int: count = 0 for i in zip(guess, answer): if i[0] == i[1]: count += 1 return count 思路是:使用zip将两个列表进行组合,返回每个列表中单个元素组成的元组,然后循环对比。如果相等就将临时变量值+1,最终返回统计结果。 答案2: class Solution: def game(self, guess: List[int], answer: List[int]) -> int:

Python设计模式之策略模式

南笙酒味 提交于 2020-03-02 21:16:24
Python 中的设计模式详解之:策略模式 虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用。 《设计模式:可复用面向对象软件的基础》一书中有 23 个模式,其中有 16 个在动态语言中“不见了,或者简化了”。 1、策略模式概述 策略模式 :定义一系列算法,把它们一一封装起来,并且使它们之间可以相互替换。此模式让算法的变化不会影响到使用算法的客户。 电商领域有个使用“策略”模式的经典案例,即根据客户的属性或订单中的商品计算折扣。 假如一个网店制定了下述折扣规则。 有 1000 或以上积分的顾客,每个订单享 5% 折扣。 同一订单中,单个商品的数量达到 20 个或以上,享 10% 折扣。 订单中的不同商品达到 10 个或以上,享 7% 折扣。 简单起见,我们假定一个订单一次只能享用一个折扣。 UML类图如下: Promotion 抽象类提供了不同算法的公共接口,fidelityPromo、BulkPromo 和 LargeOrderPromo 三个子类实现具体的“策略”,具体策略由上下文类的客户选择。 在这个示例中,实例化订单(Order 类)之前,系统会以某种方式选择一种促销折扣策略,然后把它传给 Order 构造方法。具体怎么选择策略,不在这个模式的职责范围内。(选择策略可以使用工厂模式。) 2、传统方法实现策略模式: from abc import ABC

16、编译安装ansible

℡╲_俬逩灬. 提交于 2020-03-02 18:54:46
16.1、python版本说明: Ansible是一种批量部署工具,现在运维人员用的最多的三种开源集中化管理工具有:puppet,saltstack,ansible,各有各的优缺点, 其中saltstack和ansible都是用python开发的。ansible其实准确的说只提供了一个框架,它要基于很多其他的python模块才能工 作的,所以在安装ansible的时候你要再装很多其他的依赖包的。ansible的好处之一是使用者可以开发自己的模块,放在里面使用; 第二个好处是无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;第三个好处是批量任务执行可以写成脚本, 而且不用分发到远程就可以执行。强烈建议升级python版本到2.6以上,不然运行会出错或者有些功能会没有,在编译安装其他包的 时候也会因为兼容问题报错。 16.2、centos7下python版本是2.7.5,符合ansible的安装需求,直接进行编译安装即可。centos6下的python版本为Python 2.6.6, 需要升级python版本到2.7,升级步骤如下: 1、提前安装依赖包: yum install zlib zlib-devel openssl openssl-devel gcc -y 2、编译安装: wget https://www.python.org/ftp/python/2.7