文章目录
第2章 变量和数据类型
2.1 问题:Python是如何定义变量?
Python最核心理念是:简单好用,少用一个单词就少一份风险!这一理念在Python中处处都有体现。
(1)Java定义变量
1 2 3 |
int age=10; float salary=3.13; String name="Python"; |
(2)Python定义变量
1 2 3 |
age=10 salary=3.13 name="Python" |
Python无需指明变量类型,也无需用分号结束。
以上是Python理念在定义变量上的一个体现,后续还将介绍Python在逻辑结构方面的独特语法。
2.2 变量
变量是Python最重要的概念之一,变量可以保存任何数,也可修改它的值。
2.2.1 给变量赋值
Python中的变量不需要声明其类型,直接使用=(等号)即可,等号是赋值运算符,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#给变量a赋值 a=10 #打印变量a的值 print(a) #结果为10 #给变量b赋值 b="python" #修改变量a的值 a=10.2 #对变量a乘以一个数 a*100 #打印变量a,b的值 print(a) #结果为10.2 print(b) #结果为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也可一次给多个变量赋值。
1 2 3 4 5 6 |
x,y,z=10,"python_numpy",100.0 #打印这3个变量 print(x,y,z) #打印结果 10 python_numpy 100.0 #一次显示多个值,其结果是以元组的形式显示 x,y,z #结果为(10, 'python_numpy', 100.0) |
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",这个表示是否正确?
我们运行以下语句
1 |
path="C:\Users\wumg\jupyter-ipynb\logs" |
结果报错一个SyntaxError错误。错误的原因就是这个字符串中含有一个特殊字符“\”
遇到一些特殊字符(如\,'),Python与C、Java一样,可以在这些特殊字符前加反斜杠($$即可,紧跟\后面的这个字符就成了一般字符。把字符串" C:\Users\lenovo\logs"改为:
" C:\\Users\\wumg\\jupyter-ipynb\\logs "后,第2个\就变成一般字符了。
1 2 |
path="C:\\Users\\wumg\\jupyter-ipynb\\logs" print(path) #打印结果为C:\Users\lenovo\logs |
【说明】或改成如下形式也可,效果一样。
1 2 |
path=r"C:\Users\wumg\jupyter-ipynb\logs" print(path) |
(3)三引号
三引号(''' a ''',或"""a""")除了具有一般双引号、单引号功能外,还有一些特殊用法,
如表示多行
1 2 |
lines='''I like Python, I also like Pytorch! ''' |
此外,还经常用在对一些函数、类的功能注释,及函数或类等帮助信息上。Python的每个对象都有一个属性__doc__,这个属性的内容就用于描述该对象的作用,这些描述都放在三引号内。如:
1 2 3 4 5 6 7 8 |
#定义一个函数 def fun01(): '''这是一个测试三引号的函数''' a="Python是人工智能的首先语言!" print(a) #查看对象fun01的__doc__属性,或功能说明 print(fun01.__doc__) #打印结果为:这是一个测试三引号的函数 |
【练习】
打印let's go 这句话。
2.3.2 字符串的长度
统计一个字符串的长度或元素个数,是经常遇到的问题,如何计算字符串的长度?很简单,只要用Python的内置函数len即可(可以使用命令dir(__builtins__)来查看Python的内置函数清单)。如:
1 2 3 4 5 |
a="I line Python" print(len(a)) #结果为13 ,其中有两个空格 b="Python是人工智能的首先语言!" print(len(b)) #结果为17,表示元素个数,一个汉字或一个字符都是元素之一 print(len("")) #结果为0,表示空字符 |
2.3.3 拼接字符串
可以使用加号(+)来拼接或合并字符串,比如:
1 2 3 4 5 6 |
#拼接两个字符串,中间用空格隔开 "hellow"+" "+"world!" #结果为 'hellow world!' #对同一字符拼接多次 3*"ok" #结果为:'okokok' #拼接后的字符串作为另一个字符串 len('Python'+"3.7") #结果为9 |
【注意】如果把"3.7"改为:3.7,情况将如何?
2.3.4 字符串常用方法
对字符串有一些常用方法,如删除空白、转变字符串大小写等,比如:
(1)删除空格
删除字符串中,首尾多余空格,可以使用rstrip()、lstrip()、strip()等函数。
1 2 3 4 5 6 7 |
str1=" I like Python " #删除末尾空格 str1.rstrip() #结果为:' I like Python' #删除开头空格 str1.lstrip() #结果为:'I like Python ' #删除首尾空格 str1.strip() #结果为:'I like Python' |
(2)修改大小写
修改字符串中字母的大小写,可以使用lower()、upper()等。
1 2 3 4 5 6 7 8 |
#把删除首尾空格后的字符串赋给另一个变量 str2=str1.strip() #把字符串改为小写 print(str2.lower()) #结果:'i like python' #把字符串改为大写 print(str2.upper()) #结果:'I LIKE PYTHON' #每个单词的首字母,变为大写 print(str2.title()) #结果:'I Like Python' |
(3)分割单词
可以把字符串按指定字符分割,缺省是按空格分割。
1 2 3 4 5 |
#以空格分割字符串 str2.split() #运行结果:['I', 'like', 'Python'] #以竖线分割字符串 str3="python|java|keras|pytorch|tensorflow" str3.split('|') #运行结果:['python', 'java', 'keras', 'pytorch', 'tensorflow'] |
【练习】
统计这句话的单词数: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函数的格式
1 |
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) |
其中
value: 打印的值,可多个
file: 输出流,默认是 sys.stdout
sep: 多个值之间的分隔符
end: 结束符,默认是换行符 \n
flush: 是否强制刷新到输出流,默认否
(2)打印字符串
1 2 3 |
#打印字符串 print("Python") print("Pytorch") |
Python
Pytorch
(3)不换行打印
默认情况下,print打印完内容后添加一个换行符:\n,即打印后光标移动下一行。要是内容打印在同一行,可以加上参数end=',',说明把结束符改为逗号。例如:
1 2 3 |
#在同一行打印字符串 print("Python",end=',') print("Pytorch") |
打印结果
Python,Pytorch
(4)格式打印,传统方法print(str%())
1 2 3 |
a=7.8420 b=6.7890 print("今年国庆出游人数:%.2f 亿,去年国庆出游人数:%.0f"%(a,b)) |
运行结果
今年国庆出游人数:7.84 亿,去年国庆出游人数:7
(5)format格式,print(str.format())
1 |
print("今年国庆出游人数:{:.2f},去年国庆出游人数:{:.0f}".format(a,b)) |
带编号
1 |
print("去年国庆出游人数:{1},今年国庆出游人数:{0}".format(a,b)) |
带编号及格式
1 |
print("去年国庆出游人数:{1:.2f},今年国庆出游人数:{0:.0f}".format(a,b)) |
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转换为字符串,例如:
1 2 |
"Python "+str(3) #结果:'Python 3' "TensorFlow "+str(2.1) #结果:'TensorFlow 2.1' |
2.5.2 把整数转换为浮点数
把整数转换为浮点数,可以使用float(x)函数,例如:
1 2 3 4 |
#显式转换 float(10) #结果: 10.0 #隐式转换,Python自动先将10转换为10.0,然后再与0.1相加 10+0.1 #结果:10.1 |
2.5.3 把浮点数转换为整数
把浮点数转换为整数,情况比较复杂,涉及如何对待小数部分。如果只是简单的想去掉小数部分,可以使用int(x)函数即可;如果需要考虑向下取整或向上取整,就需要使用round(x)。另外Python的math模块也提供了很多函数,如math.ceil(x)、math.trunc(x)等,以下通过实例来说明。
(1)直接删除小数部分,可以int(x)函数。
1 2 |
int(4.52) #结果:4 int(-10.89) #结果:-10 |
(2)使用round(x),一般采用四舍五入的规则,但如果x小数部分为.5时,将取x最接近的偶数。
1 2 3 4 5 6 |
#使用四舍五入规则 round(7.7) #结果:8 round(7.4) #结果:7 #round(x)中x为.5时,取x最接近的偶数 round(6.5) #结果:6 round(-9.5) #结果:-10 |
2.5.4 把字符串转换为数字
把字符串转换为数字比较简单,使用内置函数int(x)或float(x)即可,例如:
1 2 3 |
int('3') #结果:3 float("10.35") #结果:10.35 float("-9.8") #结果:-9.8 |
2.5.5 使用input函数
input()函数用于接收用户的输入,它的返回值是字符串,其格式为:
1 |
input('提示符') |
input()函数使用实例
(1)输入一个字符串
1 2 3 4 5 6 7 |
#输入一个字符串,显示该字符串的长度 a=input("输入一个字符串:") #打印该字符串的长度 print(len(a)) #运行结果如下############# 输入一个字符串:python 6 |
【练习】输入两个整数,打印它们的和。
2.6 注释
注释用于说明代码的功能、使用的算法、注意事项等等。代码越复杂,注释就越重要,否则,将给后续代码维护、分享带来极大不便。
注释很简单,只要在需要说明的语句前加上#号即可。Python编译器,遇到带#号的行将忽略。
注释的文字,可以是英文或中文等,注释尽量做到言简意赅。以下为一段代码的注释。
1 2 3 4 5 6 7 8 9 10 11 |
################################ #创建时间:2019年8月15日 #修改时间:2019年9月10日 #修改人:张云飞 #代码主要功能:****** ################################# ‘’’ #初始化参数 lr=0.001 #学习率参数 batch_size=64 #批量大小 n=100 #迭代次数 |
2.7 练习
(1)用input函数输入任意两个数字,打印它们的平方和。
(2)把(1)写成一个脚本,然后,在命令行或Jupyer notebook上执行这个脚本。