编辑整理:整理来源:维基百科,浏览量:69,时间:2022-06-11 17:59:12
python根据关键词生成文章,python 文章自动生成,关键词文章生成器
第二章
Python变量及运用
在这章开始前,我们先回到上一章编写的简单例子hello_world.py程序:
hello_world.py
print("Hello Python world!")
运行上述代码时,你将看到如下输出:
Hello Python world!
运行文件hello_world.py时,末尾的.py指出这是一个Python程序,因此编辑器将使用Python 解释器来运行它。Python解释器读取整个程序,确定其中每个单词的含义。例如,看到单词print 时,解释器就会将括号中的所有内容打印到屏幕。
编写程序时,编辑器会以各种方式突出程序的不同部分。例如,它知道print是一个函数的名称,因此将其显示为蓝色;它知道“Hello Python world!”不是Python代码,因此将其显示为橙色。这种功能称为语法突出,在对刚开始编写程序时很有帮助。
1. 变量
下面来尝试在hello_world.py中使用一个变量。在这个文件开头添加一行代码,并对第2行代码进行修改,如下所示:
message = "Hello Python world!"
print(message)
运行这个程序,我们发现,输出与以前相同:
Hello Python world!
我们添加了一个名为message的变量。每个变量都存储了一个值——与变量相关联的信息。 在这里,存储的值为文本“Hello Python world!”。 添加变量导致Python解释器需要做更多工作。处理第1行代码时,它将文本“Hello Python world!”指向变量message并与之关联起来;第2行代码,它将变量message存储的值打印到屏幕。 下面来进一步扩展这个程序:修改hello_world.py,使其再打印一条消息。为此,在 hello_world.py中添加一个空行,再添加下面两行代码:
message = "Hello Python world!"
print(message)
message = "Hello Python Crash Course world!"
print(message)
现在如果运行这个程序,将看到两行输出:
Hello Python world!
Hello Python Crash Course world!
这说明,我们在程序中可随时修改变量的值,而Python始终指向message,这就好比一个饭馆,每天进出吃饭的人会很多,时刻都在变化,但只要饭馆的地址和名称不发生改变,我们就可以找到它。
1.1 变量命名规则和使用
在Python中使用变量时,需要遵守一些规则和指南。如果违反这些规则将引发错误,而指南旨在让你编写的代码更容易阅读和理解:变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为message_1,但不能将其命名为1_message。变量名不能包含空格,但可使用下划线来分隔其中的单词。例如,变量名greeting_message可行,但变量名greeting message会引发错误。不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词,如print。变量名应既简短又具有描述性。例如,name比n好,your_name比y_n好。慎用小写字母l和大写字母O,因为它们可能被人错看成数字1和0。在自定义变量时,尽量使用小写字母,虽然使用大写字母不会导致错误。
1.2 使用变量时避免命名错误
程序员都会犯错,但作为一名优秀的程序员,你应该知道如何高效地消除错误。下面,我们来看一种有可能会犯的错误,并学习如何消除它。
我们将有意地编写一些引发错误的代码。请输入下面的代码,包括其中以粗体显示但拼写不正确的单词mesage:
message = "Hello Python Crash Course reader!"
print(mesage)
程序存在错误时,Python解释器将竭尽所能地帮助你找出问题所在。程序无法成功地运行时,解释器会提供一个traceback。traceback是一条记录,指出了解释器尝试运行代码时,在什么地方陷入了困境。下面是你不小心错误地拼写了变量名时,Python解释器提供的traceback:
Traceback (most recent call last):
File "hello_world.py", line 2, in <module>
print(mesage)
NameError: name 'mesage' is not defined
解释器指出,文件hello_world.py的第2行存在错误(见),它列出了这行代码,旨在帮助你快速找出错误(见);它还指出了它发现的是什么样的错误(见)。在这里,解释器发现了一个名称错误,并指出打印的变量mesage未定义:Python无法识别你提供的变量名。名称错误通常意味着两种情况:要么是使用变量前忘记了给它赋值,要么是输入变量名时拼写不正确。
在这个示例中,第2行的变量名message中遗漏了字母s。Python解释器不会对代码做拼写检查,但要求变量名的拼写一致。例如,如果在代码的另一个地方也将message错误地拼写成了mesage, 结果将如何呢?
mesage = "Hello Python Crash Course reader!"
print(mesage)
在这种情况下,程序将成功地运行:
Hello Python Crash Course reader!
创建变量名和编写代码时,你无需考虑英语中的拼写和语法规则。很多编程错误都很简单,只是在程序的某一行输错了一个字符,而为找出这个错误有时可能需要花费很长时间。所以,在你开始学习时,请时刻提醒自己不要犯这种错误!
2. 字符串
大多数程序都定义并收集某种数据,然后使用它们来做些有意义的事情。鉴于此,对数据进行分类大有裨益。
我们将介绍的第一种数据类型是字符串。字符串虽然看似简单,但能够以很多不同的方式使用它们。
字符串就是一系列字符。在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号,如下所示:
"This is a string."
'This is also a string.'
这种灵活性让你能够在字符串中包含引号和撇号:
'I told my friend, "Python is my favorite language!"'
"The language 'Python' is named after Monty Python, not the snake."
"One of Python's strengths is its diverse and supportive community."
2. 1 使用方法修改字符串的大小写
对于字符串,可执行的最简单的操作之一是修改其中的单词的大小写。请看下面的代码,并尝试判断其作用:
name.py name = "ada lovelace"
print(name.title())
将这个文件保存为name.py,再运行它。你将看到如下输出:
Ada Lovelace
在这个示例中,小写的字符串"ada lovelace"存储到了变量name中。在print()语句中,方法title()出现在这个变量的后面。
方法是Python可对数据执行的操作。在name.title()中,name后面的句点(.)让Python对变量name执行方法title()指定的操作。每个方法后面都跟着一对括号,这是因为方法通常需要额外的信息来完成其工作。这种信息是在括号内提供的。函数title()不需要额外的信息,因此它后面的括号是空的。title()以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写。这很有用,因为你经常需要将名字视为信息。例如,你可能希望程序将值Ada、ADA和ada视为同一个名字,并将它们都显示为Ada。 还有其他几个很有用的大小写处理方法。例如,要将字符串改为全部大写或全部小写,可以像下面这样做:
name = "Ada Lovelace"
print(name.upper())
print(name.lower())
这些代码的输出如下:
ADA LOVELACE
ada lovelace
存储数据时,方法lower()很有用。很多时候,你无法依靠用户来提供正确的大小写,因此需要将字符串先转换为小写,再存储它们。以后需要显示这些信息时,再将其转换为最合适的大小写方式。
2.2 字符串拼接
在一些特定情况下,我们需要读取不同变量中的字符串做拼接处理,以完成特定功能。比如:有时我们需要将数据库中不同字段存储的用户数据(如用户名和用户住址等信息)拼接成一条完整的数据显示出来:
user_name = "李强"
user_idcard=”-底部咨询-210201”
user_address = "中国东海双店镇省东海双店镇双店镇市青云普区普贤路116号"
user_ fullinfor = user_name + "," + user_idcard + "," + user_address
print(user_ fullinfor)
Python使用加号(+)来合并字符串。在这个示例中,我们使用+来合并user_name、user_ idcard、user_address和逗号,以得到完整的用户信息user_ fullinfor,其结果如下:
李强,-底部咨询-210201,中国东海双店镇省东海双店镇双店镇市青云普区普贤路116号
这种合并字符串的方法称为拼接。通过拼接,可使用存储在变量中的信息来创建完整的数据。 下面我们再将数据进行拼接优化:
user_name = "李强"
user_idcard=”-底部咨询-210201”
user_address = "中国东海双店镇省东海双店镇双店镇市青云普区普贤路116号"
user_ fullinfor = “姓名:”+user_name + "," + "身份证号:" + user_idcard + "," +"住址:"
+user_address
print(user_ fullinfor)
这些代码显示一条信息完整的消息:
姓名:李强,身份证号:-底部咨询-210201,住址:中国东海双店镇省东海双店镇双店镇市青云普区普贤
路116号
通过对信息的拼接,使print输出语句就简单多了。
2.3 使用制表符或换行符来添加空白
空白泛指任何非打印字符,如空格、制表符和换行符。在开发中,我们有时需使用空白来组织输出,以使其更易读。要在字符串中添加制表符,可使用字符组合\t,如下述代码:
>>> print("Python")
Python
拼接字符\t后输出:
>>> print("\tPython")
Python
要在字符串中添加换行符,可使用字符组合\n:
>>> print("Languages:\nPython\nC\nJavaScript")
Languages:
Python
C
JavaScript
还可在同一个字符串中同时包含制表符和换行符。字符串"\n\t"让Python换到下一行,并在下一行开头添加一个制表符。下面的示例演示了如何使用一个单行字符串来生成四行输出:
>>> print("Languages:\n\tPython\n\tC\n\tJavaScript")
Languages:
Python
C
JavaScript
在接下来的两章中,你将使用为数不多的几行代码来生成很多行输出,届时制表符和换行符 将提供极大的帮助。
2.3.4 删除空字符串(空白)
在程序中,额外的空白有时会令人迷惑,对程序来说,它们是两个不同的字符串。例如,在用户登录网站时,可能因为输入用户名后面多输了空白,Python检查其用户名时,判断用户名错误。这样的空格会令人很迷惑。Python能够找出字符串开头和末尾多余的空白。我们可以利用Python的这一功能,删除用户输入的数据中多余的空白。
要确保字符串末尾没有空白,可使用方法 rstrip():
>>> favorite_language = 'python '
>>> favorite_language
'python '
>>> favorite_language.rstrip()
'python'
>>> favorite_language
'python '
存储在变量favorite_language中的字符串末尾包含多余的空白()。在终端会话中向Python询问这个变量的值时,可看到末尾的空格(见),对变量favorite_language调用方法rstrip()(),这个多余的空格被删除了。但rstrip()方法只是改变了输出结果,而没有真正改变favorite_language的存储值,这种删除只是用作输出时。接下来再次询问favorite_language的值时,你会发现这个字符串与输入时一样,依然包含多余的空白(见) 如果要永久删除这个字符串中的空白,我们必须将删除操作的结果重新存回到变量favorite_language中:
>>> favorite_language = 'python '
>>> favorite_language = favorite_language.rstrip() 对favorite_language重新赋值
>>> favorite_language
'python'
在开发中,我们经常需要修改变量的值,再将新值存回到原来的变量中。这就是变量的值可能随程序的运行或用户输入数据而发生变化的原因。
我们还可以分别使用方法 lstrip()和strip()剔除字符串开头或同时剔除两端的空白:
>>> favorite_language = ' python '
>>> favorite_language.rstrip()
' python'
>>> favorite_language.lstrip()
'python '
>>> favorite_language.strip()
'python'
在实际程序中,这些剥除函数最常用于在存储用户输入前对其进行清理。
2.3.5 使用字符串时避免语法错误
在程序开发时,程序中包含非法的Python代码时,就会导致语法错误。例如,在用单引号括起的字符串中,如果包含撇号,就将导致错误。这是因为这会导致Python将第一个单引号和撇号之间的内容视为一个字符串,进而将余下的文本视为Python代码,从而引发错误。 下面演示了如何正确地使用单引号和双引号。
新建程序apostrophe.py,再运行它:
apostrophe.py
message = "One of Python's strengths is its diverse community."
print(message)
撇号位于两个双引号之间,因此Python解释器能够正确地理解这个字符串:
One of Python's strengths is its diverse community.
然而,如果你使用单引号,Python将无法正确地确定字符串的结束位置:
message = 'One of Python's strengths is its diverse community.'
print(message)
而你将看到如下输出:
File "apostrophe.py", line 1
message = 'One of Python's strengths is its diverse community.'
^
SyntaxError: invalid syntax
从上述输出可知,错误发生在第二个单引号后面(见),这种语法错误表明,在解释器看来,其中的有些内容不是有效的Python代码。错误的来源多种多样,这里只是指出一些常见的。学习编写Python代码时,你可能会经常遇到语法错误。语法错误也是最不具体的错误类型,因此,编写程序时,编辑器的语法突出功能可帮助你快速找出某些语法错误。看到Python代码以普通句子的颜色显示,或者普通句子以Python代码的颜色显示时,就可能意味着文件中存在引号不匹配的情况。
2.4 数字
在程序开发中,我们经常使用数字来记录游戏得分、表示可视化数据、存储Web应用信息等等。下面就先来看看Python是如何管理它们的。
2.4.1 整数
在Python中,可对整数执行加(+)减(-)乘(*)除(/)运算。
>>> 2 + 3
5
>>> 3 – 2
1
>>> 2 * 3
6
>>> 3 / 2
1.5
在终端会话中,Python直接返回运算结果。Python使用两个乘号表示乘方运算:
>>> 3 ** 2
9
>>> 3 ** 3
27
>>> 10 ** 6
1000000
Python中支持运算符优先级,因此可在同一个表达式中使用多种运算。
2.4.2 Python 运算符优先级
所谓优先级,就是当多个运算符同时出现在一个表达式中时,先执行哪个运算符。例如对于表达式a + b * c,Python会先计算乘法再计算加法;b * c的结果为 8,a + 8的结果为 24,所以 d 最终的值也是 24。先计算*再计算+,说明*的优先级高于+。
Python 支持几十种运算符,被划分成将近二十个优先级,有的运算符优先级不同,有的运算符优先级相同,请看下表。
表1 Python运算符优先级和结合性一览表
运算符说明
Python运算符
优先级
结合性
优先级顺序
小括号
( )
19
无
高
低
索引运算符
x[i] 或 x[i1: i2 [:i3]]
18
左
属性访问
x.attribute
17
左
乘方
**
16
右
按位取反
~
15
右
符号运算符
+(正号)、-(负号)
14
右
乘除
*、/、//、%
13
左
加减
+、-
12
左
位移
>>、<<
11
左
按位与
&
10
右
按位异或
^
9
左
按位或
|
8
左
比较运算符
==、!=、>、>=、<、<=
7
左
is 运算符
is、is not
6
左
in 运算符
in、not in
5
左
逻辑非
not
4
右
逻辑与
and
3
左
逻辑或
or
2
左
逗号运算符
exp1, exp2
1
左
结果表1中的运算符优先级,我们来尝试分析下面表达式的结果:
4+4<<2
+的优先级是 12,<<的优先级是 11,+的优先级高于<<,所以先执行 4+4,得到结果 8,再执行 8<<2,得到结果 32,这也是整个表达式的最终结果。
像这种不好确定优先级的表达式,我们可以给子表达式加上( ),也就是写成下面的样子:
(4+4) << 2
这样看起来就一目了然了,不容易引起误解。
当然,我们也可以使用( )改变程序的执行顺序,比如:
4+(4<<2)
则先执行 4<<2,得到结果 16,再执行 4+16,得到结果20。
虽然 Python 运算符存在优先级的关系,但不推荐过度依赖运算符的优先级,这会导致程序的可读性降低。因此,建议不要把一个表达式写得过于复杂,如果一个表达式过于复杂,可以尝试把它拆分来书写。不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,应尽量使用( )来控制表达式的执行顺序。
2.4.3 Python 运算符结合性
所谓结合性,就是当一个表达式中出现多个优先级相同的运算符时,先执行哪个运算符:先执行左边的叫左结合性,先执行右边的叫右结合性。
例如对于表达式对于100 / 25 * 16,/和*的优先级相同,应该先执行哪一个呢?这个时候就不能只依赖运算符优先级决定了,还要参考运算符的结合性。/和*都具有左结合性,因此先执行左边的除法,再执行右边的乘法,最终结果是 64。
Python中大部分运算符都具有左结合性,也就是从左到右执行;只有 ** 乘方运算符、单目运算符(例如not逻辑非运算符)、赋值运算符和三目运算符例外,它们具有右结合性,也就是从右向左执行。表 1 中列出了所有 Python 运算符的结合性。
当一个表达式中出现多个运算符时,Python 会先比较各个运算符的优先级,按照优先级从高到低的顺序依次执行;当遇到优先级相同的运算符时,再根据结合性决定先执行哪个运算符:如果是左结合性就先执行左边的运算符,如果是右结合性就先执行右边的运算符。
2.5 注释
在大多数编程语言中,注释都是一项很有用的功能,它主要目的是阐述代码要做什么,以及是如何做的。在开发项目期间,你对各个部分如何协同工作了如指掌,但过段时间后,有些细节你可能不记得了。当然,你总是可以通过研究代码来确定各个部分的工作原理,但通过编写注释,以清晰的自然语言对解决方案进行概述,可节省很多时间。一名专业程序员在与其他程序员合作时,是必须编写有意义的注释的,因为大多数软件都是合作编写的,编写者可能是同一家公司的多名员工,也可能是众多致力于同一个开源项目的人员。训练有素的程序员都希望代码中包含注释,因此你最好从现在开始就在程序中添加描述性注释。作为新手,最值得养成的习惯之一是,在代码中编写清晰、简洁的注释。如果不确定是否要编写注释,就问问自己,找到合理的解决方案前,是否考虑了多个解决方案。如果答案是肯定的,就编写注释对你的解决方案进行说明。相比回过头去再添加注释,删除多余的注释要容易得多。
2.5.1 如何编写注释
在Python中,注释用井号(#)标识。井号后面的内容都会被Python解释器忽略,如下所示:
comment.py #向大家问好
print("Hello Python people!")
Python解释器将忽略第1行,只执行第2行。
Hello Python people!
热搜弹幕:python根据关键词生成文章,python 文章自动生成,关键词文章生成器