第二章 变量与数据类型
文章目录
2.3认识变量
2.3.1变量的定义
-
变量的功能:通过一个有意义的标识(变量),将变量与某个具体内容(数值、数组、对象等)进行关联,方便访问。
-
门牌号与房子、人与人名。
-
通过变量,不需要记住存放内容的内存物理地址。
-
在python中,变量存的是记录具体数据的地址。
代码如下
message = "hello python world!"#将字符串字面量赋值给message变量 print(message,type(message))
结果:-----将变量与字面量进行关联,便于访问和使用。-------
hello python world! <class 'str'>
Jupyter在命令模式下开启cell的行号。快捷键L
添加了一个名为message的变量。每个变量都存储了一个值——与变量相关联的信息。在这里,存储的值为字符串“hello python world!”。
- 第一行代码,用于代码注释输出。
- 第二行代码,它将字符串字面量“hello python world!” 与变量message关联起来
- 第三行代码,它将与变量message关联的的值打印到屏幕。
print('------在创建或赋值变量时,不需要为变量指定类型-------')
message = 2019
print(message,type(message))
------在创建或赋值变量时,不需要为变量指定类型-------
2019 <class 'int'>
print('----不能使用未创建的变量----')
message = 3.14
print(message1,type(message))
----不能使用未创建的变量----
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-3-68235e2a257e> in <module>
1 print('----不能使用未创建的变量----')
2 message = 3.14
----> 3 print(message1,type(message))
NameError: name 'message1' is not defined
修改程序,使其再打印一条信息:
代码如下
message = "hello python world!"
print(message)
message = "hello python crash course world"
print(message)
message = "hello my sweet"
print(message)
运行结果:
hello python world!
hello python crash course world
hello my sweet
在程序中可随时修改变量的值,而python将始终记录变量的最新值
通过input
函数接受用户的输入,注意该函数的返回为str类型
代码如下
# input 函数的返回是str
message = input("请输入float类型的数据:")
message = float(message)#str -->float
message = message * 10
print(message,type(message))
运行结果:
请输入float类型的数据:3.0
30.0 <class 'float'>
习题
-
题目要求:创建变量,将一条消息存储到变量中,再将其打印出来
代码如下
message1 = "significant_things" print(message1)
运算结果:
significant_things
-
题目要求:将一条消息存储到变量中,将其打印出来;再将变量的值修改为一条新消息,并将其打印出来
代码如下
message2 = "important_things" print(message2)
运算结果:
important_things
代码如下
message2 = "essential_things" print(message2)
运算结果:
essential_things
-
题目要求:使用
input()
函数,接收外部输入(输入字符),并把结果存到变量中,组织消息内容结果代码如下
message3 = input("输入:") print(message3)
运算结果:
输入:momentous_things momentous_things
-
题目要求:使用
input()
函数,接收外部输入(输入数字),并把结果存到变量中,对这数进行平方运算,打印结果代码如下
message4 = input("输入:") print(message4)
运算结果:
输入:125 125
2.3.2变量的命名和使用
在python中使用变量时,需要遵守一些规则和指南。违反这些规则将引发错误,而指南旨在让你编写的代码更容易阅读和理解
-
变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为message_1,但不能将其命名为1_message.
-
变量名不能包含空格,但可使用下划线来分隔其中的单词。例如,变量名greeting_message可行,但变量名greeting message会引发错误。
-
不要将Python关键字和函数名作变量名,即不要使用python保留用于特殊用途的单词,如
print
-
变量名应既简短又具有描述性。
-
慎用小写字母I和大写字母O,因为他们可能被人错看成数字1和0
greeting_message = 111 print(greeting_message) 输出结果:111
习题
题目要求:根据命名规,创建三个正确的变量名和五个错误的变量名,并指出错误的原因
正确的变量名:number1、ShenWen_zeng、nike
错误的变量名:1_name(变量以数字打头)、accelerat e(变量名具有空格)、input(python的函数名)、shen!(变量名不能含有除数字、字母、下划线以外的符号)、anything is _possible(变量名太长)
在python中使用变量时,需要遵守一些规则和指南。违反这些规则将引发错误,而指南旨在让你编写的代码更容易阅读和理解
-
变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为message_1,但不能将其命名为1_message.
-
变量名不能包含空格,但可使用下划线来分隔其中的单词。例如,变量名greeting_message可行,但变量名greeting message会引发错误。
-
不要将Python关键字和函数名作变量名,即不要使用python保留用于特殊用途的单词,如
print
-
变量名应既简短又具有描述性。
-
慎用小写字母I和大写字母O,因为他们可能被人错看成数字1和0
greeting_message = 111 print(greeting_message) 输出结果:111
2.3.3使用变量时避免命名错误
变量名命名错误
print("------没有被赋值的变量,使用会出现NameError错误------")
message1 = "hello python World!"
print(meaasge)
NameError Traceback (most recent call last)
<ipython-input-5-144d14179514> in <module>
1 print("------没有被赋值的变量,使用会出现NameError错误------")
2 message1 = "hello python World!"
----> 3 print(meaasge)
NameError: name 'meaasge' is not defined
掌握变量命名错误的trackback信息
程序存在错误时,python解释器将竭尽所能地帮助你找出问题所在。程序无法成功地运行时,解释器会提供一个trackback。trackback是一条记录,指出了解释器尝试运行代码时,在什么地方陷入了困境。
习题
题目要求:自定义变量,不恰当的使用变量名,引起程序异常,根据trackback提示信息找到解决方案
代码如下
print("------没有被赋值的变量,使用会出现NameError错误------")
message1 = "hello python World!"
print(message)
运算结果:
------没有被赋值的变量,使用会出现NameError错误------
NameError Traceback (most recent call last)
in
1 print(“------没有被赋值的变量,使用会出现NameError错误------”)
2 message1 = “hello python World!”
----> 3 print(message)
NameError: name ‘message’ is not defined
修改代码
print(“------没有被赋值的变量,使用会出现NameError错误------”)
message = “hello python World!”
print(message)
------没有被赋值的变量,使用会出现NameError错误------
hello python World!
2.4.1字符串使用语法
-
字符串就是一系列字符,在python中,用引号括起来的都是字符串,其中的引号可以是单引号,也可以是双引号。
-
由于引号在Python中有特殊意义,用于标识字符串的起止标识。
- 如果在
""
双引号作为标识的字符串中使用"
字符,那么,Python就只能把"
错误地解析为起止标识,而无法解析为该 “ 字符本身,进而引发语法错误。 - 为了解决此歧义问题,python引入了转移字符技术,即通过转义字符
\'
和\"
来明确告诉python,当前的字符解析为字符本身,而非起止标识。
- 如果在
习题
题目要求:通过print在Jupyter中输出所有内容
代码如下
print("This is a string.")
print("This is also a string.")
运行结果:
This is a string.
This is also a string.
题目要求:使用单引号和双引号分别创建字符串(可以用中文作为字符串内容)。
代码如下
print('我们爱学习!')
print("我们爱学习!")
运行结果:
我们爱学习!
我们爱学习!
题目要求:创建含有引号的字符,观察引号错误使用引起的错误。
代码如下
print("我们‘爱学习’")
运行结果:
我们‘爱学习’
代码如下
print("我们"爱学习"")
运行结果:
File "<ipython-input-11-fb71290c8b12>", line 1
print("我们"爱学习"")
^
SyntaxError: invalid syntax
题目要求:创建含有引号的字符串,使用转义字符。
代码如下
print("我们\"爱学习\"")
运行结果:
我们"爱学习"
代码如下
print("我们\'爱学习\"")
运行结果:
我们'爱学习"
2.4.2使用方法修改字符串的大小写
-
知识点:
- 这个方法是Python可对特定类型的特定数据所执行的操作。特定类型:str;特定数据:name。
- 每个方法后面都跟着一对括号,为方法传入额外的参数(信息)。函数
title()
不需要额外的信息,因此它后面的括号是空的。
-
使用方法upper()和lower()修改字符串大小写
将字符串改为全部大写或全部小写
代码如下
name = "Ada lovelace" print(name.upper()) print(name.lower())
运行结果:
ADA LOVELACE ada lovelace
习题
题目要求:使用input()输入字符串,使用上述3个字符串的方法对该字符串进行修改操作,并输出结果
代码如下
name = input("输入:")
print(name.title(),name.upper(),name.lower())
运行结果:
输入:shEN
Shen SHEN shen
-
使用方法title()修改字符串为首字母大写
代码如下
name = "ada lovelace" print(name.title(),type(name))
运行结果:
Ada Lovelace <class 'str'>
2.4.3合并(拼接)字符串
知识点:python使用加号(+)来合并字符串,这种合并字符串的方法称为拼接。通过拼接,可使用存储在变量中的信息来创建完整的消息
代码如下
first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
print("hello, "+full_name.title() + "!")
运行结果:
hello, Ada Lovelace!
将字符串拼接的结果存变量中
代码如下
first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
message = "hello, "+full_name.title() + "!"
print(message)
运行结果:
hello, Ada Lovelace!
上述的代码也显示消息"hello, Ada Lovelace!",但将这条消息存储在了一个变量中,这让最后的print
语句简单的多。
习题
- 题目要求:接受键盘输入,将输入字符串储存到变量,然后进行字符串拼接,最后输出"你好,姓名"。
代码如下
message1 = input("输入:")
message2 = input("输入:")
message3 = message1 +" "+message2
print(message3)
运行结果:
输入:你好,
输入:姓名
你好, 姓名
2.4.4制作符或换行符
在程序中,空白泛指任何非打印字符,如空格、制表符和换行符。可使用空白来组织输出,以使其更易读。
在字符串中添加制表符,可以用转义字符\t
代码如下
print("python")
print("\tpython\tpython\tpython\tpython")
print("\tJava\tJava\tJava\tJava")
运行结果:
python
python python python python
Java Java Java Java
在字符串中添加换行符,可以使用转义字符\n
代码如下
print("Languages:\npython\nC\nJavaScript")
运行结果:
Languages:
python
C
JavaScript
组合使用:可在同一个字符串中同时包含制表符和换行符。
字符串"\n\t"
让python换行到下一行,并在下一行开头添加一个制表符。
下面的示例演示如何使用一个单行字符串来生成四行输出
代码如下
print("Languages:\n\tpython11111\tpython\tpython\n\tC\tC\n\tJava\tJava")
运行结果:
Languages:
python11111 python python
C C
Java Java
习题
-
题目要求:使用制表符和换行符分别自定义创建字符串(可以是中文),并输出结果。
代码如下
print("鲜花:\n\t茉莉花\t樱花\t凤凰花")
运行结果:
鲜花: 茉莉花 樱花 凤凰花
-
题目要求:组合使用字表符(3列)和换行符(2列)自定义创建字符串(可以为中文),并输出结果
代码如下
print("铃兰\t兰花\n紫荆花\t茉莉花\n水母雪\t羽裂雪")
运行结果:
铃兰 兰花 紫荆花 茉莉花 水母雪 羽裂雪
2.4.5删除字符串中的空白
对程序员来说,
'python'
和'python '
看起来几乎一样,但对程序来说,他们却是两个不同的字符串。
即程序对字符串中的空白敏感
处理字符串中的空白很重要,因为经常需要比较两个字符串是否相同。
例如,在用户登录网站时检查其用户名。通常对Python的字符串空白删除操作,对用户输入数据中多余空白进行删除。
使用方法rstrip()
删除字符串末尾空白
调用字符串方法rstrip()
,删除字符串末尾多余的空白
代码如下
favorite_language = ' python '
favorite_language
运行结果:
' python '
代码如下
favorite_language.rstrip()
运行结果:
' python'
代码如下
favorite_language
运行结果:
' python '
- 存储在变量
favorite_language
中的字符串末尾包含多余的空白。Jupyter输出可看到末尾的空格。 - 对变量
favorite_language
调用方法rstrip()
后,这个多余的空格被删除了。 - 然而,这种删除只是暂时的,在Jupyter输出中输出
favorite_language
时,会发现它依然包含多余的空白。
要永久删除这个字符串中的空白,必须将删除操作的结果存回到变量中
代码如下
print("-----通过赋值的方式覆盖原字符串----")
favorite_language = ' python '
favorite_language = favorite_language.rstrip()
favorite_language
输出结果:
-----通过赋值的方式覆盖原字符串----
' python'
- 因为
.rstrip()
操作不直接修改字符串,而是返回一个新的字符串 - 在编程中,经常需要修改变量的值,在将新值存回到原来的变量中
python还可以删除字符串开头的空白,或同时剔除字符串两端的空白。为此,可分别使用方法lstrip()
和strip()
。
在这个示例中,我们首先创建了一个开头和末尾都有空白的字符串。
接下来,我们分别删除末尾、开头和两端的空格。
print("-----Jupyter对赋值语句结果不输出----")
favorite_language = ' python '
favorite_language
输出结果:-----Jupyter对赋值语句结果不输出----
' python '
favorite_language.rstrip()
输出结果:' python'
favorite_language.lstrip()
输出结果:'python '
favorite_language.strip()
输出结果:'python'
习题
题目要求:外部输入含有空格的字符串,使用上述方法对字符串进行空白删除处理。
代码如下
name = input("输入字符串:")
name
运行结果:
输入字符串:" name_speak "
'" name_speak "'
代码如下
name.rstrip()
运行结果:
'" name_speak"'
2.4.6字符串引号引起的语法错误
当程序中包含非法的python代码时,就会导致语法错误。
下面演示了如何正确地使用单引号和双引号。撇号位于两个双引号之间,因此python解释器能够正确地理解这个字符串。
代码如下
message = "One of python's strengths is its diverse community."
print(message)
输出结果:
One of python's strengths is its diverse community.
在用单引号括起来的字符串中,如果包括撇号,就将导致错误。这是因为这会导致Python将第一个单引号和撇号之间的内容视为一个字符串,进而将余下的文本视为python代码,从而引发错误。因为python将无法正确地确定字符串的结束位置。
代码如下
message = 'One of python's strengths is its diverse community.'
print(message)
从上述输出可知,错误发生在第二个单引号后面,这种语法错误表明,在解释器看来,其中的有些内容不是有效的Python代码。
习题
-
题目要求:个性化消息:将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消息应非常简单
代码如下
name = "Eric" print("Hello Eric,would you like to learn some python today")
运行结果:
Hello Eric,would you like to learn some python today
-
题目要求:调整名字的大小写:将一个人名存储到一个变量中,再以小写、大写和首字母大写的方式显示这个人名。
代码如下
name = "maxwell_SMISS" print(name.lower()) print(name.upper()) print(name.title())
运行结果:
maxwell_smiss MAXWELL_SMISS Maxwell_Smiss
-
题目要求:名言:找一句你钦佩的名人说的名言,将这个名人的姓名和他的名言打印出来。输入应类似于下面这样(包括引号):Albert Einstein once said,“A person who never made a mistake never tried anything news.”
代码如下
print("Golgi once said,'Books are the ladder of human progress'")
运行结果:
Golgi once said,'Books are the ladder of human progress'
-
题目要求:名言2:重复练习2-5,但将名人的姓名存储在变量
famous_person
中,在创建要显示的消息,并将其存储在变量message
中,然后打印这条消息。
代码如下
famous_person = "Golgi"
message = "Books are the ladder of human progress"
print(message)
运行结果:
Books are the ladder of human progress
- 题目要求:剔除人名中的空白:存储一个人名,并在其开头和末尾都包含一些空白字符。务必至少使用字符组合
\t
和\n
各一次。打印这个人名,以显示其开头和末尾的空白。然后,分别使用剔除函数lstrip()、rstrip()和strip()
对人名进行处理,并将结果打印出来。
代码如下
name = " Shen Wenzeng "
name.rstrip()
运行结果:
' Shen Wenzeng'
代码如下
name.lstrip()
运行结果:
'Shen Wenzeng '
代码如下
name.strip()
运行结果:
'Shen Wenzeng'
2.5数值类型
2.5.1整数类型
在Python中,可对整数执行加(+
)减(-
)乘(*
)除(/
)等运算
在终端会话中,python直接返回运算结果。python使用两个乘号表示乘方运算
python还支持运算次序,因此你可在同一个表达式中使用多种运算。你还可以使用括号来修改运算次序,让python按你指定的次序执行运算
习题
题目要求:数字8:编写四个表达式,它们分别使用加法、减法、、乘法和除法运算,但结果都是数字8。为使用print
语句来显示结果,务必将这些表达式用括号括起来,也就是说,你应该编写4行类似下面的代码:print(5 + 3)
。输出应为4行,其中每行都只包含数字8
代码如下
print(3 + 5)
print(10 - 2)
print(2 * 4)
print(16 / 2)
运行结果:
8
8
8
8.0
2.5.2浮点数类型
python中将带有小数点的数字都称为浮点数
由于计算机采用二进制工作,很多小数都没法被二进制准确表示。因此pyt的浮点数小数位并不精确。
print('-----浮点数是不确定数,所以不能用==等号判断,两个浮点数相等-----')
print('-----整数是确定数,所以能用==等号判断,两个整数相等-----')
0.2 + 0.1
显示结果:0.30000000000000004
3 * 0.1
显示结果:0.30000000000000004
如何正确比较两个浮点数大小
a = 0.2 + 0.1
b = 3 * 0.1
(a - b) <= 10**(-6)
结果显示:True
不仅仅是python,其他所有语言的浮点数都存在误差
习题
-
题目要求:使用
input()
函数。键盘输入两个数,然后再对这两个数进行上述运算的操作。注意类型转换。代码如下
x = float(input("输入第一个参数:")) y = float(input("输入第二个参数:")) x + y
运行结果:
输入第一个参数:2.0 输入第二个参数:3.0 5.0
-
题目要求:使用
input()
函数。键盘输入两个数,比较这两个数大小。并输出结果。代码如下
x = float(input("输入第一个参数:")) y = float(input("输入第二个参数:")) if (x > y): print(x) else: print(y)
运行结果:
输入第一个参数:2.0 输入第二个参数:3.0 3.0
2.5.3str()使用
字符串不能和数值类型拼接
常常需要在消息中使用字符串拼接,在构造完整的消息信息。例如,要祝某人生日快乐,可能会编写代码打印一条简单的生日祝福语:happy 23rd birthday!。但如果你运行这些代码,将发现他们会引发错误:
age = 23
message = "happy " + age + "rd Birthday!"
print(message)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-8-4eec9febaeeb> in <module>
1 age = 23
----> 2 message = "happy " + age + "rd Birthday!"
3 print(message)
TypeError: can only concatenate str (not "int") to str
这是一个类型错误(TypeError),意味着python无法识别你使用的信息。
在示例中,python发现你使用了一个值为整数(int)的变量,但它不知道该如何解读这个值。python知道,这个变量表示的可能是数值23,也可能是字符2和3.
解决方法,需要显示地指出你希望Python将这个整数用作字符串。为此,可调用函数str(),它让python将非字符串值表示为字符串:
age = 23
message = "happy " + str(age) + "rd Birthday!"
print(message)
happy 23rd Birthday!
习题
题目要求:最喜欢的数字:将你最喜欢的数字存储在一个变量中,再使用这个变量创建一条消息,指出你最喜欢的数字,然后将这条消息打印出来。
favorite_number = 125
message = str(favorite_number) + " is my favorite number"
print(message)
125 is my favorite number
2.6运算符
+(加)、-(减)、*(乘)、/(除)、%(取余)
2.7注释
大多数编程语言中,注释都是一项很有用的功能。注释让你能够用自然的语言在程序中添加说明
在python中,注释用井号(#)
标识。井号后面的内容都会被python解释器忽略
注释快捷键:ctrl+/
# 向大家问好
print("hello pythom people!")
hello pythom people!
python解释器将忽略第一行,只执行第二行
习题
题目要求:添加注释:选择你编写的两个程序,在每个程序中都至少添加一条注释。
代码如下
#2020/3/14
print("hello world")
运行结果:
hello world
e = "happy " + age + “rd Birthday!”
3 print(message)
TypeError: can only concatenate str (not “int”) to str
这是一个类型错误(TypeError),意味着python无法识别你使用的信息。
在示例中,python发现你使用了一个值为整数(int)的变量,但它不知道该如何解读这个值。python知道,这个变量表示的可能是数值23,也可能是字符2和3.
解决方法,需要显示地指出你希望Python将这个整数用作字符串。为此,可调用函数str(),它让python将非字符串值表示为字符串:
age = 23
message = "happy " + str(age) + “rd Birthday!”
print(message)
happy 23rd Birthday!
#### 习题
题目要求:最喜欢的数字:将你最喜欢的数字存储在一个变量中,再使用这个变量创建一条消息,指出你最喜欢的数字,然后将这条消息打印出来。
favorite_number = 125
message = str(favorite_number) + " is my favorite number"
print(message)
125 is my favorite number
## 2.6运算符
+(加)、-(减)、*(乘)、/(除)、%(取余)
## 2.7注释
大多数编程语言中,注释都是一项很有用的功能。注释让你能够用自然的语言在程序中添加说明
在python中,注释用井号`(#)`标识。井号后面的内容都会被python解释器忽略
注释快捷键:`ctrl+/`
向大家问好
print(“hello pythom people!”)
hello pythom people!
python解释器将忽略第一行,只执行第二行
习题
题目要求:添加注释:选择你编写的两个程序,在每个程序中都至少添加一条注释。
代码如下
#2020/3/14
print("hello world")
运行结果:hello world