第2章 变量和数据类型

2.1 问题:Python是如何定义变量?

Python最核心理念是:简单好用,少用一个单词就少一份风险!这一理念在Python中处处都有体现。
(1)Java定义变量

(2)Python定义变量

Python无需指明变量类型,也无需用分号结束。
以上是Python理念在定义变量上的一个体现,后续还将介绍Python在逻辑结构方面的独特语法。

2.2 变量

变量是Python最重要的概念之一,变量可以保存任何数,也可修改它的值。

2.2.1 给变量赋值

Python中的变量不需要声明其类型,直接使用=(等号)即可,等号是赋值运算符,例如:

2.2.2变量的命名规则

变量名必须遵循以下几条规则:
(1)变量名只能包含字母、数字和下划线(_),不能使用空格,不能以数字开头。
(2)变量名区分大小写,a和A是两个变量。
(3)不能以Python的关键字(如if、while、for、and等)、内置函数(如abs、int、len等)做变量名,如果用这些做变量名将导致错误。
表2-1 合法和非法的变量名

if=10 #将报错SyntaxError: invalid syntax

2.2.3多重赋值

一般一次给一个变量赋值,Python也可一次给多个变量赋值。

2.3 字符串

字符串是一系列字符,字符包括字母、数字、标点符号及其他可打印或不可打印的字符。

2.3.1 字符串的多种表示

可以使用三种方式来表示字符串,单引号、双引号、三引号(切记,这些引号都是指英文格式的,如果用中文格式将报错!),单引号与双引号作用相似。不过,有些情况用单引号就不合适,有些用双引号不好表示或表示比较麻烦的,用三引号却迎刃而解。
(1)单引号
如'ok!','I like Python','house'
如果字符串中有',如let's go等,如果把这句话用单引号表示,'let's go',将报错。这时就需要使用双引号表示。
(2)双引号
let's go用双引号表示就没问题,"let's go"。当然,一般用单引号表示,也可用双引号表示,如"ok!","house"等。
如果我们希望表示windows下的路径,该如何表示呢?比如表示路径:C:\Users\lenovo\logs,我们首先想到的可能" C:\Users\lenovo\logs",这个表示是否正确?
我们运行以下语句

结果报错一个SyntaxError错误。错误的原因就是这个字符串中含有一个特殊字符“\”
遇到一些特殊字符(如\,'),Python与C、Java一样,可以在这些特殊字符前加反斜杠($$即可,紧跟\后面的这个字符就成了一般字符。把字符串" C:\Users\lenovo\logs"改为:
" C:\\Users\\wumg\\jupyter-ipynb\\logs "后,第2个\就变成一般字符了。

【说明】或改成如下形式也可,效果一样。

(3)三引号
三引号(''' a ''',或"""a""")除了具有一般双引号、单引号功能外,还有一些特殊用法,
如表示多行

此外,还经常用在对一些函数、类的功能注释,及函数或类等帮助信息上。Python的每个对象都有一个属性__doc__,这个属性的内容就用于描述该对象的作用,这些描述都放在三引号内。如:

【练习】
打印let's go 这句话。

2.3.2 字符串的长度

统计一个字符串的长度或元素个数,是经常遇到的问题,如何计算字符串的长度?很简单,只要用Python的内置函数len即可(可以使用命令dir(__builtins__)来查看Python的内置函数清单)。如:

2.3.3 拼接字符串

可以使用加号(+)来拼接或合并字符串,比如:

【注意】如果把"3.7"改为:3.7,情况将如何?

2.3.4 字符串常用方法

对字符串有一些常用方法,如删除空白、转变字符串大小写等,比如:
(1)删除空格
删除字符串中,首尾多余空格,可以使用rstrip()、lstrip()、strip()等函数。

(2)修改大小写
修改字符串中字母的大小写,可以使用lower()、upper()等。

(3)分割单词
可以把字符串按指定字符分割,缺省是按空格分割。

【练习】
统计这句话的单词数:str1="NumPy is the fundamental package for scientific computing with Python. NumPy can also be used as an efficient multi-dimensional container of generic data"

2.3.5 输出到屏幕

Python3使用print()函数把数据打印在屏幕上,打印内容必须放在括号()内。如果是Python2版本的,打印内容无需放在括号内。print可以打印任何数据,且打印还可以按指定格式打印。print有两种格式化输出:一种是str%,另一种是str.format
(1)print函数的格式

其中
 value: 打印的值,可多个
 file: 输出流,默认是 sys.stdout
 sep: 多个值之间的分隔符
 end: 结束符,默认是换行符 \n
 flush: 是否强制刷新到输出流,默认否
(2)打印字符串

Python
Pytorch
(3)不换行打印
默认情况下,print打印完内容后添加一个换行符:\n,即打印后光标移动下一行。要是内容打印在同一行,可以加上参数end=',',说明把结束符改为逗号。例如:

打印结果
Python,Pytorch
(4)格式打印,传统方法print(str%())

运行结果
今年国庆出游人数:7.84 亿,去年国庆出游人数:7
(5)format格式,print(str.format())

带编号

带编号及格式

2.4 数字与运算符

Python3的数字类型包括整型、浮点型、布尔型等,声明变量时无需说明数字类型。由Python内置的基本数据类型管理变量,在程序的后台负责数值与类型的关联,以及类型的转换等操作。
运算符是对数字的操作,包括算术运算符、关系运算符和逻辑运算符等,以下是具体运算符及实例。

2.4.1 算术运算符

表2-2 算术运算符

2.4.2 关系运算符

表2-3 关系运算符,(假设a=2,b=3)

2.4.3 逻辑运算符

表2-4 逻辑算法符

2.4.4 赋值运算符

表2-5 赋值运算符

2.5数据类型转换

转换数据类型是经常遇到的问题,如"python"+3将报错。因3是整数,不是字符串,故不能相加。若要相加,需要先把3转换为字符型。实现类型转换,Python提供了很多内置函数,接下来我们将介绍这些内置函数。

2.5.1 将整数和浮点数转换为字符串

函数str(x)将数x转换为字符串,例如:

2.5.2 把整数转换为浮点数

把整数转换为浮点数,可以使用float(x)函数,例如:

2.5.3 把浮点数转换为整数

把浮点数转换为整数,情况比较复杂,涉及如何对待小数部分。如果只是简单的想去掉小数部分,可以使用int(x)函数即可;如果需要考虑向下取整或向上取整,就需要使用round(x)。另外Python的math模块也提供了很多函数,如math.ceil(x)、math.trunc(x)等,以下通过实例来说明。
(1)直接删除小数部分,可以int(x)函数。

(2)使用round(x),一般采用四舍五入的规则,但如果x小数部分为.5时,将取x最接近的偶数。

2.5.4 把字符串转换为数字

把字符串转换为数字比较简单,使用内置函数int(x)或float(x)即可,例如:

2.5.5 使用input函数

input()函数用于接收用户的输入,它的返回值是字符串,其格式为:

input()函数使用实例
(1)输入一个字符串

【练习】输入两个整数,打印它们的和。

2.6 注释

注释用于说明代码的功能、使用的算法、注意事项等等。代码越复杂,注释就越重要,否则,将给后续代码维护、分享带来极大不便。
注释很简单,只要在需要说明的语句前加上#号即可。Python编译器,遇到带#号的行将忽略。
注释的文字,可以是英文或中文等,注释尽量做到言简意赅。以下为一段代码的注释。

2.7 练习

(1)用input函数输入任意两个数字,打印它们的平方和。
(2)把(1)写成一个脚本,然后,在命令行或Jupyer notebook上执行这个脚本。