在本节课中,你将学习Python程序中的各种数据,还将学习如何将数据存储到变量中,以及如何在程序中使用这些变量。
2.1 运行 hell_world.py 时发生的情况
运行 hello_world.py 时,Python都会做些什么呢?即便是运行简单的程序,Python所做的工作也相当多:
hell_world.py
print("Hello Python World!")
运行上述代码,你将看到如下输出:
Hello Python World!
运行文件 hello_world.py 时,末尾的.py指出这是一个Python程序,因此编辑器将使用Python解释器来运行它。Python解释器读取整个程序,确定其中每个单词的含义。例如,看到单词 print 时,解释器就会将括号中的内容打印到屏幕,而不管括号内的内容是什么。
编写程序时,编辑器会以各种方式突出程序的不同部分。例如,函数名称print显示为蓝色,它知道 "Hello Python World!" 不是Python代码,因此将其显示为橙色。这种功能成为语法突出,在刚开始编写程序时很有帮助。
2.2 变量
下面尝试在 hello_world.py 中使用一个变量。在这个文件开头添加一行代码,并对第2行代码进行修改,如下所示:
message = "Hello Python World!"
print(message)
运行以上代码,结果与之前的相同:
Hello Python World!
这里添加了一个名为 message 的变量,每个变量都存储了一个值——与变量相关的信息。在这里,存储的值为文本 "Hello Python World!" 。
进一步拓展上面的程序,修改hello_world.py,使其再打印一条消息。为此,在文件中添加一个空行,再增加下面的2行代码:
message = "Hello Python World!"
print(message)
message = "Hello Python Crash Course World!"
print(message)
运行这个程序,结果如下:
Hello Python World!
Hello Python Crash Course World!
在程序中可随时修改变量的值,而Python将始终记录变量的最新值。
2.2.1 变量的命名和使用
在Python中使用变量时,需要遵守一些规则和指南。违反这些规则将引发错误,而指南旨在让你编写的代码更容易阅读和理解。请牢记一下有关变量的规则。
变量名只能包含字母、数字、下划线。变量名可以字母或下划线开头,但不能以数字开头。
变量名不能包含空格,但可以使用下划线来分隔其中的单词。例如,变量名greeting_message可行,但greeting message会引发错误。
不要将Python关键词和函数名作为变量名,即不要使用Python保留用于特殊用途的单词,如print。
变量名应简短又具有描述性,让人一看就知道是什么意思。例如,name比n好,student_name比 s_n 好。
慎用小写字母 l 和大写字母 O ,因为它们可能被人错看成数字 1 和 0。
就目前而言,应使用小写的Python变量名,后面学习的类的概念时,类的名称是使用大写的。在变量名中使用大写字母虽然不会导致错误,但使用小写有利于程序阅读。要创建良好的变量名,需要经过一定的时间,随着写的程序越来越多,并开始阅读别人写的代码,将越来越有利于你创建有意义的变量名。
2.2.2 使用变量时避免命名错误
程序员都会犯错,而且大多数程序员每天都会犯错。虽然优秀的程序员也会犯错,但他们也知道如何高效的消除错误。下面来看一种可能会犯的错误,并学习如何消除它。
有意编写一些引发错误的代码,请输入下马的代码,包括其中以粗体显示但拼写不正确的单词mesage:
message = "Hello Python Crash Course World!"
print(mesage)
程序存在错误时,Python解释器将竭尽所能的帮助你找出问题所在。程序无法成功运行时,解释器会提供一个 traceback 。traceback 是一条记录,指出了解释器尝试运营代码时,在什么地方陷入了困境。下面是不小心错误的拼写了变量名时,Python解释器提供的traceback:
Traceback(most recent call last):
File "hello_world.py",line 2,in
print(mesage)
NameError:name 'mesage' is not defined
解释器指出,文件 hello_world.py 的第2行存在错误;它列出了这行代码,旨在帮助你快速找出错误(第3行);它还指出了它未发现的是什么样的错误(第4含)。在这里,解释器发现了一个名称错误,并指出打印的变量mesage未定义:Python无法识别你提供的变量名。名称错误通常意味着两种情况:要么是使用变量前忘记了给它赋值,要么是输入变量名时拼写不正确。
在这个例子中,程序第2行的变量名message中遗漏了字母s,Python解释器不会对代码做拼写检查,但要求变量名的拼写一致。例如,如果在代码的另一个地方也将message错误的拼写成了mesage,结果将如何呢?
mesage = "Hello Python Crash Course World!"
print(mesage)
在这种情况下,程序将成功的运行:
Hello Python Crash Course World!
计算机一丝不苟,但不关心拼写是否真确。因此,创建变量名和编写代码时,你无需考虑英语中的拼写和语法规则。
很多编程错误都很简单,只是在程序的某一行输错一个字符。为找出这种错误而花费很长时间的大有人在。很多程序员天资聪颖、经验丰富,却为找出这种细微的错误花费数小时。你可能觉得好笑,但别忘了,在你的编程生涯中,经常会有同样的遭遇。
2.3 字符串
大多数程序都定义并收集某种数据,然后使用它们来做些有意义的事情。鉴于此,对数据进行分类大有裨益。我们将介绍的第一种数据类型是字符串。字符串虽然看似简单,但能够以很多不同的方式使用它们。
字符串就是一系列字符。在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.3.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.3.2 合并 (拼接) 字符串
你可能想将姓和名存储在不同的变量中,等要显示姓名时再将它们合二为一:
first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
print(full_name)
Python使用 + 号来合并字符串。在这个例子中,我们使用 + 号来合并first_name 和last_name ,以得到完整的姓名,其结果如下:
ada lovelace
这种合并字符串的方法称为拼接。通过拼接,可使用存储在变量中的信息来创建完整的消息。再看一个例子:
first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
print("Hello, " + full_name.title() + "!")
在这里,一个问候用户的句子使用了全名,并使用了方法title() 来将姓名设置为合适的格式。这些代码显示一条格式良好的简单问候语:
Hello, Ada Lovelace!
可以使用拼接来创建消息,再把整条消息都存储在一个变量中:
first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
message = "Hello, " + full_name.title() + "!"
print(message)
显示结果与之前相同,但将这条消息存储在了一个变量中,这让最后的print语句简单的多。
2.3.3 使用制表符或换行符来添加空白
在编程中,空白泛指任何非打印字符,如空格、制表符、换行符。可以使用空白来组织输出,以使其更易读。
要在字符串中添加制表符,可使用字符组合\t,如在终端中输入如下代码:
>>> print("Python")
python
>>> 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能够发现'python '中额外的空白,并认为它是有意义的——除非你告诉它不是这样的。
空白很重要,因为你经常需要比较两个字符串是否相同。例如,一个重要的示例是,在用户登录网站时检查其用户名。但在一些简单得多的情形下,额外的空格也可能令人迷惑。所幸在Python中,删除用户输入的数据中的多余的空白易如反掌。
Python能够找出字符串开头和末尾多余的空白。要使字符串末尾没有空白,可使用方法rstrip():
>>> favorite_language = 'python '
>>> favorite_language
'python '
>>> favorite_language.rstrip()
'python'
>>> favorite_language
'python '
存储在变量favorite_language 中的字符串末尾含有多余的空格,见第1行。在终端会话中向Python询问这个变量的值时,可看到末尾的空格,见第2、3行。对变量favorite_language调用方法rstrip() 后,这个多余的空格被删除了,见第4、5行。然后,这种删除只是暂时的,接下来再次询问favorite_language 的值时,你会发现这个字符串与输入时一样,依然包含多余的空白,见第6、7行。
要永久删除这个字符串的空白,必须将删除操作的结果存回到变量中:
>>> favorite_language = 'python '
>>>favorite_language =favorite_language.rstrip()
>>>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代码,从而引发错误。
下面演示如何正确使用单引号和双引号。
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还支持运算次序,可在同一个表达式中使用多种运算。可以使用括号来改变运算次序,让Python按指定的次序执行运算,如下所示:
>>> 2 + 3 * 4
14
>>> (2 + 3) * 4
20
空格不影响Python计算表达式的方式,它们的存在旨在让增强代码的可阅读性,能够迅速确定先执行哪些运算。
2.4.2 浮点数
Python将带小数点的数字都称为浮点数。大多数编程语言都使用这个术语,它指出了这样的一个事实:小数点可出现在数字的任何位置。每种编程语言都需要细心设计,以妥善处理浮点数,确保不管小数点出现在什么位置,数字的行为都是正常的。
从很大程度上说,使用浮点数时无需考虑其行为。只需输入要使用的数字,Python通常都会按你期望的方式处理它们:
>>> 0.1 + 0.1
0.2
>>> 0.2 + 0.2
0.4
>>> 2 * 0.1
0.2
>>> 2 * 0.2
0.4
需要注意的是,结果包含的小数位数可能是不确定的:
>>> 0.2 + 0.1
0.30000000000000004
>>> 3 * 0.1
0.30000000000000004
所有语言都存在这个问题,不用担心。Python会尽力找到一种方式,以尽可能精确的表示结果,但鉴于计算机内部表示数字的方式,这在有些情况下很难。就现在而言,暂时忽略多余的小数位数即可;在之后的实战项目中,将讲到在需要时处理多余小数位的方式。
2.4.3 使用函数 str() 避免类型错误
经常需要再消息中使用变量的值。例如,假设要祝人生日快乐,可能会编写类似于下面的代码:
birthday.py
age = 23
message = "Happy" + age + "rd Birthday!"
print(message)
你可能会认为上述代码打印这样的结果:Happy 23rd Birthday!。但实际运行代码时却引发了错误:
Traceback(most recent call list):
File "birthday.py",line 2,in
message = "Happy" + age + "rd Birthday!"
TypeError:Can't convert 'int' object to str implicitly
这是一个类型错误,意味着Python无法识别你使用的信息。在这个示例中,Python发现使用了一个值为整数(int)的变量,但不知道该如何解读这个值。Python知道这个变量表示的可能是数值23,也可能是字符2和3。像上面这样在字符串中使用整数时,需要显示的指出你希望Python将这个整数用作字符串。为此,可调用str(),这个函数让Python将非字符串值表示为字符串:
age = 23
message = "Happy" + str(age) + "rd Birthday!"
print(message)
这样,Python就知道要将数字23转换为字符串,进而在生日祝福消息中显示字符2和3。经过处理后,将不会引发上述错误:
Happy 23rd Birthday!
大多数情况下,在Python中使用数字都非常简单。如果结果出乎意料,请检查Python是否按你期望的方式将数字解读为数值或字符串。
2.5 注释
在大多数编程语言中,注释都是意向很有用的功能。
2.5.1 如何编写注释
在Python中,注释用井号(#)标识。井号后面的内容都会被Python解释器忽略,如下所示:
comment.py
# 向大家问好
print("Hello Python People!")
Python解释器将忽略第1行,只执行第2行:
Hello Python People!
2.5.2 该编写什么样的注释
编写注释的主要目的是阐述代码要做什么,以及是如何做的。在开发项目期间,对各个部分如何协同工作了如指掌,但过段时间后,有些细节可能就不记得了。当然,你总是可以通过研究代码来确定各个部分的工作原理,但通过编写注释,以清晰的自然语言对解决方案进行概述,可节省很多时间。
要变成专业程序员或与其他程序员合作,就必须编写有意义的注释。当前,大多数软件都是合作编写的,编写者可能是同一家公司的多名员工,也可能是众多致力于同一个开源项目的人员。训练有素的程序员都希望代码中包含注释,因此你最好从现在开始就在程序中添加描述性注释。作为新手,最值得养成的习惯之一是,在代码中编写清晰、简洁的注释。
如果不确定是否要编写注释,就问问自己,找到合理的解决方案前,是否考虑了多个解决方案。如果答案是肯定的,就编写注释对你的解决方案进行说明吧。
2.7 小结
在这节课中,讲到了如何使用变量,如何创建描述性变量名以及如何消除名称错误和语法错误;还讲到了字符串是什么,以及如何使用小写、大写、首字母大写的方式显示字符串;使用空白来显示整洁的输出,以及如何剔除字符串中多余的空白;如何使用整数和浮点数;使用数值数据时需要注意的意外行为。还讲到了如何编写说明性注释,让代码对你和其他人来说更容易理解。
下一节课,将学习如何在被称为列表的变量中存储信息集,以及如何通过遍历列表来操作其中的信息。
欢迎关注公众号:Python公开课 ,一起创造有趣的事儿😊
网友评论