1989年的圣诞节期间,Guido van Rossum为了在阿姆斯特朗打发时间,决心开发一个新的脚本解释型语言,一刹那间,Python问世。
你可以去www.python.org/downloads/下载python的编译环境,当然也可以使用Jet Brain系列的Pycharm。
python下载完成运行界面:打开运行,输入python:
所有代码将在pycharm中运行
按照惯例,每一门语言都是从“hello world”开始的,python也不例外,但她的简洁会使你惊讶:
print("hello world!")
python不需要写include来包含头文件就可以实现简单的运行。
python的注释可以使用“#”,来注释整行:
运行
数:整型、浮点型
四则运算:加减乘除
在这里,我做了三个简单的赋值,分别是将3赋给a,将4.0赋给b,将5赋给c,第10行的\n是转义字符,它的含义与c语言相同,换行。
运行
内建函数
可以看到,整型与浮点型的运算结果会自行加上小数点,即使运算结果是整数,在整型与整型的运算中,运算结果是直接显示的。
在python中有很多的内建函数,例如id():
print(id(123))
运行
id()是用来求某一变量在内存中的地址的,显然123的地址是1766157312
且id(123.0)和id(123.0)的结果是不同的,因为它们不是同一个变量。
这里需要强调一下除法
在python2.7中,整数除以整数是自动省略小数部分的。
在python中,四则运算的规则与生活中的数学是一样的。
取余运算
这个也很简单,与其他语言相同,使用符号%
print(5%2)
在Python中,简单的加减乘除可以直接实现,还有其他数学上常用的函数,如开平方,求绝对值,三角函数等,都包含在了math模块中。
python的模块概念类似于C/C++中的头文件
在python中,有两种计算次方的方法,比如计算 x y x^y xy
1、调用math模块中的pow(x,y)方法
运行结果:
2、直接输出 x ** y
运行结果:
可以发现,使用第二种方法得到的值以整数形式表示。
调用math模块中的sqrt方法来计算某个数值的根,比如 x \sqrt{x} x
运行结果:
在math模块中包含了第二种取余的方法fmod:
将前面提到的使用%符号的方法与fmod取余进行对比,运行结果:
使用%符号的取余运算得到的结果是整型,而fmod方法得到的结果是浮点型
在math模块中调用fabs方法求绝对值:
运行结果:
可以看到,不论是整型正数和负数还是浮点型正数和负数,均以浮点型表示。
在math模块中专门提供了向下取整的方法floor
运行结果:
python的运算优先级从低到高:
名称 | 描述 |
---|---|
lambda | lambda表达式 |
or | 逻辑或 |
and | 逻辑与 |
not | 逻辑非 |
in,not in | 成员测试 |
is,is not | 同一性测试 |
<,<=,>,>=,!=,== | 比较 |
|按位或 | |
^ | 按位异或 |
& | 按位与 |
<<,>> | 左移,右移 |
+,- | 加,减 |
*,/,% | 乘,除,取余 |
+x,-x | 正负号 |
~ | 按位取反 |
** | 指数 |
x.attribute | 属性参考 |
x.[index] | 下标 |
x[index1:index2] | 寻址段 |
f(arguments…) | 函数调用 |
(experession,…) | 绑定元组或元组显示 |
[experession,…] | 列表显示 |
{key:value} | 字典显示 |
‘experession’ | 字符串转换 |
与生活中相同,带括号的往往是最优先的
在python中,字符串可以用 ’ '或者" "括起来
运行结果:
可以看到,单引号和双引号括起来的字符串,表示出来是完全相同的。
当要输出一个本身就带有单引号的语句时,使用双引号来包含或者使用转义字符
比如输出what’s your name?
运行结果:
两种方法输出结果完全相同。
在python中,可以灵活的拼接多个字符串,比如将wel和come拼接起来组成welcome:
运行结果:
字符串可以相加,但不能相减,比如
“python”-“interesting” = 报错
可以使用str()来将其他的类型转换为字符型,比如x = str(3),那么变量x的类型就是字符型,即:x = ‘3’;
也可以使用repr()方法来进行转换
当把数字转换为字符之后,就可以进行字符串的拼接了:
运行结果:
两种方法的运行结果完全相同。
str()和repr()的区别在于:str与int,float一样,是一种数据类型,而repr是一个函数。
字符 | 描述 |
---|---|
(在行尾时) | 续行符 |
\ | 反斜杠符号 |
\ ’ | 单引号 |
\ " | 双引号 |
\ a | 响铃 |
\ b | 退格 |
\ e | 转义 |
\ 000 | 空 |
\ n | 换行 |
\ v | 纵向制表符 |
\ t | 横向制表符 |
\ r | 回车 |
\ f | 换页 |
\ oyy | 八进制数 |
\ xyy | 十六进制数 |
python中的输入函数为input(),输出语句为print(),举个例子:
input()可以输入提示语句来提示用户接下来需要输入什么信息。
在python中,字符串可以通过索引来提取其中的一个或多个字符,
索引默认是从0开始的,取出string1字符串中索引为0和索引为6的字符并输出:
运行结果:
同样地,可以通过使用index()方法来求得已知字符的索引值:
运行结果:
在python中,可以通过分割字符串来截取其中的一部分,这个操作就叫切片,
比如string1[x:y],求得的是索引 x 到索引 y-1 对应的字符串
运行结果:
在python中,
可以使用len()方法来计算某字符串或者其他序列的长度:
运行结果:
使用in来判断元素是否存在于序列中
运行结果:
可以通过max()和min()来求得序列中最大和最小的元素
运行结果:
可以通过ord()来返回一个字符的ASCII码值:
运行结果:
python中字符串的格式化输出:
运行结果:
当然,类似于%s这样的占位符还有很多,见下表:
占位符 | 描述 |
---|---|
%s | 字符串,使用str()显示 |
%r | 字符串,使用repr()显示 |
%c | 单个字符 |
%b | 二进制整数 |
%d | 十进制整数 |
%i | 十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数 |
%e | 指数,基底写为e |
%E | 指数,基底写为E |
%f | 浮点数 |
%F | 浮点数 |
还有另外一种格式化输出的方式:
运行结果:
在{}中填写索引值,在format()中依次输入对应的信息。
在python中可以使用split()方法来实现:根据某字符或字符串进行切割一个字符串,被分割的字符串默认以列表的形式显示。
例如:
定义字符串string1 = “a1 a2 a3”,以一个空格为分割符,使用split方法将其分割
定义字符串string2 = "192.168.1.1"以“.”为分割符,使用split方法将其分割
运行结果:
strip(),lstrip()和rstrip()
strip可以去掉字符串两端的空格
lstrip可以去掉字符串左端的空格
rstrip可以去掉字符串右端的空格
定义一个字符串string1 = " 12345 ",在左边打出两个空格,在右边打出一个空格,这样使用lstrip和rstrip后用len方法计算长度就可以区别开来:
运行结果:
python中的大小写转换
upper() – 转换为大写,lower() – 转换为小写,capitalize() – 首字母大写,title() – 首字母全为大写,其余为小写(例如:I Like Apple),isupper() – 检测是否全为大写,islower() – 检测是否全为小写,istitle() – 是否首字母为大写其余为小写
运行结果:
值得一提的是,你可以转换方法和检测方法一起使用:
如上图最后一个print,string1首先调用title()方法进行转换,再调用istitle()方法进行检测,那么检测结果不用说,肯定为真。
使用join拼接字符串
join做的事情和split正好相反,它可以把一个列表中的所有元素通过一个字符或符号连起来,当然,这个字符由我们来定:
运行结果:
我使用了“+”来连接number列表中所有的元素。
列表是python中最重要的数据类型之一,它类似于java中的数组,同样地,列表元素的索引也是从0开始的,在python中,列表元素的定义更灵活,我可以将各种类型的鸡蛋放在同一个篮子里:
运行结果:
如何证明每个元素的类型不同?可以编写一个简单的检测程序:
运行结果:
可以看到,我使用了type()方法对list1中的每个元素进行了检测,结果与我看到的相同,第一个,第三个和第四个均为字符型,第二个为整型。
使用bool()来判断一个列表是否为空
运行结果:
list1中有元素,bool()的返回值为true,list2中无元素,bool()的返回值为false
列表的索引和切片的规则其实与之前字符串的差不多,可以说是基本一致。
list1[x:y],其中x的值是必须小于y的,即使使用的是负数也要遵循此原则:
运行结果:
正数的切片或许会更容易理解一些,图中list1[1:3],切片是取前不取后的,所以真正截取的元素是索引为1的到索引为3-1的;同样地,负数切片,list1[-3:-1],截取的元素则是倒着数的索引为3-1的到索引为1的;其实[1,2,3,4,5]的[1:3]与[5,4,3,2,1]的[-3:-1]是相同的,右边第一个的索引值为-1
列表反转
运行结果:
这次我并没有做切片,而是多写一个:-1,这个写法可以将列表倒置。
这个小技巧对于字符串同样适用:
运行结果:
你会发现python求逆序是很简单的。
还有一种实现逆序的方法:reversed() ,这个方法可以将一个字符串逆序排列然后存入一个列表中:
运行结果:
使用len()来求得一个列表的长度
运行结果:
在python中,可以使用+对多个列表进行相加:
运行结果:
也可以使用extend()来合并两个列表:
运行结果:
可以发现,extend是会改变列表的元素,注意一点,extend括号中所填的只能是字符型变量,且它会把一个完整的字符串拆成多个单一字符再进行合并。
在python中,使用append()来添加元素:
运行结果:
在这里有一个有趣的现象,当append括号里也是一个列表,那么这个列表会成为被添加列表的一个元素,这么说会有点晕,例如:
运行结果:
可以发现,append之后的list1,输出结果是一个列表套一个列表,为了检验这个小列表的确只是一个元素,我使用了len():
运行结果:
没错,list2被当做一个元素添加进了list1