python将变量i的值增加1_Python基础教程之第二章---变量和字符串(1) 搬运
Python变量及其使用无论使用什么语言编程,其最终目的都是对数据进行处理。程序在编程过程中,为了处理数据更加方便,通常会将其存储在变量中。形象地看,变量就像一个个小容器,用于“盛装”程序中的数据。除了变量,还有常量,它也能用来“盛装”数据,它们的区别是,常量一旦保存某个数据之后,该数据就不能发生改变;但变量保存的数据则可以多次发生改变,只要程序对变量重新赋值即可。Python 使用等号(=)作为
Python变量及其使用
无论使用什么语言编程,其最终目的都是对数据进行处理。程序在编程过程中,为了处理数据更加方便,通常会将其存储在变量中。
形象地看,变量就像一个个小容器,用于“盛装”程序中的数据。除了变量,还有常量,它也能用来“盛装”数据,它们的区别是,常量一旦保存某个数据之后,该数据就不能发生改变;但变量保存的数据则可以多次发生改变,只要程序对变量重新赋值即可。
Python 使用等号(=)作为赋值运算符,例如 a = 20 就是一条赋值语句,这条语句用于将 20 装入变量 a 中,这个过程就被称为赋值,即将 20 赋值给变量 a。
注意,变量名其实就是标识符,因此在命名时,既要遵守 Python 标识符命名规范,还要避免和 Python 内置函数以及 Python 保留字重名。
如果你接触过 C、C++、Java 这些高级编程语言会发现,它们在使用变量存储数据时,必须指定该变量所能存储的数据类型,以 C 语言为例:int a = 20
这行 C 语言代码的意思是,声明一个整形变量 a 来存储整数 20,这就意味着,我们无法用 a 存储小数、字符以及字符串等其他类型数据,这类编程语言被称为强类型语言。
和强类型语言相对应的是弱类型语言,Python 就是典型代表之一。弱类型语言有以下 2 个特征:变量无须声明即可直接赋值,对一个不存在的变量赋值就相当于定义了一个新变量。
变量的数据类型可以动态改变:同一个变量可以一会儿被赋值为整数值,一会儿被赋值为字符串。
对于没有编程基础的读者,可以先不编写真正的 Python 程序,而是先打开 Python 的交互式解释器,在这个交互式解释器中“试验” Python。首先,在 Python 解释器中输入如下内容:>>> a = 5
>>>
上面代码没有生成任何输出,只是向交互式解释器中存入了一个变量 a,该变量 a 的值为 5。
如果我们想看到某个变量的值,可以直接在交互式解释器中输入该变量。例如,此处想看到变量 a 的值,可以直接输入 a。>>> a
5
>>>
可以看到,Python 解释器输出变量 a 的值为 5。
接下来,我们尝试改变变量 a 的值,将新的值赋给变量 a,例如:>>>a = 'Hello , Charlie'
>>>
这会导致变量原来的值被新值覆盖掉,换句话说,此时变量 a 的值就不再是 5 了,而是字符串“Hello , Charlie”,a 的类型也变成了字符串。现在再输入 a,让交互式解释器显示 a 的值:>>> a
'Hello , Charlie'
如果想查看此时 a 的类型,可以使用 Python 的 type() 内置函数。>>> type(a)
>>>
可以看到,a 的类型是 str(表示字符串类型)。
形象地说,函数就相当于一个有魔法的“黑盒子”,你可以向这个“黑盒子“提供”一些数据,这个“黑盒子”会对这些数据进行处理,这种处理包括转换和输出结果。比如 print() 也是一个函数,它的作用就是输出传入的数据。此处 type() 函数的作用则用于输出传入数据的类型。
最后,如果想把上面的交互过程转换成真正的 Python 程序,只要将过程中输入的每行代码放在一个文件中,并使用 print() 函数来输出变量,最后将该文件保存为以 .py 结尾的源文件即可。
在交互式解释器中,只要输入变量名,交互式解释器就会输出变量的值,但在 Python 程序中则必须使用 print() 函数来输出变量。
上面的交互过程对应的程序如下:#定义一个数值类型变量
a = 5
print(a)
#重新将字符串赋值给a变量
a = 'Hello , Charlie'
print(a)
print(type(a))
Python变量命名规则(超级详细)
Python 需要使用标识符给变量命名,其实标识符就是用于给程序中变量、类、方法命名的符号(简单来说,标识符就是合法的名字)。
Python 语言的标识符必须以字母、下画线(_)开头,后面可以跟任意数目的字母、数字和下画线(_)。此处的字母并不局限于 26 个英文字母,可以包含中文字符、日文字符等。
由于 Python 3 支持 UTF-8 字符集,因此 Python 3 的标识符可以使用 UTF-8 所能表示的多种语言的字符。Python 语言是区分大小写的,因此 abc 和 Abc 是两个不同的标识符。
Python 2.x 对中文支持较差,如果要在 Python 2.x 程序中使用中文字符或中文变量,则需要在 Python 源程序的第一行增加“#coding:utf-8”,当然别忘了将源文件保存为 UTF-8 字符集。
在使用标识符时,需要注意如下规则:标识符可以由字母、数字、下画线(_)组成,其中数字不能打头。
标识符不能是 Python 关键字,但可以包含关键字。
标识符不能包含空格。
例如下面变量,有些是合法的,有些是不合法的:abc_xyz:合法。
HelloWorld:合法。
abc:合法。
xyz#abc:不合法,标识符中不允许出现“#”号。
abc1:合法。
1abc:不合法,标识符不允许数字开头。
Python 的关键字和内置函数
Python 还包含一系列关键字和内置函数,一般也不建议使用它们作为变量名:如果开发者尝试使用关键字作为变量名,Python 解释器会报错。
如果开发者使用内置函数的名字作为变量名,Python 解释器倒不会报错,只是该内置函数就被这个变量覆盖了,该内置函数就不能使用了。
Python 包含了如表 1 所示的关键字:
表 1 Python 关键字FalseNoneTrueandasassert breakclasscontinuedefdelelifelse exceptfinallyforfromglobalifimportinislambdanonlocalnotorpassraisereturntrywhilewithyield
实际上 Python 非常方便,开发者可以通过 Python 程序来查看它所包含的关键字。例如,对于如下程序:#导入keyword 模块
import keyword
#显示所有关键字
keyword.kwlist
从上面代码可以看出,程序只要先导入 keyword 模块,然后调用 keyword.kwlist 即可查看 Python 包含的所有关键字。运行上面程序,可以看到如下输出结果:
['False','None','True','and','as','assert','break','class','continue','def','del','elif','else','except','finally','for','from','global','if','import','in','is','lambda','nonlocal','not','or','pass','raise','return','try','while','With','yield']
上面这些关键字都不能作为变量名。
此外,Python 3 还提供了如表 2 所示的内置函数。
表 2 Python内置函数abs()all()any()basestring()bin()bool()bytearray()callable()chr()classmethod()cmp()compile() complex()delattr()dict()dir()divmod()enumerate() eval()execfile()file()filter()float() format()frozenset()getattr()globals()hasattr()hash()help()hex()id()input()int() isinstance()issubclass()iter()len()list()locals()long()map() max()memoryview()min()next() object()oct() open() ord()pow()print()property()range()raw_input()reduce()reload()repr()reversed()zip()round() set()setattr()slice()sorted()staticmethod()str()sum()super()tuple()type()unichr()unicode() vars()xrange()Zip()__import__()apply()buffer()coerce()intern
上面这些内置函数的名字也不应该作为标识符,否则 Python 的内置函数会被覆盖。
注意:在 Python 2.x 中,print 是关键字而不是函数。上面这些内置函数(如 unicode())只是 Python 2.x 的内置函数,为了保证 Python 程序具有更好的兼容性,程序也不应该使用这些内置函数的名字作为标识符。
Python数值类型(整形、浮点型和复数)及其用法
实际开发中,我们经常需要使用数字记录游戏中用户的得分、游戏中角色的生命值、伤害值等信息,Python 语言提供了数值类型用于保存这些数值。
需要注意的是,Python 中这些数值类型都是不可改变的,也就是说,如果我们要修改数字类型变量的值,那么其底层实现的过程是,先将新值存放到内存中,然后修改变量让其指向新的内存地址,换句话说,Python 中修改数值类型变量的值,其实只是修改变量名所表示的内存空间。
数值类型只是一个泛泛的统称,Python 中的数值类型主要包括整形、浮点型和复数类型。
Python整型
整形专门用来表示整数,即没有小数部分的数。在 Python 中,整数包括正整数、0 和负整数。
和其他强类型语言不同,它们会提供多种整形类型,开发者要根据数值的大小,分别用不同的整形类型存储,以 C 语言为例,根据数值的大小,开发者要合理选择 short、int、long 整形类型存储,大大增加了开发难度。
Python 则不同,它的整型支持存储各种整数值,无论多大或者多小,Python 都能轻松处理(当所用数值超过计算机自身的计算功能时,Python 会自动转用高精度计算)。
例如如下代码:#定义变量a,赋值为56
a = 56
print(a)
#为a赋值一个大整数
a = 9999999999999999999999
print(a)
#type()函数用于返回变量的类型
print(type (a))
对于没有编程基础的读者, 同样可以在交互式解释器中逐行“试验”上面程序来观看运行效果。由于篇幅限制,本教程后面的程序不再详细列出在交互式解释器中逐行“试验”的过程。
上面程序中,将 9999999999999999999999 大整数赋值给变量 a,Python 也不会发生溢出等问题,程序运行一样正常,这足以证明 Python 的强大。
使用 Python 3.x 运行上面程序,可以看到如下输出结果:56
9999999999999999999999
从上面的输出结果可以看出,此时 a 依然是 int 类型。
但如果用 Python 2.x 运行上面程序,由于输入的数值比较大,Python 会自动在其后面加上字母 L(或小写字母 l),如下输出结果:
56
9999999999999999999999L
对比两种输出结果,不难发现:不管是 Python 3.x 还是 Python 2.x,Python 完全可以正常处理很大的整数,只是 Python 2.x 底层会将大整数当成 long 类型处理,但开发者通常不需要理会这种细节。
除此之外,Python 的整型还支持 None 值(空值),例如如下代码:a = None
print(a) #什么都不输出
Python 的整型数值有 4 种表示形式:十进制形式:最普通的整数就是十进制形式的整数,在使用十进制表示整数值时,不能以 0(零)作为十进制数的开头(数值是 0 除外)。
二进制形式:由 0 和 1 组成,以 0b 或 0B 开头。例如,101 对应十进制数是 5;
八进制形式:八进制整数由 0~7 组成,以 0o 或 0O 开头(第一个字母是零,第二个字母是大写或小写的 O)。需要注意的是,在 Python 2.x 中,八进制数值还可以直接以 0(零)开头。
十六进制形式:由 0~9 以及 A~F(或 a~f)组成,以 0x 或 0X 开头,
下面代码片段使用了其他进制形式的数:#以0x或0X开头的整型数值是十六进制形式的整数
hex_value1 = 0x13
hex_value2 = 0xaF
print("hexValue1 的值为:",hex_value1)
print("hexValue2 的值为:",hex_value2)
#以0b或0B开头的整型数值是二进制形式的整数
bin_val = 0b111
print('bin_val的值为:',bin_val)
bin_val = 0B101
print('bin_val的值为:',bin_val)
#以0o或0O开头的整型数值是八进制形式的整数
oct_val = 0o54
print('oct_val 的值为:',oct_val)
oct_val = 0O17
print('oct_val 的值为:',oct_val)
为了提高数值(包括浮点型)的可读性,Python 3.x 允许为数值(包括浮点型)增加下画线作为分隔符。这些下画线并不会影响数值本身。例如如下代码:#在数值中使用下画线
one_million = 1000000
print(one_million)
price = 234_234_234 #price 实际的值为234234234
android = 1234_1234 #android 实际的值为12341234
Python浮点型
浮点型数值用于保存带小数点的数值,Python 的浮点数有两种表示形式:十进制形式:这种形式就是平常简单的浮点数,例如 5.12、512.0、0.512。浮点数必须包含一个小数点,否则会被当成整数类型处理。
科学计数形式:例如 5.12e2(即 5.12×102)、5.12E2(也是 5.12 ×102)。
必须指出的是,只有浮点型数值才可以使用科学计数形式表示。例如 51200 是一个整型值,但 512E2 则是浮点型值。
下面程序示范了上面介绍的关于浮点数的各个知识点:af1 = 5.2345556
#输出af1的值
print("af1的值为:",af1)
af2 = 25.2345
print("af2的类型为:",type(af2))
f1=5.12e2
print("f1的值为:",f1)
f2 = 5e3
print("f2的值为:",f2)
print("f2的类型为:",type(f2))#看到类型为float
通过第 8 行代码可以看出,虽然 5e3 的值是 5000,但它依然是浮点型值,而不是整型值,因为 Python 会自动将该数值变为 5000.0。
注意,使用浮点数进行计算时,可能会出现小数位数不确定的情况,比如说,计算 0.1+0.2,本来应该得到 0.3,但经过测试你会发现,Python解释器的运行结果为 0.30000000000000004。几乎所有编程语言都存在这个问题,这与浮点数在底层的存储方式有关系(后续章节会做详细介绍)。
Python复数
Python 甚至可以支持复数,复数的虚部用 j 或 J 来表示。
如果读者对虚数虚部感到困惑,请直接跳过本节,大部分编程并不会用到复数这么“高级”的数学知识。
如果需要在程序中对复数进行计算,可导入 Python 的 cmath 模块(c 代表 complex),在该模块下包含了各种支持复数运算的函数。
模块就是一个 Python 程序,Python 正是通过模块提高了自身的可扩展性的;Python 本身内置了大量模块,此外还有大量第三方模块,导入这些模块即可直接使用这些程序中定义的函数。
下面程序示范了复数的用法:
纯文本复制ac1 = 3 + 0.2j
print (ac1)
print(type(ac1)) #输出复数类型
ac2 = 4 - 0.1j
print(ac2)
#复数运行
print(ac1 + ac2) #输出(7+0.1j)
#导入cmath 模块
import cmath
#sqrt()是cmath 模块下的商数,用于计算平方根
ac3 = cmath.sqrt(-1)
print (ac3) #输出1j
Python字符串及基本操作(入门必看)
字符串的意思就是“一串字符”,比如“Hello,Charlie”是一个字符串,“How are you?”也是一个字符串。
Python 要求字符串必须使用引号括起来,使用单引号也行,使用双引号也行,只要两边的引号能配对即可。
Python字符串和转义字符
字符串的内容几乎可以包含任何字符,英文字符也行,中文字符也行。
Python 3.x 对中文字符支持较好,但 Python 2.x 则要求在源程序中增加“#coding:utf-8”才能支持中文字符。
字符串既可用单引号括起来,也可用双引号括起来,它们没有任何区别。例如如下程序:str1 = 'Charlie'
str2 = "C语言中文网"
print(str1)
print(str2)
但需要说明的是,Python 有时候没有我们期望的那么聪明。如果字符串内容本身包含了单引号或双引号,此时就需要进行特殊处理:使用不同的引号将字符串括起来。
对引号进行转义。
先看第一种处理方式。假如字符串内容中包含了单引号,则可以使用双引号将字符串括起来。例如:str3 = 'I'm a coder'
由于上面字符串中包含了单引号,此时 Python 会将字符串中的单引号与第一个单引号配对,这样就会把 'I' 当成字符串,而后面的 m a coder' 就变成了多余的内容,从而导致语法错误。
为了避免这种问题,可以将上面代码改为如下形式:
str3 = "I'm a coder"
上面代码使用双引号将字符串括起来,此时 Python 就会把字符串中的单引号当成字符串内容,而不是和字符串开始的引号配对。
假如字符串内容本身包含双引号,则可使用单引号将字有串括起来,例如如下代码:
str4 = '"Spring is here,let us jam!", said woodchuck.'
接下来看第二种处理方式:使用转义字符。Python 允许使用反斜线(\)将字符串中的特殊字符进行转义。假如字符串既包含单引号,又包含双引号,此时必须使用转义字符,例如如下代码:
str5 = '"we are scared,Let\'s hide in the shade",says the bird'
拼接字符串
如果直接将两个字符串紧挨着写在一起,Python 就会自动拼接它们,例如如下代码:s1 = "Hello,"'Charlie'
print(s1)
上面代码将会输出:Hello,Charlie
上面这种写法只是书写字符串的一种特殊方法,并不能真正用于拼接字符串。Python 使用加号(+)作为字符串的拼接运算符,例如如下代码:s2 = "Python "
s3 = "iS Funny"
#使用+拼接字符串
s4 = s2 + s3
print(s4)
repr 和字符串
有时候,我们需要将字符串与数值进行拼接,而 Python 不允许直接拼接数值和字符串,程序必须先将数值转换成字符串。
为了将数值转换成字符串,可以使用 str() 或 repr() 函数,例如如下代码:s1 = "这是数字: "
p = 99.8
#字符串直接拼接数值,程序报错
print(s1 + p)
#使用str()将数值转换成字符串
print(s1 + str(p))
#使用repr()将数值转换成字符串
print(s1 + repr(p))
上面程序中直接拼接字符串和数值,程序会报错。
str() 和 repr() 函数都可以将数值转换成字符串,其中 str 本身是 Python 内置的类型(和 int、float 一样),而 repr() 则只是一个函数。此外,repr 还有一个功能,它会以 Python 表达式的形式来表示值。对比如下代码:st = "I will play my fife"
print (st)
print(repr(st))
上面代码中 st 本身就是一个字符串,但程序依然使用了 repr() 对字符串进行转换。运行上面程序,可以看到如下输出结果:
I will play my fife
'I will play my fife'
通过上面的输出结果可以看出,如果直接使用 print() 函数输出字符串,将只能看到字符串的内容,没有引号;但如果先使用 repr() 函数对字符串进行处理,然后再使用 print() 执行输出,将可以看到带引号的字符串,这就是字符串的 Python 的表达式形式。
在交互式解释器中输入一个主量或表达式时,Python 会自动使用 repr() 函数处理该变量或表达式。
使用 input 和 raw_input 获取用户输入
input() 函数用于向用户生成一条提示,然后获取用户输入的内容。由于 input() 函数总会将用户输入的内容放入字符串中,因此用户可以输入任何内容,input() 函数总是返回一个字符串。
例如如下程序:msg = input("请输入你的值:")
print (type(msg))
print(msg)
第一次运行该程序,我们输入一个整数,运行过程如下:
请输入你的值:2
2
第二次运行该程序,我们输入一个浮点数,运行过程如下:
请输入你的值: 1.2
1.2
第三次运行该程序,我们输入一个字符串,运行过程如下:请输入你的值:Hello
Hello
从上面的运行过程可以看出,无论输入哪种内容,始终可以看到 input() 函数返回字符串,程序总会将用户输入的内容转换成字符串。
需要指出的是,Python 2.x 提供了一个 raw_input() 函数,该 raw_input() 函数就相当于 Python 3.x 中的 input() 函数。
而 Python 2.x 也提供了一个 input() 函数,该 input() 函数则比较怪异:要求用户输入的必须是符合 Python 语法的表达式。通常来说,用户只能输入整数、浮点数、复数、字符串等。重点是格式必须正确,比如输入字符串时必须使用双引号,否则 Python 就会报错。
使用 Python 2.x 来运行上面程序,假如输入一个整数,运行过程如下:
请输入你的值:2
2
使用 Python 2.x 来运行上面程序,假如输入一个复数,运行过程如下:请输入你的值: 2+3j
(2+3j)
使用 Python 2.x 来运行上面程序,假如输入一个字符串,运行过程如下:
请输入你的值:Hello
NameError : name 'Hello' is not defined
上面程序报错的原因是:Python 2.x 的 input() 函数要求用户输入字符串时必须用引号把字符串括起来。
在 Python 2.x 中应该尽量使用 raw_input() 函数来获取用户输入;Python 2.x 中的 raw_input() 等同于 Python 3.x 中的 input()。
Python长字符串
前面介绍 Python 多行注释时提到使用三个引号(单引号、双引号都行)来包含多行注释内容,其实这是长字符串写法,只是由于在长字符串中可以放置任何内容,包括放置单引号、双引号都可以,如果所定义的长字符串没有赋值给任何变量,那么这个字符串就相当于被解释器忽略了,也就相当于注释掉了。
实际上,使用三个引号括起来的长字符串完全可以赋值给变量,例如如下程序:s = '''"Let's go fishing", said Mary.
"OK, Let's go", said her brother.
they walked to a lake'''
print(s)
上面程序使用三个引号定义了长字符串,该长字符串中既可包含单引号,也可包含双引号。
当程序中有大段文本内容要定义成字符串时,优先推荐使用长字符串形式,因为这种形式非常强大,可以让字符串中包含任何内容,既可包含单引号,也可包含双引号。
此外,Python 还允许使用转义字符(\)对换行符进行转义,转义之后的换行符不会“中断”字符串。例如如下代码:s2 = 'The quick brown fox \
jumps over the lazy dog'
print(s2)
上面 s2 字符串的内容较长,故程序使用了转义字符(\)对内容进行了转义,这样就可以把一个字符串写成两行。
需要说明的是,Python 不是格式自由的语言,因此 Python 程序的换行、缩进都有其规定的语法。所以,Python 的表达式不允许随便换行。如果程序需要对 Python 表达式换行,同样需要使用转义字符(\)进行转义,代码如下:num = 20 + 3 / 4 + \
2 * 3
print(num)
上面程序中有一个表达式,为了对该表达式换行,程序需要使用转义字符。
Python原始字符串
由于字符串中的反斜线都有特殊的作用,因此当字符串中包含反斜线时,就需要对其进行转义。
比如写一条 Windows 的路径 G:\publish\codes\02\2.4,如果在 Python 程序中直接这样写肯定是不行的,需要写成 G:\\publish\\codes\\02\\2.4,这很烦人,此时可借助于原始字符串来解决这个问题。
原始字符串以“r”开头,原始字符串不会把反斜线当成特殊字符。因此,上面的 Windows 路径可直接写成 r'G:\publish\codes\02\2.4'。
关于原始字符串的用法看如下程序:s1 = r'G:\publish\codes\02\2.4'
print(s1)
如果原始字符串中包含引号,程序同样需要对引号进行转义(否则 Python 同样无法对字符串的引号精确配对),但此时用于转义的反斜线会变成字符串的一部分。
例如如下代码:# 原始字符串包含的引号,同样需要转义
s2 = r'"Let\'s go", said Charlie'
print(s2)
上面代码会生成如下输出结果:"Let\'s go", said Charlie
由于原始字符串中的反斜线会对引号进行转义,因此原始字符串的结尾处不能是反斜线,否则字符串结尾处的引号就被转义了,这样就导致字符串不能正确结束。
如果确实要在原始字符串的结尾处包含反斜线怎么办呢?一种方式是不要使用原始字符串,而是改为使用长字符串写法(三引号字符串);另一种方式就是将反斜线单独写。
例如如下代码:
纯文本复制s3 = r'Good Morning' '\\'
print(s3)
有什么学的蒙的可以交流
更多推荐
所有评论(0)