Python的算法
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
个人的通俗理解,计算机可以做很多事情,也能做的很快。但是它不擅长思考,需要程序员告诉它如何做。也就是需要用计算机语言告诉计算机准确而完整的如何结题的方案。算法即结题想法,好的算法能够更快的解决问题,在计算机中主要是考虑两个参数,时间(算法运行所需时间)和空间(描述算法的计算机语言在计算机中占用的存储空间)
接下来介绍如何通过Python与计算机进行沟通
Python的语法
数字和表达式
常用的 加减乘除、取余、幂(乘方)
加法
>>> 2 + 2
4
减法
>>>2 - 2
0
乘法
>>>2 * 2
4
除法
>>>1 / 2
0
// 以上结果,结果和你预想中的不同,计算结果只保留了证书部分,小数部分被截取,为什么会出现这样的一个因为,因为整型(int)与整型(int)相除,得到的结果还是整型以下是解决方案
//方法一 加入浮点数(Float)
>>>1 / 2.0
0.5
>>>1.0 / 2
0.5
>>>1.0 / 2.0
0.5
//方法二 引入其他模块
>>> from _future_ import division
//或者使用命令行语言
python -Qnew
取余
>>>1 % 2
1
>>>10 % 3
1
>>>9 % 3
0
幂(乘方)
>>>2 ** 3
8
//等同于公式 -(3 ** 2)
>>> -3 ** 2
-9
>>> (-3) ** 2
9
长整型
注意2.2以前的版本无法处理
>>>1000000000000000000
OverflowError:integer lnteger literal too large
普通整数的区间 2 147 483 647 与 - 2 147 483 648
长整型会在数据结尾后有个L
十六进制与八进制
// 0x 表示十六进制
>>> 0xAF
175
//0 表示八进制
>>>010
变量
变量代表或引用某个值的名字
>>> x = 3
>>> x * 2
6
//注意:变量可以包括字母、数字和下划线(_)。 不能以数字开头
获取用户输入
input() 函数,获取用户输入的数据
函数
很多时候函数的名字都是英文词的缩写
在之前讲到的幂运算符,可以通过pow(2,3)替代。
函数是用来实现特点功能的代码段,方便重复使用,用于创造更复杂的表达式
abs()得到绝对值
模块
用于进一步扩展Python的功能
>>>import math
>>>math.floor(32.9)
>>>32.0
cmath 和 复数
//报错操作
>>> from math import sqrt
>>> sqrt(-1)
//可以得到复数结果操作
>>> import cmath
>>> cmath.sqrt(-1)
1
future
这里有一个比较有意思的模块,Guido van Rossum(Python之父)将部分未来可能成为标准python部分的新特性放入到future模块,方便大家使用
保存并执行程序
1.新建文件,输入python代码
print "Hello world!"
2.保存文件,以.py为后缀名保存 (这点很重要)
运行在任何地方
在脚本首航开头加入python解释脚本程序的绝对路径
#/usr/bin/python
注释
#符号用于在代码中放入解释语言,方便更易于解读程序
字符串
单引号与转义字符
单引号与双引号没有区别,但是在某种特殊场合有需要使用
>>>'Let's go!'
SyntaxError:invalid syntax
//以下才是争取方法
>>> "Let's go!"
Let's go!
或者使用转义引号
>>>'Let\'s go!'
Let's go!
拼接字符串
通过 + 号可以将两个字符串进行拼接
字符串表示 str 和 repr
将值转化为字符串形式有两种机制
str函数 将值转化为字符串
>>>print str('Hello wolrd!')
Hello, world!
>>>print str(10000L)
10000
repr 将创建一个字符,以合法的Python表达的形式来表示值
repr(x) 与 x
是同一个效果
>>>print repr("Hello world!")
'Hello world!'
>>>print repr(10000L)
10000L
input 和 raw_input 的比较
input函数对于数据的数据会根据数据类型自动赋值
raw_input函数会将数据转化为原始数据,然后放入字符串当中
name = input("What is your name?")
print "Hello, " + name + "!"
以上代码当输入的是字符串时,是不会报错。但是如果输入的是数字,则报错为,因为name不是字符串,不同数据类型无法通过+ 号运算进行字符串拼接
更换成以下代码,即可
name = raw_input("What is your name?")
print "Hello, " + name + "!"
或者将name转化为 字符串类型
name = input("What is your name?")
print "Hello, " +str(name) + "!"
长字符串、原始字符串和Unicode
长字符串
如果需要多行字符串,可以使用三个单引号
print '''This is very long string,
It coutinues here.
And it's not over yet.
"Hello world!"
Still here.'''
也可以使用三个双引号,这样就可以在字符串之间同时使用双引号和单引号。
原始字符
大部分时候需要输出的字符串拥有一些特性,比如说\n 换行,或者需要字符串输入出 \ ,那就需要 \ 转义字符,对本身进行转义。
但是当输入路径或者正则表达式时使用转义字符会很不方便
推荐使用,使用原始字符不会将转义字符当做特殊字符
print r'C:\\nowhere'
#注意原始字符串不能以转义字符结尾
unicode
字符串常量的最后一个类型就是Unicode对象,与字符串并不是同一种类型。
Python中常用的字符串是以8位的ASCII码形式存在,而Unicode字符串则存储为16位Unicode字符串,这样能够表示更多字符串
>>> u'Hello world!'
u'Hello world!'