Arcgis-Python_01-Python语法

前言

Python 是一种不受局限、跨平台的开源编程语言,它功能强大且简单易学。

Python 已延伸到 ArcGIS 中,成为了一种用于进行数据分析、数据转换、数据管理和地图自动化的语言,因而有助于提高工作效率。要使用Python,首要的就是了解其基本的语法。

脚本文件点此下载。

运行Python

有三种方式可以运行Python(日常第一种就足够使用了):

1、交互式解释器:

你可以通过命令行窗口进入python在交互式解释器中开始编写Python代码。

在交互式编译器中编写代码和编写脚本不同。在Python Shell的菜单栏中,单击File>New windows , 就打开了一个名为Untitled 的新窗口。

在菜单栏单击File>Save As , 然后将脚本命名为hello.py。.py 是脚本文件的后缀名。点击Run>Run Moudule(或者F5),可在交互式解释器中看到运行结果。

2、命令行脚本

3、集成开发环境

PyCharm或者Visual Studio

IDLE快捷键

打开Options→configure IDLE→keys,可以配置选择快捷

编辑状态时

  • Ctrl + [ 、Ctrl + ] 缩进代码
  • Alt + 3 Alt + 4 注释、取消注释代码行
  • Alt + 5 Alt + 6 切换缩进方式 空格<=>Tab
  • Alt + / 单词完成,只要文中出现过,就可以帮你自动补齐。多按几次可以循环选择
  • Alt + M 打开模块代码,先选中模块,然后按下此快捷键,会帮你打开改模块的py源码供浏览
  • Alt + C 打开类浏览器,方便在源码文件中的各个方法体之间切换
  • Alt + FP 打开路径浏览器,方便选择导入包进行查看浏览
  • F1 打开Python文档
  • 三个单引号 ''' 批量注释

在编辑过程中

  • 按F5进入shell调试。
  • Alt + DG 先定位到错误行,按此快捷键可以快速定位到出错位置
  • Alt + DS 直接显示出错历史,找到根源,方便啊
  • Alt + DA 如果每次都要按,还不够方便,按这个,以后出错都出历史
  • Alt + DD 打开调试窗口,进入单步调试,方便。
  • Ctrl + F6 为了清空前面的导入记录等,重新启动shell

另外值得注意的是

  • Alt + N Alt + P 可以查找以前输入的命令用于补全当前命令
  • Ctrl + 方向键 能够得到增强功能

注意点

1)Python是区分大小写的

2)代码中的多个空格是不会对代码的运行产生影响的,但模块、类、方法和属性中不能使用空格

3)所有的引号都是英文的

4)python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。

5)默认情况下,源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码:

# -*- coding: cp936 -*-

注释

Python中单行注释以 # 开头

多行注释可以用多个 # 号,还有 ''' 和 """ :

实例

# this is my first note!
# this is my second note!

'''
this is multiline note !
first line
second line
'''

"""
this is multiline note !
first line
second line 
"""

print "hello world!"

运行结果

hello world!

导入模块

在 python 用 import 或者 from...import 来导入相应的模块。

将整个模块(somemodule)导入,格式为: import somemodule
从某个模块中导入某个函数,格式为: from somemodule import somefunction
从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemodule import *

变量

Python3中有六个标准的数据类型:

Number(数值)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典)

其中:

不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);

可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

变量命名规范

了解两种变量命名方式:

Pascal(帕斯卡命名法):首单词首字母大写,后面单词首字母大写,如FirstName

Camel(驼峰命名法):首单词首字母小写,后面单词首字母大写,如firstName

  • 变量名可以由字母、数字、下划线组成

  • 变量名不能以数字开头,所以var1 是一个合法的变量名,但是1var 就是一个非法的变量名

  • Python 的关键字不能用作变量名,如print 和import

  • 变量区分大小写,var和VAR是不一样的

  • 变量是动态的,即不需要定义变量的类型

  • 多个变量可以在同一行赋值,x,y,z=1,2,3等同于x=1,x=2,x=3

    创建变量很简单,只要为变量分配一个值即可。例如:

    var1 = 110
    var2 = "Hello World!"
    print var1,var2
    

    运行结果

    110 Hello World!
    

数值类型Number

Python 支持三种不同的数值类型:

整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。

布尔(bool), 如 True,False。

浮点型(float) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 10^2 = 250)

复数( (complex)) - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。

数值类型转换

有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。

  • int(x) 将x转换为一个整数

  • float(x) 将x转换到一个浮点数

  • complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0

  • complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式

    a=1.0
    print int(a)
    

    运行结果

    1
    

数值运算

Python 解释器可以作为一个简单的计算器,您可以在解释器里输入一个表达式,它将输出表达式的值。
表达式的语法很直白: + , - , * 和 / , 和其它语言(如Pascal或C)里一样。例如:

print 2+2
print 2-2
print 2*2
print 2/2

运行结果

4
0
4
1

不同类型的数混合运算时会将整数转换为浮点数:

print 10/3      # 分子和分母都是整数,返回整数,Python2和Python3不同
print 10.0/3    # 分子或分母有一个是浮点型,返回浮点型
print 10/3.0    # 分子或分母有一个是浮点型,返回浮点型
print 10//3     # 整数除法返回向下取整后的结果
print 10%3      # 返回除法的余数

运行结果

3
3.33333333333
3.33333333333
3
1

Python 可以使用 ** 操作来进行幂运算:

print 5 ** 2  # 5 的平方
print 2 ** 7  # 2的7次方

运行结果

25
128

数学函数

函数 返回值 ( 描述 )
abs(x) 返回数字的绝对值,如abs(-10) 返回 10
ceil(x) 返回数字的上入整数,如math.ceil(4.1) 返回 5
cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。 **Python 3 已废弃,使用 (x>y)-(x。
exp(x) 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
fabs(x) 返回数字的绝对值,如math.fabs(-10) 返回10.0
floor(x) 返回数字的下舍整数,如math.floor(4.9)返回 4
log(x) 如math.log(math.e)返回1.0,math.log(100,10)返回2.0
log10(x) 返回以10为基数的x的对数,如math.log10(100)返回 2.0
max(x1, x2,...) 返回给定参数的最大值,参数可以为序列。
min(x1, x2,...) 返回给定参数的最小值,参数可以为序列。
modf(x) 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
pow(x, y) x**y 运算后的值。
[round(x ,n]) 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
sqrt(x) 返回数字x的平方根。

代码

import math
print "abs(-10):"
print abs(-10),"\n"
print "ceil(4.1):"
print math.ceil(4.1),"\n"
print "math.exp(1):"
print math.exp(1),"\n"
print "math.fabs(-10):"
print math.fabs(-10),"\n"
print "math.floor(4.9):"
print math.floor(4.9),"\n"
print "math.log(100,10):"
print math.log(100,10),"\n"
print "math.log10(100):"
print math.log10(100),"\n"
print "max(1,3,5,7,100):"
print max(1,3,5,7,100),"\n"
print "min(1,3,5,7,100):"
print min(1,3,5,7,100),"\n"
print "math.modf(10.6):"
print math.modf(10.6),"\n"
print "math.pow(2,8):"
print math.pow(2,8),"\n"
print "round(10.61,1):"
print round(10.61,1),"\n"
print "math.sqrt(5):"
print math.sqrt(5)

运行结果

abs(-10):
10 

ceil(4.1):
5.0 

math.exp(1):
2.71828182846 

math.fabs(-10):
10.0 

math.floor(4.9):
4.0 

math.log(100,10):
2.0 

math.log10(100):
2.0 

max(1,3,5,7,100):
100 

min(1,3,5,7,100):
1 

math.modf(10.6):
(0.5999999999999996, 10.0) 

math.pow(2,8):
256.0 

round(10.61,1):
10.6 

math.sqrt(5):
2.2360679775

随机数函数

随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。

Python包含以下常用随机数函数:

函数 描述
choice(seq) 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
[randrange (start,] stop [,step]) 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
random() 随机生成下一个实数,它在[0,1)范围内。
seed(x) 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
shuffle(lst) 将序列的所有元素随机排序
uniform(x, y) 随机生成下一个实数,它在[x,y]范围内。

代码

import random
print "从 range(10) 返回一个随机数:"
print random.choice(range(10)),"\n"
print "从 1-100 中选取一个奇数:"
print random.randrange(1, 100, 2),"\n"
print "随机生成下一个实数,它在[0,1)范围内:"
print random.random(),"\n"
print "使用种子10生成随机数:"
random.seed(10)
print random.random(),"\n"
print "将序列[1,2,3,4,5,6,7,8]随机排列:"
list = [1,2,3,4,5,6,7,8]
random.shuffle(list)
print list,"\n"
print "随机生成1-20之间的随机实数:"
print random.uniform(1,20),"\n"

运行结果(结果不一致是正常的,一样就见了鬼了)

从 range(10) 返回一个随机数:
5 

从 1-100 中选取一个奇数:
21 

随机生成下一个实数,它在[0,1)范围内:
0.804882972117 

使用种子10生成随机数:
0.57140259469 

将序列[1,2,3,4,5,6,7,8]随机排列:
[3, 1, 6, 8, 7, 2, 5, 4] 

随机生成1-20之间的随机实数:
10.8927178332 

三角函数

函数 描述
acos(x) 返回x的反余弦弧度值。x只能在(-1,1)之间
asin(x) 返回x的反正弦弧度值。
atan(x) 返回x的反正切弧度值。
atan2(y, x) 返回给定的 X 及 Y 坐标值的反正切值。
cos(x) 返回x的弧度的余弦值。
hypot(x, y) 返回欧几里德范数 sqrt(xx + yy)。
sin(x) 返回的x弧度的正弦值。
tan(x) 返回x弧度的正切值。
degrees(x) 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0
radians(x) 将角度转换为弧度

代码

import math
print "0.5的反余弦度数:math.acos(0.5)"
degree = math.acos(0.5) 
print degree * 180/math.pi
print "\n0.5的反正弦度数:math.asin(0.5)"
degree = math.asin(0.5) 
print degree * 180/math.pi
print "\n1的反正切度数:math.atan(1)"
degree = math.atan(1) 
print degree * 180/math.pi
print "\n(1,1)坐标反正切度数:math.atan2(1,1)"
degree = math.atan2(1,1) 
print degree * 180/math.pi
print "\npi/3的余弦值:math.cos(math.pi/3)"
print math.cos(math.pi/3)
print "\n(1,1)的欧几里德范数(向量距离):math.hypot(1,1)"
print math.hypot(1,1)
print "\npi/6正弦值:math.sin(math.pi/6)"
print math.sin(math.pi/6)
print "\npi/4正切值:math.tan(math.pi/4)"
print math.tan(math.pi/4)
print "\n0.5反正切度数:math.degrees(math.asin(0.5))"
print math.degrees(math.asin(0.5))
print "\n将45度转为弧度:math.radians(45)"
print math.radians(45)

运行结果

0.5的反余弦度数:math.acos(0.5)
60.0

0.5的反正弦度数:math.asin(0.5)
30.0

1的反正切度数:math.atan(1)
45.0

(1,1)坐标反正切度数:math.atan2(1,1)
45.0

pi/3的余弦值:math.cos(math.pi/3)
0.5

(1,1)的欧几里德范数(向量距离):math.hypot(1,1)
1.41421356237

pi/6正弦值:math.sin(math.pi/6)
0.5

pi/4正切值:math.tan(math.pi/4)
1.0

0.5反正切度数:math.degrees(math.asin(0.5))
30.0

将45度转为弧度:math.radians(45)
0.785398163397

数值常量

常量 描述
pi 数学常量 pi(圆周率,一般以π来表示)
e 数学常量 e,e即自然常数(自然常数)

代码

import math
print "math.pi:",math.pi
print "math.e:",math.e

运行结果

math.pi: 3.14159265359
math.e: 2.71828182846

字符串String

字符串是 Python 中最常用的数据类型。我们可以使用引号( ' 或 " )来创建字符串。

访问字符串中的值

Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。
Python 访问子字符串,可以使用方括号来截取字符串,如下实例:

var1 = 'Hello World!'
var2 = "Runoob"
print ("var1[0]: ", var1[0])
print ("var2[1:5]: ", var2[1:5])

运行结果

('var1[0]: ', 'H')
('var2[1:5]: ', 'unoo')

字符串更新

你可以截取字符串的一部分并与其他字段拼接,如下实例:

var1 = 'Hello World!'
print ("已更新字符串 : ", var1[:6] + 'bighead!')

运行结果

已更新字符串 :  Hello bighead!

转义字符

在需要在字符中使用特殊字符时,python用反斜杠()转义字符。如下表

转义字符 描述
\(在行尾时) 续行符
\\ 反斜杠符号
\' 单引号
\" 双引号
\a 响铃
\b 退格(Backspace)
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数,yy 代表的字符,例如:\o12 代表换行,其中 o 是字母,不是数字 0。
\xyy 十六进制数,yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出

字符串运算符

下表实例变量a值为字符串 "Hello",b变量值为 "Python":

操作符 描述 实例
+ 字符串连接 a + b 输出结果: HelloPython
* 重复输出字符串 a*2 输出结果:HelloHello
[] 通过索引获取字符串中字符 a[1] 输出结果 e
[ : ] 截取字符串中的一部分,遵循左闭右开原则,str[0,2] 是不包含第 3 个字符的。 a[1:4] 输出结果 ell
in 成员运算符 - 如果字符串中包含给定的字符返回 True 'H' in a 输出结果 True
not in 成员运算符 - 如果字符串中不包含给定的字符返回 True 'M' not in a 输出结果 True
r/R 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 print(r"\n")

代码

a = "Hello"
b = "Python"

print "a+b: ",a+b
print"a * 2: ", a * 2
print "a[1]: ", a[1]
print "a[1:4]:", a[1:4]

if( "H" in a) :
    print("H 在变量 a 中")
else :
        print("H 不在变量 a 中")

if( "M" not in a) :
    print("M 不在变量 a 中")
else :
        print("M 在变量 a 中")

print (r'\n')
print (R'\n')

运行结果

a+b:  HelloPython
a * 2:  HelloHello
a[1]:  e
a[1:4]: ell
H 在变量 a 中
M 不在变量 a 中
\n
\n

字符串格式化

Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。

在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。

print ("我叫 %s 今年 %d 岁!" % ('小明', 10))

运行结果

我叫 小明 今年 10 岁!

Python字符串格式化符号:

符 号 描述
%c 格式化字符及其ASCII码
%s 格式化字符串
%d 格式化整数
%u 格式化无符号整型
%o 格式化无符号八进制数
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数(大写)
%f 格式化浮点数字,可指定小数点后的精度
%e 用科学计数法格式化浮点数
%E 作用同%e,用科学计数法格式化浮点数
%g %f和%e的简写
%G %f 和 %E 的简写
%p 用十六进制数格式化变量的地址

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

基本语法是通过 {}: 来代替以前的 %

format 函数可以接受不限个参数,位置可以不按顺序。

代码

print("网站名:{name}, 地址: {url}".format(name="和尚的博客", url="www.bighead.fun"))
# 通过列表索引设置参数
print("网站名:{0}, 地址: {1}".format("和尚的博客", "www.bighead.fun"))

运行结果

网站名:和尚的博客, 地址: www.bighead.fun
网站名:和尚的博客, 地址: www.bighead.fun

三引号

python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。实例如下

para_str = """这是一个多行字符串的实例
多行字符串可以使用制表符
TAB ( \t )。
也可以使用换行符 [ \n ]。
"""
print (para_str)

运行结果

这是一个多行字符串的实例
多行字符串可以使用制表符
TAB (    )。
也可以使用换行符 [ 
 ]。

三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。

一个典型的用例是,当你需要一块HTML或者SQL时,这时用字符串组合,特殊字符串转义将会非常的繁琐。

Unicode 字符串

在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u

在Python3中,所有的字符串都是Unicode字符串。

字符串内建函数

序号 方法及描述
1 capitalize() 将字符串的第一个字符转换为大写
2 center(width, fillchar) 返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
3 count(str, beg= 0,end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
4 bytes.decode(encoding="utf-8", errors="strict") Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。
5 encode(encoding='UTF-8',errors='strict') 以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'
6 endswith(suffix, beg=0, end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
7 expandtabs(tabsize=8) 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。
8 find(str, beg=0, end=len(string)) 检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
9 index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在字符串中会报一个异常.
10 isalnum() 如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False
11 isalpha() 如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False
12 isdigit() 如果字符串只包含数字则返回 True 否则返回 False..
13 islower() 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
14 isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False
15 isspace() 如果字符串中只包含空白,则返回 True,否则返回 False.
16 istitle() 如果字符串是标题化的(见 title())则返回 True,否则返回 False
17 isupper() 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
18 join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
19 len(string) 返回字符串长度
20 ljust(width[, fillchar])返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。
21 lower() 转换字符串中所有大写字符为小写.
22 lstrip() 截掉字符串左边的空格或指定字符。
23 maketrans() 创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
24 max(str) 返回字符串 str 中最大的字母。
25 min(str) 返回字符串 str 中最小的字母。
26 replace(old, new [, max])把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。
27 rfind(str, beg=0,end=len(string)) 类似于 find()函数,不过是从右边开始查找.
28 rindex( str, beg=0, end=len(string)) 类似于 index(),不过是从右边开始.
29 rjust(width,[, fillchar])返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串
30 rstrip() 删除字符串字符串末尾的空格.
31 split(str="", num=string.count(str)) num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
32 splitlines([keepends])按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
33 startswith(substr, beg=0,end=len(string)) 检查字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。
34 strip([chars])在字符串上执行 lstrip()和 rstrip()
35 swapcase() 将字符串中大写转换为小写,小写转换为大写
36 title() 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
37 translate(table, deletechars="") 根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中
38 upper() 转换字符串中的小写字母为大写
39 zfill (width) 返回长度为 width 的字符串,原字符串右对齐,前面填充0
40 isdecimal() 检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。

代码

# -*- coding: cp936 -*-
mystr = "This is Bighead's blog!"
print mystr

### 字符串长度
print "一、字符串长度"
print "19-返回对象(字符、列表、元组等)长度或项目个数。"
print 'len(mystr):',len(mystr)

###大小写转换及判断
print "\n\n二、大小写转换及判断"
print "01-将字符串的第一个字母变成大写,其他字母变小写"
print "mystr.capitalize() : ", mystr.capitalize()

print "\n36-返回标题化的字符串,即所有单词都是以大写开始,其余字母均为小写。"
print "mystr.title() : ", mystr.title()

print "\n21-转换字符串中所有大写字符为小写。"
print "mystr.lower() : ", mystr.lower()

print "\n38-转换字符串中的小写字母为大写。"
print "mystr.upper() : ", mystr.upper()

print "\n35-将字符串中大写转换为小写,小写转换为大写。"
print "mystr.swapcase() : ", mystr.swapcase()

print "\n24-返回字符串中最大的字母。"
print "max(mystr) : ", max(mystr)

print "\n25-返回字符串中最小的字母。"
print "min(mystr) : ", min(mystr)

print "\n17-检测字符串中所有的字母是否都为大写。"
print 'mystr.isupper():',mystr.isupper()
print '"BIGHEAD".isupper():',"BIGHEAD".isupper()

print "\n16-检测字符串是否标题化,即所有的单词拼写首字母是否为大写,且其他字母为小写。。"
print 'mystr.istitle():',mystr.istitle()
print '"Hello World".istitle():',"Hello World".istitle()


### 首尾字符处理
print "\n\n三、首尾字符处理"
print "34-移除字符串头尾指定的字符(默认为空格)或字符序列。"
print "mystr.strip() : ", mystr.strip()
print 'mystr.strip("T!") : ', mystr.strip("T!")

print "\n22-截掉字符串左边的空格或指定字符。"
print "mystr.lstrip() : ", mystr.lstrip()
print 'mystr.lstrip("This") : ', mystr.lstrip("This")

print "\n30-删除字符串末尾的指定字符(默认为空格)."
print "mystr.rstrip() : ", mystr.rstrip()
print 'mystr.rstrip("!") : ', mystr.rstrip("!")

### 查找字符
print "\n\n四、查找字符"
print "03-统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。"
print "mystr.count('h') : ", mystr.count("h")
print "mystr.count('h',1,5) : ", mystr.count('h',1,5)

print "\n33-检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。"
print 'mystr.startswith("T"):',mystr.startswith("T")
print 'mystr.startswith("Th"):',mystr.startswith("Th")
print 'mystr.startswith("T",12,-1):',mystr.startswith("g",12,-1)

print "\n06-判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回 True,否则返回 False。"
print 'mystr.endswith("g!"):',mystr.endswith("g!")
print 'mystr.endswith("g"):',mystr.endswith("g")
print 'mystr.endswith("g",0,11):',mystr.endswith("g",0,11)

print "\n08-检测字符串中是否包含子字符串,返回索引值,如果不包含返回-1。"
print 'mystr.find("ea"):',mystr.find("ea")
print 'mystr.find("ea",0,10):',mystr.find("ea",0,10)

print "\n27-返回字符串最后一次出现的位置,如果没有匹配项则返回-1。。"
print 'mystr.rfind("ea"):',mystr.rfind("ea")
print 'mystr.rfind("ea",0,10):',mystr.rfind("ea",0,10)

print "\n09-检测字符串中是否包含子字符串,返回索引值,如果不包含会报异常。"
print 'mystr.index("ea"):',mystr.index("ea")
#print 'mystr.index("ea",0,10):',mystr.index("ea",0,10) #可自行尝试

print "\n28-检测字符串中是否包含子字符串,返回索引值,如果不包含会报异常。"
print 'mystr.rindex("ea"):',mystr.rindex("ea")
#print 'mystr.rindex("ea",0,10):',mystr.rindex("ea",0,10) #可自行尝试


### 字符串给定长度格式化
print "\n\n五、字符串给定长度格式化"
print "02-返回一个指定的宽度 width 居中的字符串,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充。"
print "mystr.center(40, '*') : ", mystr.center(40, '*')

print "\n20-返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。"
print "mystr.ljust(40, '*') : ", mystr.ljust(40, '*')

print "\n29-返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串。"
print "mystr.rjust(40, '*') : ", mystr.rjust(40, '*')

print "\n39-返回指定长度的字符串,原字符串右对齐,前面填充0。"
print "mystr.zfill(40) : ", mystr.zfill(40)



### 字符串内容替换
print "\n\n六、字符串内容替换"
print "07-把字符串 mystring 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。"
tabmystr = "This is \t Bighead's blog!"
print tabmystr
print "tabmystr.expandtabs():",tabmystr.expandtabs()
print "tabmystr.expandtabs(4):",tabmystr.expandtabs(4)

print "\n26-把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。"
print 'mystr.replace("is", "was")',mystr.replace("is", "was")
print 'mystr.replace("is", "was",1)',mystr.replace("is", "was",1)

from string import maketrans   # 必须调用 maketrans 函数。
print "\n23-创建字符映射的转换表,两个字符串的长度必须相同,为一一对应的关系。"
intab = "aeiou"
outtab = "12345"
trantab = maketrans(intab, outtab)
print "mystr.translate(trantab):",mystr.translate(trantab)

from string import maketrans   # 必须调用 maketrans 函数。
print "\n37-根据参数table给出的表(包含 256 个字符)转换字符串的字符,要过滤掉的字符放到 deletechars 参数中。"
intab = "aeiou"
outtab = "12345"
trantab = maketrans(intab, outtab) #制作翻译表
print "mystr.translate(trantab):",mystr.translate(trantab)
print "mystr.translate(trantab,'i'):",mystr.translate(trantab,'i')



### 字符串分割连接
print "\n\n七、字符串分割连接"
print "31-通过指定分隔符对字符串进行切片,如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。"
pathstr = r"C:\Users\Admin\Desktop\test"
print pathstr
print "pathstr.split('\\') : ", pathstr.split('\\')
print 'pathstr.split("\\",2) : ', pathstr.split("\\",2)

print "\n32-按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。"
linestr = "hello\nworld!"
print linestr
print "linestr.splitlines() : ", linestr.splitlines()
print 'linestr.splitlines(True) : ', linestr.splitlines(True)

print "\n18-将序列中的元素以指定的字符连接生成一个新的字符串。"
print '"-".join(["hello","world","pyhton"]):',"-".join(["hello","world","pyhton"])



### 字符串组成校验
print "\n\n八、字符串组成校验"
print "10-检测字符串是否由字母和数字组成。"
print 'mystr.isalnum():',mystr.isalnum() #有空格
print '"bighead123".isalnum():',"bighead123".isalnum()

print "\n11-检测字符串是否只由字母或文字组成。"
print 'mystr.isalpha():',mystr.isalpha() #有空格
print '"i爱".isalpha():',"i爱".isalpha() #Python2返回仍是False,Python3返回True

print "\n12-检测字符串是否只由数字组成。"
print 'mystr.isdigit():',mystr.isdigit()
print '"1235".isdigit():',"1235".isdigit()

print "\n40-检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。"
print "u'123'.isdecimal() : ", u'123'.isdecimal()
print "mystr.decode('gbk').isdecimal() : ", mystr.decode('gbk').isdecimal()

print "\n13-检测字符串是否由小写字母组成。"
print 'mystr.islower():',mystr.islower()
print '"bighead".islower():',"bighead".islower()

print "\n14-检测字符串是否只由数字组成,这种方法只针对unicode对象。"
#print 'mystr.isnumeric():',mystr.isnumeric() #可自行尝试,非Unicode编码报错
print 'u"123".isnumeric():',u"123".isnumeric()

print "\n15-检测字符串是否只由空白字符组成。"
print 'mystr.isspace():',mystr.isspace()
print '" ".isspace():'," ".isspace()



### 字符串编码解码
print "\n\n九、字符串编码解码"
print "04-以指定的编码格式编码字符串。"
print "UTF-8 编码 mystr.encode('UTF-8','mystrict'):", mystr.encode('UTF-8','mystrict')
#以下语句在Python3,可正常运行,有条件可以尝试
#print "UTF-8 编码 'i爱'.encode('UTF-8','mystrict'):", 'i爱'.encode('UTF-8','mystrict')
#print "UTF-8 编码 'i爱'.encode('UTF-8','mystrict').decode('UTF-8','mystrict'):", 'i爱'.encode('UTF-8','mystrict').decode('UTF-8','mystrict')
#下面为上面代码运行结果
'''
UTF-8 编码 'i爱'.encode('UTF-8','mystrict'): b'i\xe7\x88\xb1'
UTF-8 编码 'i爱'.encode('UTF-8','mystrict').decode('UTF-8','mystrict'): i爱
'''

print "\n05-以指定的编码格式解码 bytes 对象。默认编码为 'utf-8'。"
print "UTF-8 解码 mystr.decode('UTF-8','mystrict'):", mystr.decode('UTF-8','mystrict')

运行结果

This is Bighead's blog!
一、字符串长度
19-返回对象(字符、列表、元组等)长度或项目个数。
len(mystr): 23


二、大小写转换及判断
01-将字符串的第一个字母变成大写,其他字母变小写
mystr.capitalize() :  This is bighead's blog!

36-返回标题化的字符串,即所有单词都是以大写开始,其余字母均为小写。
mystr.title() :  This Is Bighead'S Blog!

21-转换字符串中所有大写字符为小写。
mystr.lower() :  this is bighead's blog!

38-转换字符串中的小写字母为大写。
mystr.upper() :  THIS IS BIGHEAD'S BLOG!

35-将字符串中大写转换为小写,小写转换为大写。
mystr.swapcase() :  tHIS IS bIGHEAD'S BLOG!

24-返回字符串中最大的字母。
max(mystr) :  s

25-返回字符串中最小的字母。
min(mystr) :   

17-检测字符串中所有的字母是否都为大写。
mystr.isupper(): False
"BIGHEAD".isupper(): True

16-检测字符串是否标题化,即所有的单词拼写首字母是否为大写,且其他字母为小写。。
mystr.istitle(): False
"Hello World".istitle(): True


三、首尾字符处理
34-移除字符串头尾指定的字符(默认为空格)或字符序列。
mystr.strip() :  This is Bighead's blog!
mystr.strip("T!") :  his is Bighead's blog

22-截掉字符串左边的空格或指定字符。
mystr.lstrip() :  This is Bighead's blog!
mystr.lstrip("This") :   is Bighead's blog!

30-删除字符串末尾的指定字符(默认为空格).
mystr.rstrip() :  This is Bighead's blog!
mystr.rstrip("!") :  This is Bighead's blog


四、查找字符
03-统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
mystr.count('h') :  2
mystr.count('h',1,5) :  1

33-检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。
mystr.startswith("T"): True
mystr.startswith("Th"): True
mystr.startswith("T",12,-1): False

06-判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回 True,否则返回 False。
mystr.endswith("g!"): True
mystr.endswith("g"): False
mystr.endswith("g",0,11): True

08-检测字符串中是否包含子字符串,返回索引值,如果不包含返回-1。
mystr.find("ea"): 12
mystr.find("ea",0,10): -1

27-返回字符串最后一次出现的位置,如果没有匹配项则返回-1。。
mystr.rfind("ea"): 12
mystr.rfind("ea",0,10): -1

09-检测字符串中是否包含子字符串,返回索引值,如果不包含会报异常。
mystr.index("ea"): 12

28-检测字符串中是否包含子字符串,返回索引值,如果不包含会报异常。
mystr.rindex("ea"): 12


五、字符串给定长度格式化
02-返回一个指定的宽度 width 居中的字符串,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充。
mystr.center(40, '*') :  ********This is Bighead's blog!*********

20-返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
mystr.ljust(40, '*') :  This is Bighead's blog!*****************

29-返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串。
mystr.rjust(40, '*') :  *****************This is Bighead's blog!

39-返回指定长度的字符串,原字符串右对齐,前面填充0。
mystr.zfill(40) :  00000000000000000This is Bighead's blog!


六、字符串内容替换
07-把字符串 mystring 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。
This is 	 Bighead's blog!
tabmystr.expandtabs(): This is          Bighead's blog!
tabmystr.expandtabs(4): This is      Bighead's blog!

26-把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
mystr.replace("is", "was") Thwas was Bighead's blog!
mystr.replace("is", "was",1) Thwas is Bighead's blog!

23-创建字符映射的转换表,两个字符串的长度必须相同,为一一对应的关系。
mystr.translate(trantab): Th3s 3s B3gh21d's bl4g!

37-根据参数table给出的表(包含 256 个字符)转换字符串的字符,要过滤掉的字符放到 deletechars 参数中。
mystr.translate(trantab): Th3s 3s B3gh21d's bl4g!
mystr.translate(trantab,'i'): Ths s Bgh21d's bl4g!


七、字符串分割连接
31-通过指定分隔符对字符串进行切片,如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。
C:\Users\Admin\Desktop\test
pathstr.split('\') :  ['C:', 'Users', 'Admin', 'Desktop', 'test']
pathstr.split("\",2) :  ['C:', 'Users', 'Admin\\Desktop\\test']

32-按照行('
', '

', 
')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
hello
world!
linestr.splitlines() :  ['hello', 'world!']
linestr.splitlines(True) :  ['hello\n', 'world!']

18-将序列中的元素以指定的字符连接生成一个新的字符串。
"-".join(["hello","world","pyhton"]): hello-world-pyhton


八、字符串组成校验
10-检测字符串是否由字母和数字组成。
mystr.isalnum(): False
"bighead123".isalnum(): True

11-检测字符串是否只由字母或文字组成。
mystr.isalpha(): False
"i爱".isalpha(): False

12-检测字符串是否只由数字组成。
mystr.isdigit(): False
"1235".isdigit(): True

40-检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。
u'123'.isdecimal() :  True
mystr.decode('gbk').isdecimal() :  False

13-检测字符串是否由小写字母组成。
mystr.islower(): False
"bighead".islower(): True

14-检测字符串是否只由数字组成,这种方法只针对unicode对象。
u"123".isnumeric(): True

15-检测字符串是否只由空白字符组成。
mystr.isspace(): False
" ".isspace(): True


九、字符串编码解码
04-以指定的编码格式编码字符串。
UTF-8 编码 mystr.encode('UTF-8','mystrict'): This is Bighead's blog!

05-以指定的编码格式解码 bytes 对象。默认编码为 'utf-8'。
UTF-8 解码 mystr.decode('UTF-8','mystrict'): This is Bighead's blog!

列表List

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

  • 列表的数据项不需要具有相同的类型。

  • 列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

list1 = ['Google', 'Runoob', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];
print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]

运行结果

list1[0]:  Google
list2[1:5]:  [2, 3, 4, 5]

更新列表

可以对列表的数据项进行修改或更新 ,如下所示:

list = ['Google', 'Runoob', 1997, 2000]

print "第三个元素为 : ", list[2]
list[2] = 2001
print "更新后的第三个元素为 : ", list[2]

运行结果

第三个元素为 :  1997
更新后的第三个元素为 :  2001

删除列表元素

可以使用 del 语句来删除列表的的元素,如下实例:

list = ['Google', 'Runoob', 1997, 2000]
 
print "原始列表 : ", list
del list[2]
print "删除第三个元素 : ", list

运行结果

原始列表 :  ['Google', 'Runoob', 1997, 2000]
删除第三个元素 :  ['Google', 'Runoob', 2000]

Python列表脚本操作符

列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表

Python 表达式 结果 描述
len([1, 2, 3]) 3 长度
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合
['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复
3 in [1, 2, 3] True 元素是否存在于列表中
for x in [1, 2, 3]: print(x, end=" ") 1 2 3 迭代

Python列表截取与拼接

Python的列表截取与字符串操作类型,如下所示:

L=['Google', 'Runoob', 'Taobao']
Python 表达式 结果 描述
L[2] 'Taobao' 读取第三个元素
L[-2] 'Runoob' 从右侧开始读取倒数第二个元素: count from the right
L[1:] ['Runoob', 'Taobao'] 输出从第二个元素开始后的所有元素

列表还支持拼接操作:

list = [1, 4, 9, 16, 25]
list += [36, 49, 64, 81, 100]
print list

运行结果

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

嵌套列表

使用嵌套列表即在列表里创建其它列表,例如:

a = ['a', 'b', 'c']
n = [1, 2, 3]
x = [a, n]

print x
print x[0]
print x[0][1]

运行结果

[['a', 'b', 'c'], [1, 2, 3]]
['a', 'b', 'c']
b

Python列表函数&方法

Python包含以下函数:

序号 函数
1 len(list) 列表元素个数
2 max(list) 返回列表元素最大值
3 min(list) 返回列表元素最小值
4 list(seq) 将元组转换为列表
mylist = [1,2,3,"hello"]
print len(mylist)
print max(mylist)
mytuple = ("a","b","c") #小括号括起来的是元组
print list(mytuple)

运行结果

4
hello
['a', 'b', 'c']

Python包含以下方法:

序号 方法
1 list.append(obj) 在列表末尾添加新的对象
2 list.count(obj) 统计某个元素在列表中出现的次数
3 list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4 list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
5 list.insert(index, obj) 将对象插入列表
6 list.pop([index=-1])移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7 list.remove(obj) 移除列表中某个值的第一个匹配项
8 list.reverse() 反向列表中元素
9 list.sort( key=None, reverse=False) 对原列表进行排序
10 list.clear() 清空列表
11 list.copy() 复制列表
list1 = ['Google', 'Runoob', 'Taobao']
print "原列表:",list1
list1.append('Baidu')
print "\n1、添加元素后的列表\nlist1.append('Baidu') : ", list1
print "\n2、'Taobao'在列表中出现的次数\nlist.count('Taobao'):",list1.count("Taobao")
list2 = list(range(5))
list1.extend(list2)
print "\n3、扩展后的列表\nlist1.extend(range(5)):",list1
print "\n4、元素'Taobao'第一个匹配项的索引位置\nlist1.index('Taobao')",list1.index('Taobao')
list1.insert(2,'Tencent')
print "\n5、在索引为2处插入'Tencent'后的列表\nlist1.insert(2,'Tencent') :",list1
list1.pop()
print "\n6、删除最后一个元素后的列表\nlist1.pop() :",list1
list1.pop(1)
print "删除索引为1的一个元素后的列表\nlist1.pop(1) :",list1
list1.remove(3)
print "\n7、删除元素为3的第一个元素后的列表\nlist1.remove(3) :",list1
list1.reverse()
print "\n8、反转列表中元素后的列表\nlist1.reverse() :",list1
list1.sort()
print "\n9、升序排列列表后的列表\nlist1.sort() :",list1
list1.sort(reverse = True)
print "降序排列列表后的列表\nlist1.sort(reverse = False) :",list1

### 最后两种方法对于Python2不适用,有条件可在Python3测试
#list1.clear()
#print "\n10、清空后的列表\nlist1.clear() :",list1
#list1=list2.copy()
#print "\n10、复制list2后的列表\nlist1=list2.copy() :",list1

运行结果

原列表: ['Google', 'Runoob', 'Taobao']

1、添加元素后的列表
list1.append('Baidu') :  ['Google', 'Runoob', 'Taobao', 'Baidu']

2、'Taobao'在列表中出现的次数
list.count('Taobao'): 1

3、扩展后的列表
list1.extend(range(5)): ['Google', 'Runoob', 'Taobao', 'Baidu', 0, 1, 2, 3, 4]

4、元素'Taobao'第一个匹配项的索引位置
list1.index('Taobao') 2

5、在索引为2处插入'Tencent'后的列表
list1.insert(2,'Tencent') : ['Google', 'Runoob', 'Tencent', 'Taobao', 'Baidu', 0, 1, 2, 3, 4]

6、删除最后一个元素后的列表
list1.pop() : ['Google', 'Runoob', 'Tencent', 'Taobao', 'Baidu', 0, 1, 2, 3]
删除索引为1的一个元素后的列表
list1.pop(1) : ['Google', 'Tencent', 'Taobao', 'Baidu', 0, 1, 2, 3]

7、删除元素为3的第一个元素后的列表
list1.remove(3) : ['Google', 'Tencent', 'Taobao', 'Baidu', 0, 1, 2]

8、反转列表中元素后的列表
list1.reverse() : [2, 1, 0, 'Baidu', 'Taobao', 'Tencent', 'Google']

9、升序排列列表后的列表
list1.sort() : [0, 1, 2, 'Baidu', 'Google', 'Taobao', 'Tencent']
降序排列列表后的列表
list1.sort(reverse = False) : ['Tencent', 'Taobao', 'Google', 'Baidu', 2, 1, 0]

元组Tuple

  • Python 的元组与列表类似,不同之处在于元组的元素不能修改。

  • 元组使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可

>>> tup1 = ('Google', 'Runoob', 1997, 2000);
>>> tup2 = (1, 2, 3, 4, 5 );
>>> tup3 = "a", "b", "c", "d";   #  不需要括号也可以
>>> type(tup3)
<class 'tuple'>

元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:

>>> tup1 = (50)
>>> type(tup1)     # 不加逗号,类型为整型
<class 'int'>

>>> tup1 = (50,)
>>> type(tup1)     # 加上逗号,类型为元组
<class 'tuple'>

访问元组

元组可以使用下标索引来访问元组中的值,如下实例:

tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )

print ("tup1[0]: ", tup1[0])
print ("tup2[1:5]: ", tup2[1:5])

运行结果

('tup1[0]: ', 'Google')
('tup2[1:5]: ', (2, 3, 4, 5))

修改元组

元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:

tup1 = (12, 34.56);
tup2 = ('abc', 'xyz')

# 以下修改元组元素操作是非法的。
# tup1[0] = 100

# 创建一个新的元组
tup3 = tup1 + tup2;
print (tup3)

运行结果

(12, 34.56, 'abc', 'xyz')

删除元组

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,如下实例:

tup = ('Google', 'Runoob', 1997, 2000)

print (tup)
del tup;
print ("删除后的元组 tup : ")
print (tup)

以上实例元组被删除后,输出变量会有异常信息,输出如下所示:

('Google', 'Runoob', 1997, 2000)
删除后的元组 tup : 
Traceback (most recent call last):
  File "C:\Users\Admin\Desktop\元组.py", line 6, in <module>
    print (tup)
NameError: name 'tup' is not defined

元组运算符

与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。

Python 表达式 结果 描述
len((1, 2, 3)) 3 计算元素个数
(1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) 连接
('Hi!',) * 4 ('Hi!', 'Hi!', 'Hi!', 'Hi!') 复制
3 in (1, 2, 3) True 元素是否存在
for x in (1, 2, 3): print (x,) 1 2 3 迭代

元组索引,截取

因为元组也是一个序列,所以我们可以访问元组中的指定位置的元素,也可以截取索引中的一段元素,如下所示:

L = ('Google', 'Taobao', 'Runoob')
Python 表达式 结果 描述
L[2] 'Runoob' 读取第三个元素
L[-2] 'Taobao' 反向读取;读取倒数第二个元素
L[1:] ('Taobao', 'Runoob') 截取元素,从第二个开始后的所有元素。

元组内置函数

序号 方法及描述 实例
1 len(tuple) 计算元组元素个数。 >>> tuple1 = ('Google', 'Runoob', 'Taobao') >>> len(tuple1) 3 >>>
2 max(tuple) 返回元组中元素最大值。 >>> tuple2 = ('5', '4', '8') >>> max(tuple2) '8' >>>
3 min(tuple) 返回元组中元素最小值。 >>> tuple2 = ('5', '4', '8') >>> min(tuple2) '4' >>>
4 tuple(seq) 将列表转换为元组。 >>> list1= ['Google', 'Taobao', 'Runoob', 'Baidu'] >>> tuple1=tuple(list1) >>> tuple1 ('Google', 'Taobao', 'Runoob', 'Baidu')

字典Dictionary

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

d = {key1 : value1, key2 : value2 }
  • 键必须是唯一的,但值则不必。

  • 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

一个简单的字典实例:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

访问字典里的值

把相应的键放入到方括号中,如下实例:

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

print "dict['Name']: ", dict['Name']
print "dict['Age']: ", dict['Age']

运行结果

dict['Name']:  Runoob
dict['Age']:  7

如果用字典里没有的键访问数据,会输出错误 。

修改字典

向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

dict['Age'] = 8               # 更新 Age
dict['Blog'] = "大头和尚"  # 添加信息


print "dict['Age']: ", dict['Age']
print "dict['Blog']: ", dict['Blog']

运行结果

dict['Age']:  8
dict['Blog']:  大头和尚

删除字典元素

能删单一的元素也能清空字典,清空只需一项操作。

显示删除一个字典用del命令,如下实例:

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

del dict['Name'] # 删除键 'Name'
print dict
dict.clear()     # 清空字典
del dict         # 删除字典

print "dict['Age']: ", dict['Age']

但这会引发一个异常,因为用执行 del 操作后字典不再存在:

{'Age': 7, 'Class': 'First'}
dict['Age']: 
Traceback (most recent call last):
  File "C:\Users\Admin\Desktop\字典.py", line 8, in <module>
    print "dict['Age']: ", dict['Age']
TypeError: 'type' object has no attribute '__getitem__'

字典键的特性

字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。

两个重要的点需要记住:

1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:

dict = {'Name': 'Runoob', 'Age': 7, 'Name': '小菜鸟'}

print "dict['Name']: ", dict['Name']

运行结果

dict['Name']:  小菜鸟

2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,如下实例:

dict = {['Name']: 'Runoob', 'Age': 7}

print "dict['Name']: ", dict['Name']

运行结果

Traceback (most recent call last):
  File "C:\Users\Admin\Desktop\字典.py", line 1, in <module>
    dict = {['Name']: 'Runoob', 'Age': 7}
TypeError: unhashable type: 'list'

字典内置函数&方法

序号 函数及描述 实例
1 len(dict) 计算字典元素个数,即键的总数。 >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} >>> len(dict) 3
2 str(dict) 输出字典,以可打印的字符串表示。 >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} >>> str(dict) "{'Name': 'Runoob', 'Class': 'First', 'Age': 7}"
3 type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。 >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} >>> type(dict)

Python字典包含了以下内置方法:

在此不详细测试,如需深入了解点击链接跳转到菜鸟课程学习。

序号 函数及描述
1 radiansdict.clear() 删除字典内所有元素
2 radiansdict.copy() 返回一个字典的浅复制
3 radiansdict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
4 radiansdict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
5 key in dict 如果键在字典dict里返回true,否则返回false
6 radiansdict.items() 以列表返回可遍历的(键, 值) 元组数组
7 radiansdict.keys() 返回一个迭代器,可以使用 list() 来转换为列表
8 radiansdict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9 radiansdict.update(dict2) 把字典dict2的键/值对更新到dict里
10 radiansdict.values() 返回一个迭代器,可以使用 list() 来转换为列表
11 pop(key[,default])删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
12 popitem() 随机返回并删除字典中的最后一对键和值。

集合Set

集合(set)是一个无序的不重复元素序列。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}

print basket                  # 这里演示的是去重功能
print "'orange' in basket:",'orange' in basket                 # 快速判断元素是否在集合内
print "'crabgrass' in basket:",'crabgrass' in basket

### 下面展示两个集合间的运算.
a = set('abracadabra')
b = set('alacazam')
                               
print "a:",a
print "b:",b

print "集合a中包含而集合b中不包含的元素:"
print a - b                              # 集合a中包含而集合b中不包含的元素

print "集合a或b中包含的所有元素:"
print  a | b                              # 集合a或b中包含的所有元素

print "集合a和b中都包含了的元素:"
print a & b                              # 集合a和b中都包含了的元素

print "不同时包含于a和b的元素:"
print a ^ b                              # 不同时包含于a和b的元素

运行结果

set(['orange', 'pear', 'apple', 'banana'])
'orange' in basket: True
'crabgrass' in basket: False
a: set(['a', 'r', 'b', 'c', 'd'])
b: set(['a', 'c', 'z', 'm', 'l'])
集合a中包含而集合b中不包含的元素:
set(['r', 'b', 'd'])
集合a或b中包含的所有元素:
set(['a', 'c', 'b', 'd', 'm', 'l', 'r', 'z'])
集合a和b中都包含了的元素:
set(['a', 'c'])
不同时包含于a和b的元素:
set(['b', 'd', 'm', 'l', 'r', 'z'])

添加元素

语法格式如下:

s.add( x )

将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。

thisset = set(("Google", "Runoob", "Taobao"))
thisset.add("Facebook")
print thisset
thisset.add("Google")
print thisset

运行结果

set(['Facebook', 'Google', 'Taobao', 'Runoob'])
set(['Facebook', 'Google', 'Taobao', 'Runoob'])

还有一个方法,也可以添加元素,且参数可以是列表,元组,字典等,语法格式如下:

s.update( x )

x 可以有多个,用逗号分开。

thisset = set(("Google", "Runoob", "Taobao"))
thisset.update({1,3})
print(thisset)
thisset.update([1,4],[5,6])  
print(thisset)

运行结果

set([3, 1, 'Google', 'Taobao', 'Runoob'])
set([1, 3, 4, 5, 6, 'Runoob', 'Google', 'Taobao'])

删除元素

语法格式如下:

s.remove( x )

将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。

thisset = set(("Google", "Runoob", "Taobao"))
thisset.remove("Taobao")
print thisset
thisset.remove("Facebook")   # 不存在会发生错误

运行结果

set(['Google', 'Runoob'])
Traceback (most recent call last):
  File "C:\Users\Admin\Desktop\集合.py", line 4, in <module>
    thisset.remove("Facebook")   # 不存在会发生错误
KeyError: 'Facebook'

此外还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。格式如下所示:

s.discard( x )
thisset = set(("Google", "Runoob", "Taobao"))
thisset.discard("Facebook")  # 不存在不会发生错误
print thisset

运行结果

set(['Google', 'Taobao', 'Runoob'])

我们也可以设置随机删除集合中的一个元素,语法格式如下:

s.pop() 
thisset = set(("Google", "Runoob", "Taobao", "Facebook"))
x = thisset.pop()
print x #显示随机删除的元素

运行结果

Facebook

在交互模式,pop 是删除集合的第一个元素(排序后的集合的第一个元素)。

计算集合元素个数

语法格式如下:

len(s)
thisset = set(("Google", "Runoob", "Taobao"))
print len(thisset)

运行结果

3

清空集合

语法格式如下:

s.clear()

清空集合 s

thisset = set(("Google", "Runoob", "Taobao"))
thisset.clear()
print(thisset)

运行结果

set([])

判断元素是否在集合中存在

集合内置方法

序号 方法 描述
1 add() 为集合添加元素
2 clear() 移除集合中的所有元素
3 copy() 拷贝一个集合
4 difference() 返回多个集合的差集
5 difference_update() 移除集合中的元素,该元素在指定的集合也存在。
6 discard() 删除集合中指定的元素
7 intersection() 返回集合的交集
8 intersection_update() 返回集合的交集。
9 isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
10 issubset() 判断指定集合是否为该方法参数集合的子集。
11 issuperset() 判断该方法的参数集合是否为指定集合的子集
12 pop() 随机移除元素
13 remove() 移除指定元素
14 symmetric_difference() 返回两个集合中不重复的元素集合。
15 symmetric_difference_update() 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
16 union() 返回两个集合的并集
17 update() 给集合添加元素

代码

set1={1}
set2={2}
# add一次只能添加一个元素
set1.add("Taobao")
set1.add("Baidu")
set1.add("Google")
print "add——使用add添加三个元素后的set1:\n",set1
# update可以添加元素,且参数可以是列表,元组,字典等
set2.update(("Google", "Runoob", "Tencent"))
print "\nupdate——使用update添加三个元素组成的元组后的set2:\n",set2

# isdisjoint判断两个集合是否不包含相同的元素,如果没有返回 True,否则返回 False
print "\nisdisjoint——set1中是否不包含set2中的元素:\n",set1.isdisjoint(set2)

# issubset判断集合的所有元素是否都包含在指定集合中,如果是则返回 True,否则返回 False。
print "\nissubset——set1中所有元素是否都在set2中:\n",set1.issubset(set2)
print "set1和set2的交集中所有元素是否都在set2中:\n",set1.intersection(set2).issubset(set2)

# issuperset判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False。
print "\nissuperset——set2中所有元素是否都在set1中:\n",set1.issubset(set2)
print "set1和set2的交集中所有元素是否都在set1中:\n",set1.intersection(set2).issubset(set2)

# intersection返回两个或更多集合中都包含的元素,即交集
print "\nintersection——返回set1和set2的交集:\n",set1.intersection(set2)

# union返回两个集合的并集,即包含了所有集合的元素,重复的元素只会出现一次。
print "\nunion——返回set1和set2的并集:\n",set1.union(set2)

# difference返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中
print "\ndifference——返回set1和set2的差集:\n",set1.difference(set2)

# symmetric_difference返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。
print "\nsymmetric_difference——返回set1和set2中不重复的元素集合:\n",set1.symmetric_difference(set2)

# symmetric_difference_update移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
set1.symmetric_difference_update(set2)
print "\nsymmetric_difference_update——移除set1中和set重复的元素,并将set2中不同的元素添加到set1中:\n",set1


# intersection_update在原始的集合上移除不重叠的元素
set1.intersection_update(set2)
print "\nintersection_update——移除set1中的set1和set2的不重叠元素:\n",set1

# difference_update用于移除两个集合中都存在的元素
set1.difference_update(set2)
print "\ndifference_update——移除set1中的set1和set2的重叠元素:\n",set1



# copy将set2拷贝给set1
set1=set2.copy()
print "\ncopy——将set2拷贝给set1:\n",set1

# remove移除指定的集合元素,不存在会报错
set1.remove("Tencent")
print "\nremove——移除set1中的'Tencent',不存在会报错:\n",set1


# discard用于移除指定的集合元素,不存在不会报错
set1.discard("Tencent")
print "\ndiscard——移除set1中的'Tencent',不存在不会报错:\n",set1

# pop用于移除指定的集合元素,不存在会报错
set1.pop()
print "\npop——随机移除set1中的一个元素:\n",set1

# clear清空集合
set1.clear()
set2.clear()
print "\nclear——清空后的set1,set2:\n",set1,set2

运行结果

add——使用add添加三个元素后的set1:
set(['Baidu', 1, 'Google', 'Taobao'])

update——使用update添加三个元素组成的元组后的set2:
set([2, 'Google', 'Tencent', 'Runoob'])

isdisjoint——set1中是否不包含set2中的元素:
False

issubset——set1中所有元素是否都在set2中:
False
set1和set2的交集中所有元素是否都在set2中:
True

issuperset——set2中所有元素是否都在set1中:
False
set1和set2的交集中所有元素是否都在set1中:
True

intersection——返回set1和set2的交集:
set(['Google'])

union——返回set1和set2的并集:
set(['Baidu', 1, 2, 'Google', 'Runoob', 'Taobao', 'Tencent'])

difference——返回set1和set2的差集:
set(['Baidu', 1, 'Taobao'])

symmetric_difference——返回set1和set2中不重复的元素集合:
set(['Baidu', 1, 2, 'Runoob', 'Tencent', 'Taobao'])

symmetric_difference_update——移除set1中和set重复的元素,并将set2中不同的元素添加到set1中:
set(['Baidu', 1, 2, 'Runoob', 'Taobao', 'Tencent'])

intersection_update——移除set1中的set1和set2的不重叠元素:
set([2, 'Tencent', 'Runoob'])

difference_update——移除set1中的set1和set2的重叠元素:
set([])

copy——将set2拷贝给set1:
set([2, 'Google', 'Tencent', 'Runoob'])

remove——移除set1中的'Tencent',不存在会报错:
set([2, 'Google', 'Runoob'])

discard——移除set1中的'Tencent',不存在不会报错:
set([2, 'Google', 'Runoob'])

pop——随机移除set1中的一个元素:
set(['Google', 'Runoob'])

clear——清空后的set1,set2:
set([]) set([])

运算符

算术运算符

以下假设变量a为10,变量b为21:

运算符 描述 实例
+ 加 - 两个对象相加 a + b 输出结果 31
- 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -11
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 210
/ 除 - x 除以 y b / a 输出结果 2.1
% 取模 - 返回除法的余数 b % a 输出结果 1
** 幂 - 返回x的y次幂 a**b 为10的21次方
// 取整除 - 向下取接近除数的整数 >>> 9//2 4 >>> -9//2 -5

比较运算符

以下假设变量a为10,变量b为20:

运算符 描述 实例
== 等于 - 比较对象是否相等 (a == b) 返回 False。
!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 True。
> 大于 - 返回x是否大于y (a > b) 返回 False。
< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 (a < b) 返回 True。
>= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
<= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 True。

赋值运算符

以下假设变量a为10,变量b为20,c=0:

运算符 描述 实例
= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c,c=20
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a,
*= 乘法赋值运算符 c *= a 等效于 c = c * a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c** = a 等效于 c = c ** a
//= 取整除赋值运算符 c //= a 等效于 c = c // a
:= 海象运算符,可在表达式内部为变量赋值。Python3.8 版本新增运算符 在这个示例中,赋值表达式可以避免调用 len() 两次:if (n := len(a)) > 10: print(f"List is too long ({n} elements, expected <= 10)")
a = 21
b = 10
c = 0

c = a + b
print "1 - c 的值为:", c

c += a
print "2 - c 的值为:", c

c *= a
print "3 - c 的值为:", c

c /= a 
print "4 - c 的值为:", c

c = 2
c %= a
print "5 - c 的值为:", c

c **= a
print "6 - c 的值为:", c

c //= a
print "7 - c 的值为:", c

运行结果

1 - c 的值为: 31
2 - c 的值为: 52
3 - c 的值为: 1092
4 - c 的值为: 52
5 - c 的值为: 2
6 - c 的值为: 2097152
7 - c 的值为: 99864

逻辑运算符

Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:

运算符 逻辑表达式 描述 实例
and x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。
or x or y 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 (a or b) 返回 10。
not not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False

成员运算符

除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

运算符 描述 实例
in 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。
a = 10
b = 20
list = [1, 2, 3, 4, 5 ];

if ( a in list ):
   print ("1 - 变量 a 在给定的列表中 list 中")
else:
   print ("1 - 变量 a 不在给定的列表中 list 中")

if ( b not in list ):
   print ("2 - 变量 b 不在给定的列表中 list 中")
else:
   print ("2 - 变量 b 在给定的列表中 list 中")

# 修改变量 a 的值
a = 2
if ( a in list ):
   print ("3 - 变量 a 在给定的列表中 list 中")
else:
   print ("3 - 变量 a 不在给定的列表中 list 中")

运行结果

1 - 变量 a 不在给定的列表中 list 中
2 - 变量 b 不在给定的列表中 list 中
3 - 变量 a 在给定的列表中 list 中

语句

条件控制

Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。

Python中if语句的一般形式如下所示:

if condition_1:
  statement_block_1
elif condition_2:
  statement_block_2
else:
  statement_block_3
  • 如果 "condition_1" 为 True 将执行 "statement_block_1" 块语句
  • 如果 "condition_1" 为False,将判断 "condition_2"
  • 如果"condition_2" 为 True 将执行 "statement_block_2" 块语句
  • 如果 "condition_2" 为False,将执行"statement_block_3"块语句

Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else

注意:

  • 1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
  • 2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
  • 3、在Python中没有switch – case语句。
var1 = 100
if var1:
    print "1——if 表达式条件为 true"
    print var1
 
var2 = 0
if var2:
    print "2——if 表达式条件为 true"
    print var2
print "Good bye!"

运行结果

1——if 表达式条件为 true
100
Good bye!

多重判断

age = int(input("请输入你家狗狗的年龄: "))
print ""
if age <= 0:
        print "你是在逗我吧!"
elif age == 1:
        print "相当于 14 岁的人。"
elif age == 2:
        print "相当于 22 岁的人。"
elif age > 2:
        human = 22 + age -2*5
        print "对应人类年龄: ", human

运行结果(输入数字5)

请输入你家狗狗的年龄: 5

对应人类年龄:  17

数字猜谜游戏

# 该实例演示了数字猜谜游戏
number = 7
guess = -1
print("数字猜谜游戏!")
while guess != number:
    guess = int(input("请输入你猜的数字:"))

    if guess == number:
        print "恭喜,你猜对了!"
    elif guess < number:
        print "猜的数字小了..."
    elif guess > number:
        print "猜的数字大了..."

运行结果

数字猜谜游戏!
请输入你猜的数字:100
猜的数字大了...
请输入你猜的数字:5
猜的数字小了...
请输入你猜的数字:6
猜的数字小了...
请输入你猜的数字:7
恭喜,你猜对了!

嵌套判断

num=int(input("输入一个数字:"))
if num%2==0:
    if num%3==0:
        print "你输入的数字可以整除 2 和 3"
    else:
        print "你输入的数字可以整除 2,但不能整除 3"
else:
    if num%3==0:
        print "你输入的数字可以整除 3,但不能整除 2"
    else:
        print  "你输入的数字不能整除 2 和 3"

运行结果

输入一个数字:15
你输入的数字可以整除 3,但不能整除 2

循环语句

Python 中的循环语句有 for 和 while。

while 循环

Python 中 while 语句的一般形式:

while 判断条件(condition):
    执行语句(statements)……

同样需要注意冒号和缩进。另外,在 Python 中没有 do..while 循环。

以下实例使用了 while 来计算 1 到 100 的总和:

n = 100

sum = 0
counter = 1
while counter <= n:
    sum = sum + counter
    counter += 1

print "1 到 %d 之和为: %d" % (n,sum)

运行结果

1 到 100 之和为: 5050

无限循环

我们可以通过设置条件表达式永远不为 false 来实现无限循环,实例如下:

var = 1
while var == 1 :  # 表达式永远为 true
   num = int(input("输入一个数字  :"))
   print "你输入的数字是: ", num

print "Good bye!"

运行结果

输入一个数字  :1
你输入的数字是:  1
输入一个数字  :2
你输入的数字是:  2
输入一个数字  :3
你输入的数字是:  3
输入一个数字  :

你可以使用 CTRL+C 来退出当前的无限循环。

无限循环在服务器上客户端的实时请求非常有用。

while 循环使用 else 语句

在 while … else 在条件语句为 false 时执行 else 的语句块。

语法格式如下:

while <expr>:
    <statement(s)>
else:
    <additional_statement(s)>

循环输出数字,并判断大小:

count = 0
while count < 5:
   print count, " 小于 5"
   count = count + 1
else:
   print count, " 大于或等于 5"

运行结果

0  小于 5
1  小于 5
2  小于 5
3  小于 5
4  小于 5
5  大于或等于 5

for 语句

Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。

for循环的一般格式如下:

for <variable> in <sequence>:
  <statements>
else:
  <statements>
languages = ["C", "C++", "Perl", "Python"] 
for x in languages:
    print x

运行结果

C
C++
Perl
Python

以下 for 实例中使用了 break 语句,break 语句用于跳出当前循环体:

sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
    if site == "Google":
        print("Welcome to visit Google's websit!")
        break
    print"循环数据 " + site
else:
    print "没有循环数据!"
print "完成循环!"

运行结果

循环数据 Baidu
Welcome to visit Google's websit!
完成循环!

range()函数

如果你需要遍历数字序列,可以使用内置range()函数。它会生成数列,例如:

for i in range(5) :
    print i

运行结果

0
1
2
3
4

也可以使range以指定数字开始并指定不同的增量(甚至可以是负数,有时这也叫做'步长'):

for i in range(0, 10, 3) :
    print i

运行结果

0
3
6
9

您可以结合range()和len()函数以遍历一个序列的索引,如下所示:

a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
for i in range(len(a)):
    print i, a[i]

运行结果

0 Google
1 Baidu
2 Runoob
3 Taobao
4 QQ

还可以使用range()函数来创建一个列表:

mylist=list(range(5))
print mylist

运行结果

[0, 1, 2, 3, 4]

break 和 continue 语句及循环中的 else 子句

break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。

continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。ss 语句

while中使用

n = 5
while n > 0:
    n -= 1
    if n == 2:
        break
    print n
print "break test finished!"

m = 5
while m > 0:
    m -= 1
    if m == 2:
        continue
    print m
print "continue test finished!"

运行结果

4
3
break test finished!
4
3
1
0
continue test finished!

for中使用

blog = "www.bighead.fun"
for letter in blog :
    print letter
    if letter == "h" :
        break

print "break test finished!"

for letter in blog :
    print letter
    if letter == "h" :
        continue

print "continue test finished!"

运行结果

w
w
w
.
b
i
g
h
break test finished!
w
w
w
.
b
i
g
h
e
a
d
.
f
u
n
continue test finished!

循环语句可以有 else 子句,它在穷尽列表(以for循环)或条件变为 false (以while循环)导致循环终止时被执行,但循环被 break 终止时不执行。

如下实例用于查询质数的循环例子:

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print n, '等于', x, '*', n//x 
            break
    else:
        # 循环中没有找到元素
        print n, ' 是质数'

运行结果

2  是质数
3  是质数
4 等于 2 * 2
5  是质数
6 等于 2 * 3
7  是质数
8 等于 2 * 4
9 等于 3 * 3

pass 语句

Python pass是空语句,是为了保持程序结构的完整性。

pass 不做任何事情,一般用做占位语句,如下实例

for letter in 'www.bighead.fun': 
   if letter == 'h':
      pass
      print '执行 pass 块'
   print '当前字母 :', letter

运行结果

当前字母 : w
当前字母 : w
当前字母 : w
当前字母 : .
当前字母 : b
当前字母 : i
当前字母 : g
执行 pass 块
当前字母 : h
当前字母 : e
当前字母 : a
当前字母 : d
当前字母 : .
当前字母 : f
当前字母 : u
当前字母 : n

异常处理

Python 有两种错误很容易辨认:语法错误和异常。

Python 的语法错误或者称之为解析错,是初学者经常碰到的 。

即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。

try/except

异常捕捉可以使用 try/except 语句。

try :
    执行代码
except ErrorType(错误类型):
    发生异常时执行的代码

try 语句按照如下方式工作;

  • 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
  • 如果没有异常发生,忽略 except 子句,try 子句执行后结束。
  • 如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
  • 如果一个异常没有与任何的 excep 匹配,那么这个异常将会传递给上层的 try 中。

一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

处理程序将只针对对应的 try 子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。

一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,例如:

except (RuntimeError, TypeError, NameError):
    pass

最后一个except子句可以忽略异常的名称,它将被当作通配符使用。你可以使用这种方法打印一个错误信息,然后再次把异常抛出。

try :
    fh =open("testfile.txt")
    print fh.readline()
    fh.close()
except IOError:
    print "找不到文件,无法打开"

运行结果

找不到文件,无法打开

try/except...else

  • try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。else 子句将在 try 子句没有发生任何异常的时候执行。

  • 使用 else 子句比把所有的语句都放在 try 子句里面要好,这样可以避免一些意想不到,而 except 又无法捕获的异常。

try :
    fh =open("testfile.txt","w")
    fh.write("这是一个测试文件,用于测试异常!")
except IOError :
    print "Error:没有找到文件和读取文件失败"
else :
    print "内容写入成功"
    fh.close()

运行结果

内容写入成功

将testfile.txt设为只读,再次运行结果

Error:没有找到文件和读取文件失败

异常处理并不仅仅处理那些直接发生在 try 子句中的异常,而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。

try-finally 语句

try-finally 语句无论是否发生异常都将执行最后的代码。

try :
    fh =open("testfile.txt","w")
    fh.write("这是一个测试文件,用于测试异常!")
except IOError :
    print "Error:没有找到文件和读取文件失败"
else :
    print "内容写入成功"
    fh.close()
finally :
    print('这句话,无论异常是否发生都会执行。')

运行结果

内容写入成功
这句话,无论异常是否发生都会执行。

将testfile.txt设为只读,运行结果

Error:没有找到文件和读取文件失败
这句话,无论异常是否发生都会执行。

用户自定义异常

通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。

下面代码引发自定义的BigError错误

import os,stat

class BigError():
    pass
try :
    if os.path.exists('testfile.txt') :
        os.chmod('testfile.txt', stat.S_IWRITE) #取消只读权限
    fh =open("testfile.txt","w")
    fh.write("BigError")
    fh.close()
    fh =open("testfile.txt","r")
    if fh.readline()=="BigError" :
        raise BigError()
except IOError :
    print "Error:没有找到文件和读取文件失败"
except BigError :
    print "Error:引发自定义BigError错误"
finally :
    print('这句话,无论异常是否发生都会执行。')

运行结果

Error:引发自定义BigError错误
这句话,无论异常是否发生都会执行。

Python常见运行错误

UnicodeEncodeError: 'ascii' codec can't encode character

Python解释器的默认编码文件是用的ASCII码,而你的python文件中使用了中文等非英语字符。

字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

Decode 的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。

Encode 的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。

因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码。代码中字符串的默认编码与代码文件本身的编码一致。

以上为针对语句,或者直接在开头加

# -*- coding: cp936 -*-
###或者
# -*- coding: utf-8 -*-
###或者
import sys
reload(sys)
sys.setdefaultencoding('utf8')

SyntaxError :invalid syntax

忘记在if,for,def,elif,else,class等声明末尾加 :

if spam == 42  
	print('Hello!')

使用= 而不是 ==

= 是赋值操作符而 == 是等于比较操作。该错误发生在如下代码中:

if spam = 42:  
	print('Hello!')

IndentationError:unexpected indent

错误的使用缩进量导致
“IndentationError:unexpected indent”、
“IndentationError:unindent does not match any outer indetation level”
以及“IndentationError:expected an indented block”
记住缩进增加只用在以:结束的语句之后,而之后必须恢复到之前的缩进格式。该错误发生在如下代码中:

print('Hello!')  
	print('Howdy!')

TypeError: 'list' object cannot be interpreted as an integer

在 for 循环语句中忘记调用 len()

通常你想要通过索引来迭代一个list或者string的元素,这需要调用 range() 函数。要记得返回len 值而不是返回这个列表。

该错误发生在如下代码中:

spam = ['cat', 'dog', 'mouse']
for i in range(spam):  
    print(spam[i])

TypeError: 'str' object does not support item assignment

尝试修改string的值

string是一种不可变的数据类型,该错误发生在如下代码中:

spam = 'I have a pet cat.'
spam[13] = 'r'
print(spam)

而正确做法是:

spam = 'I have a pet cat.'
spam = spam[:13] + 'r' + spam[14:]
print(spam)

TypeError: Can't convert 'int' object to str implicitly

尝试连接非字符串值与字符串

该错误发生在如下代码中:

numEggs = 12
print('I have ' + numEggs + ' eggs.')

而正确做法是:

numEggs = 12
print('I have ' + str(numEggs) + ' eggs.')
numEggs = 12
print('I have %s eggs.' % (numEggs))

SyntaxError: EOL while scanning string literal

在字符串首尾忘记加引号

该错误发生在如下代码中:

print(Hello!')
print('Hello!)
myName = 'Al'
print('My name is ' + myName + . How are you?')

NameError: name 'fooba' is not defined

变量或者函数名拼写错误

该错误发生在如下代码中:

foobar = 'Al'
print('My name is ' + fooba)
spam = ruond(4.2)
spam = Round(4.2)

AttributeError: 'str' object has no attribute 'lowerr'

方法名拼写错误

该错误发生在如下代码中:

spam = 'THIS IS IN LOWERCASE.'
spam = spam.lowerr()

IndexError: list index out of range

引用超过list最大索引

该错误发生在如下代码中:

spam = ['cat', 'dog', 'mouse']
print(spam[6])

KeyError:‘spam’

使用不存在的字典键值

该错误发生在如下代码中:

spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name of my pet zebra is ' + spam['zebra'])

SyntaxError:invalid syntax

尝试使用Python关键字作为变量名

Python关键不能用作变量名,该错误发生在如下代码中:

class = 'algebra'

Python3的关键字有:

and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield

NameError: name 'foobar' is not defined

在一个定义新变量中使用增值操作符

不要在声明变量时使用0或者空字符串作为初始值,这样使用自增操作符的一句spam += 1等于spam = spam + 1,这意味着spam需要指定一个有效的初始值。

该错误发生在如下代码中:

spam = 0
spam += 42
eggs += 42

UnboundLocalError: local variable 'foobar' referenced before assignment

在定义局部变量前在函数中使用局部变量(此时有与局部变量同名的全局变量存在)

在函数中使用局部变来那个而同时又存在同名全局变量时是很复杂的,使用规则是:如果在函数中定义了任何东西,如果它只是在函数中使用那它就是局部的,反之就是全局变量。

这意味着你不能在定义它之前把它当全局变量在函数中使用。

该错误发生在如下代码中:

someVar = 42
def myFunction():  
    print(someVar)  
    someVar = 100

myFunction()

TypeError: 'range' object does not support item assignment

尝试使用 range()创建整数列表

有时你想要得到一个有序的整数列表,所以 range() 看上去是生成此列表的不错方式。然而,你需要记住 range() 返回的是 “range object”,而不是实际的 list 值。

该错误发生在如下代码中:

spam = range(10)
spam[4] = -1

正确写法:

spam = list(range(10))
spam[4] = -1

(注意:在 Python 2 中 spam = range(10) 是能行的,因为在 Python 2 中 range() 返回的是list值,但是在 Python 3 中就会产生以上错误)

SyntaxError: invalid syntax

不存在 ++ 或者 -- 自增自减操作符。

导致“SyntaxError: invalid syntax

如果你习惯于例如 C++ , Java , PHP 等其他的语言,也许你会想要尝试使用 ++ 或者 -- 自增自减一个变量。在Python中是没有这样的操作符的。

该错误发生在如下代码中:

spam = 1
spam++

正确写法:

spam = 1
spam += 1

TypeError: myMethod() takes no arguments (1 given)

忘记为方法的第一个参数添加self参数

该错误发生在如下代码中:

class Foo():
  def myMethod():
      print('Hello!')
a = Foo()
a.myMethod()
posted @ 2019-11-11 20:00  大头和尚  阅读(1391)  评论(0编辑  收藏  举报