《Python:编程:从入门到实践》学习笔记_第2章 变量和简单数据类型

第2章 变量和简单数据类型


2.1 运行 hello_world.py 时发生的情况

运行文件hello_world.py时,末尾的.py指出这是一个Python程序,因此编辑器将使用Python解释器来运行它。Python解释器读取整个程序,确定其中每个单词的含义。例如,看到单词print时,解释器就会将括号中的内容打印到屏幕,而不会管括号中的内容是什么。

编写程序时,编辑器会以各种方式突出程序的不同部分。例如,它知道print是一个函数的名称,因此将其显示为蓝色;它知道“Hello Python world!”不是Python代码,因此将其显示为橙色。这种功能称为语法突出


2.2 变量

下面来尝试在hello_world.py中使用一个变量。

message = "Hello Python world!" 
print(message)

运行这个程序,看看结果如何。你会发现,输出与以前相同:

Hello Python world! 

我们添加了一个名为message的变量。每个变量都存储了一个值——与变量相关联的信息。在这里,存储的值为文本“Hello Python world!”。

下面来进一步扩展这个程序:修改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! 

2.2.1 变量的命名和使用

请务必牢记下述有关变量的规则:
 变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为message_1,但不能将其命名为1_message。

 变量名不能包含空格,但可使用下划线来分隔其中的单词。例如,变量名greeting_message可行,但变量名greeting message会引发错误。

 不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词,如print。

 变量名应既简短又具有描述性。例如,name比n好,student_name比s_n好,name_length比length_of_persons_name好。

 慎用小写字母l和大写字母O,因为它们可能被人错看成数字1和0。

注:就目前而言,应使用小写的Python变量名。在变量名中使用大写字母虽然不会导致错误,但避免使用大写字母是个不错的主意。

2.2.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.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 = "ada lovelace" 
print(name.title()) 

将这个文件保存,再运行它。你将看到如下输出:

Ada Lovelace

小写的字符串"ada lovelace"存储到了变量name中。在print()语句中,方法title()出现在这个变量的后面。方法是Python可对数据执行的操作。在name.title()中,name后面的句点(.) 让Python对变量name执行方法title()指定的操作。每个方法后面都跟着一对括号,这是因为方法通常需要额外的信息来完成其工作。这种信息是在括号内提供的。函数title()不需要额外的信息,因此它后面的括号是空的。

title()以首字母大写的方式显示每个单词,即将字符串中每个用空格间隔的单词以只有首字母大写的形式显示。

还有其他几个很有用的大小写处理方法:

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 
message = "Hello, " + full_name.title() + "!" 
print(message) 

这些代码显示一条格式良好的简单问候语:

Hello, Ada Lovelace! 

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能够找出字符串开头和末尾多余的空白。要确保字符串末尾没有空白,可使用方法rstrip()

>>> favorite_language = 'python '
>>> favorite_language 
'python ' 
>>> favorite_language.rstrip()
'python' 
>>> favorite_language
'python ' 

对变量favorite_language调用方法rstrip()后,这个多余的空格被删除了。然而,这种删除只是暂时的,接下来再次询问favorite_language的值时,你会发现这个字符串与输入时一样,依然包含多余的空白。

要永久删除这个字符串中的空白,必须将删除操作的结果存回到变量中:

>>> 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

2.3.6 Python 2 中的 print 语句

在Python 2中,print语句的语法稍有不同:

>>> python2.7 
>>> print "Hello Python 2.7 world!" 
Hello Python 2.7 world! 

在Python 2中,无需将要打印的内容放在括号内。从技术上说,Python 3中的print是一个函数,因此括号必不可少。有些Python 2 print语句也包含括号,但其行为与Python 3中稍有不同。简单地说,在Python 2代码中,有些print语句包含括号,有些不包含。


2.4 数字

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将带小数点的数字都称为浮点数。

>>> 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 

2.4.3 使用函数 str()避免类型错误

age = 23 
message = "Happy " + age + "rd Birthday!" 
print(message) 

如果你运行这些代码,将发现它们会引发错误:

Traceback (most recent call last): 
File "birthday.py", line 2, in <module> 
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)

经过上述处理后,将显示你期望的消息,而不会引发错误:

Happy 23rd Birthday! 

2.4.4 Python 2 中的整数

在Python 2中,将两个整数相除得到的结果稍有不同:

>>> python2.7
>>> 3 / 2
1 

Python返回的结果为1,而不是1.5。在Python 2中,整数除法的结果只包含整数部分,小数部分被删除。请注意,计算整数结果时,采取的方式不是四舍五入,而是将小数部分直接删除。

在Python 2中,若要避免这种情况,务必确保至少有一个操作数为浮点数,这样结果也将为浮点数:

>>> 3 / 2
1 
>>> 3.0 / 2
1.5
>>> 3 / 2.0
1.5 
>>> 3.0 / 2.0
1.5

2.5 注释

注释让你能够使用自然语言在程序中添加说明。

2.5.1 如何编写注释

在Python中,注释用井号(#)标识。井号后面的内容都会被Python解释器忽略,如下所示:

# 向大家问好
print("Hello Python people!") 

Python解释器将忽略第1行,只执行第2行。

Hello Python people!

2.5.2 该编写什么样的注释

编写注释的主要目的是阐述代码要做什么,以及是如何做的。


2.6 Python 之禅

Python社区的理念都包含在Tim Peters撰写的
“Python之禅”中。要获悉这些有关编写优秀Python代码的指导原则,只需在解释器中执行命令
import this。这里不打算赘述整个“Python之禅”,而只与大家分享其中的几条原则,让你明白
为何它们对Python新手来说至关重要。

>>> import this
The Zen of Python, by Tim Peters 

Beautiful is better than ugly. 

Python程序员笃信代码可以编写得漂亮而优雅。编程是要解决问题的,设计良好、高效而漂亮的解决方案都会让程序员心生敬意。随着你对Python的认识越来越深入,并使用它来编写越来越多的代码,有一天也许会有人站在你后面惊呼:“哇,代码编写得真是漂亮!”

Simple is better than complex. 

如果有两个解决方案,一个简单,一个复杂,但都行之有效,就选择简单的解决方案吧。这样,你编写的代码将更容易维护,你或他人以后改进这些代码时也会更容易。

Complex is better than complicated. 

现实是复杂的,有时候可能没有简单的解决方案。在这种情况下,就选择最简单可行的解决方案吧。

Readability counts. 

即便是复杂的代码,也要让它易于理解。开发的项目涉及复杂代码时,一定要为这些代码编写有益的注释。

There should be one-- and preferably only one --obvious way to do it. 

如果让两名Python程序员去解决同一个问题,他们提供的解决方案应大致相同。这并不是说编程没有创意空间,而是恰恰相反!然而,大部分编程工作都是使用常见解决方案来解决简单的小问题,但这些小问题都包含在更庞大、更有创意空间的项目中。在你的程序中,各种具体细节对其他Python程序员来说都应易于理解。

Now is better than never. 

你可以将余生都用来学习Python和编程的纷繁难懂之处,但这样你什么项目都完不成。不要企图编写完美无缺的代码;先编写行之有效的代码,再决定是对其做进一步改进,还是转而去编写新代码。


2.7 小结

在本章中,你学习了:如何使用变量;如何创建描述性变量名以及如何消除名称错误和语法错误;字符串是什么,以及如何使用小写、大写和首字母大写方式显示字符串;使用空白来显示整洁的输出,以及如何剔除字符串中多余的空白;如何使用整数和浮点数;使用数值数据时需要注意的意外行为。你还学习了如何编写说明性注释,让代码对你和其他人来说更容易理解。最后,你了解了让代码尽可能简单的理念。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值