抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

image-20210324015034342

第二章 变量与数据类型

变量

变量的定义

为何需要变量?

  • 变量的功能:通过一个有意义的标识(变量),将变量与某个具体内容(数值、数组、对象等)进行关联,方便访问。

  • 门牌号与房子、人与人名。

  • 通过变量,不需要记住存放内容的内存物理地址

  • 在Python中,变量存的是记录具体数据的地址。

    1
    2
    3
    4
    5
    6
    print('---------将变量与字面量进行关联,便于访问和使用。--------------')
    message = "Hello Python world!" #将字符串字面量赋值给message变量
    print(message, type(message))
    输出:
    ---------将变量与字面量进行关联,便于访问和使用。--------------
    Hello Python world! <class 'str'>

知识点:

  • Jupyter在命令模式下开启cell的行号。
  • 快捷键L

变量的命名和使用

在Python中使用变量时,需要遵守一些规则。违反这些规则将引发错误。请务必牢记下述有关变量的规则:

  • 变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为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变量名。在变量名中使用大写字母虽然不会导致错误,但避免使用大写字母是个不错的主意。

1
2
3
4
greeting_message = 111
print(greeting_message)
输出:
111

变量命名的常见错误

1
2
3
4
5
6
7
8
9
10
11
12
print("------------没有被赋值的变量,使用会出现NameError错误----------")
mesage = "Hello Python World!"
print(message)

#-------------报错信息-------------
NameError Traceback (most recent call last)

<ipython-input-41-80779f5fb05f> in <module>
1 print("---没有被赋值的变量,使用会出现NameError错误---")
2 mesage = "Hello Python World!"
----> 3 print(message)
NameError: name 'message' is not defined

数值类型

整数类型

掌握整数类型的四则运算

​ 在Python中,可对整数执行加(+)减(-)乘(*)除(/)等运算。

1
2
3
4
5
6
7
8
9
10
11
12
print(2 + 3)
#结果:5
print(3 - 2)
#结果:1
print(2 * 3)
#结果:6
print(3 / 2) # 浮点数除法
#结果:1.5
print(3 // 2) # 商
#结果:1
print(3 % 2) # 余数
#结果:1

掌握整数类型的指数运算

​ 在终端会话中,Python直接返回运算结果。Python使用两个乘号表示乘方运算.

1
2
3
4
5
6
print(3 ** 2)
#结果:9
print(3 ** 3)
#结果:27
print(10 ** 6)
#结果:1000000

掌握运算的优先级

​ Python还支持运算次序,因此你可在同一个表达式中使用多种运算。你还可以使用括号来修改运算次序,让Python按你指定的次序执行运算,如下所示:

1
2
print(2 + 3*4)
print((2 + 3) * 4)

​ 运行结果:

1
2
14
20
  • 在这些示例中,空格不影响Python计算表达式的方式,它们的存在旨在让你阅读代码时,能迅速确定先执行哪些运算。
  • 习题四。

浮点类型

掌握浮点数类型运算操作

知识点:

  • Python将带小数点的数字都称为浮点数
  • 小数点可出现在数字的任何位置。
1
2
3
4
print(0.1 + 0.1)
# 结果:0.2
print(0.2 - 0.2)
# 结果:0.0

掌握浮点数运算误差

知识点:

  • 由于计算机采用二进制工作,很多小数都没法被二进制准确表示。
  • 因此,Python的浮点数小数位并不精确
1
2
3
4
5
6
print(0.2 * 0.1)
# 结果:0.020000000000000004
print(0.3 / 0.2)
# 结果:1.4999999999999998
print(3 * 0.1)
# 结果:0.30000000000000004

如何正确比较两个浮点数大小

知识点:

  • 浮点数是不确定数,所以不能==等号判断两个浮点数相等。
  • 整数是确定数,所以==等号判断两个整数相等。
  • 不仅仅是Python,其他所有语言的浮点数都存在误差。
1
2
3
4
a = 0.2 + 0.1
b = 3 * 0.1
print( (a - b) <= 10**(-6) )
# 结果:True
  • 习题五

str()的使用

字符串不能和数值类型拼接

  • 常常需要在消息中使用字符串拼接,在构造完整的消息信息。例如,要祝某人生日快乐,可能会编写代码打印一条简单的生日祝福语:Happy 23rd birthday!。但如果运行如下代码,将会触发类型错误:
1
2
3
4
5
6
7
8
9
10
11
12
13
age = 23
message = "Happy " + age + "rd Birthday!"
print(message)

---------------------------------------------
TypeError Traceback (most recent call last)

<ipython-input-103-4d54be8cf23f> in <module>
1 age = 23
----> 2 message = "Happy " + age + "rd Birthday!"
3
4 print(message)
TypeError: can only concatenate str (not "int") to str

分析:

  • 这是一个**类型错误(TypeError)**,无法执行对字符类型str和数值类型int的数据直接相加。
  • 运算操作数需要类型匹配,否则将会触发TypeError

使用str()转换非字符类型数据

知识点:

  • 需要显式地将数值类型转换为字符串类型。
  • 可调用函数str(),它让Python将非字符串值转换为字符串。
  • 在字符串拼接时,特别要注意拼接的变量类型是否是字符串,否则就会出现类型错误。
1
2
3
4
age = 23
message = "Happy " + str(age) + "rd Birthday!"
print(message)
# Happy 23rd Birthday!
  • 习题六

注释

如何编写注释(快捷键ctrl+/)

知识点:

  • 注释让你能够使用自然语言在程序中添加说明。
  • 在Python中,注释用井号(#)标识。井号后面的内容都会被Python解释器忽略
  • 注释快捷键:ctrl+/
1
2
3
# 向大家问好
print("Hello Python people!")
# 结果:Hello Python people!
  • Python解释器将忽略第1行,只执行第2行。

多行注释

知识点:

  • 多行注释用三个单引号 ''' 或者三个双引号 """ 将注释括起来。
1
2
3
4
5
6
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
print("Hello, World!")
1
2
3
4
5
6
"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号
这是多行注释,用三个双引号
"""
print("Hello, World!")

熟悉该编写什么样的注释

  • 在开发项目期间,你对各个部分如何协同工作了如指掌,但过段时间后,有些细节你可能不记得了。当然,你总是可以通过研究代码来确定各个部分的工作原理,但通过编写注释,以清晰的自然语言对解决方案进行概述,可节省很多时间。
  • 要成为专业程序员或与其他程序员合作,就必须编写有意义的注释。当前,大多数软件都是合作编写的,编写者可能是同一家公司的多名员工,也可能是众多致力于同一个开源项目的人员。训练有素的程序员都希望代码中包含注释,因此你最好从现在开始就在程序中添加描述性注释。作为新手,最值得养成的习惯之一是,在代码中编写清晰、简洁的注释
  • 如果不确定是否要编写注释,就问问自己,找到合理的解决方案前,是否考虑了多个解决方案。如果答案是肯定的,就编写注释对你的解决方案进行说明吧。相比回过头去再添加注释,删除多余的注释要容易得多。

习题七

任务

第1题

题目要求:

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

  • 第1行代码,用于代码注释输出。
  • 第2行代码,它将字符串字面量“Hello Python world!”与变量message关联起来;
  • 第3行代码,它将与变量message关联的值打印到屏幕。

修改程序,使其再打印一条消息:

代码如下:

1
2
3
print('---------在创建或赋值变量时,不需要为变量指定 类型--------------')
message = 2019
print(message, type(message))
1
2
3
4
5
6
7
8
9
10
11
print('--------不能使用未创建的变量---------------')
message1 = 3.14
print(message1, type(message1))
````

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

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

运行结果:

1
2
---------在创建或赋值变量时,不需要为变量指定 类型--------------
2019 <class 'int'>
1
2
--------不能使用未创建的变量---------------
3.14 <class 'float'>
1
2
Hello Python world!
Hello Python Crash Course world!

第2题

题目要求:

在程序中可随时修改变量的值,而Python将始终记录变量的最新值。通过input函数接受用户的输入,注意该函数的返回为str类型。

代码如下

1
2
3
4
5
# input 函数的返回是str
message = input("请输入float类型的数据:")
message = float(message) # str --> float
message = message * 10
print(message, type(message))

运行结果:

1
22.0 <class 'float'>

第3题

题目要求:

  1. 创建变量,将一条消息存储到变量中,再将其打印出来。
  2. 将一条消息存储到变量中,将其打印出来;再将变量的值修改为一条新消息,并将其打印出来。
  3. 使用input()函数,接收外部输入(输入字符),并把结果存到变量中,组织消息内容,打印结果。
  4. 使用input()函数,接收外部输入(输入数字),并把结果存到变量中,对这数进行平方运算,打印结果

代码如下

1
2
3
4
5
6
7
8
9
10
massage='Hello World!'
print(massage)
massage1=2.2
massage1=str(massage1)
print(massage1)
massage2=input('输入字符')
print(massage2)
massage3=input('输入数字')
massage3=float(massage3)
print(massage3**2)

运行结果:

1
2
3
4
Hello World!
2.2
1.3
1.6900000000000002

第4题

题目要求:

  1. 数字8:编写4个表达式,它们分别使用加法、减法、乘法和除法运算,但结果都是数字8。为使用print语句来显示结果,务必将这些表达式用括号括起来,也就是说,你应该编写4行类似于下面的代码:print(5 + 3)。输出应为4行,其中每行都只包含数字8。
  2. 使用input()函数,键盘输入两个整数,然后再对这两个数进行上述运算操作。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
print(2+6)
print(11-3)
print(2*4)
print(32//4)
num1=float(input('num1'))
num2=float(input('num2'))
print(num1+num2)
print(num1-num2)
print(num1*num2)
print(num1/num2)
#num1=4.5
#num2=5.6

运行结果:

1
2
3
4
5
6
7
8
8
8
8
8
10.1
-1.0999999999999996
25.2
0.8035714285714286

第5题

题目要求:

  1. 使用input()函数,键盘输入两个浮点数,然后再对这两个数进行四则运算操作,观察浮点数计算误差。
  2. 使用input()函数,键盘输入两个浮点数,比较整这两个数的大小,并输出结果。

代码如下:

1
2
3
4
5
6
7
8
9
10
num1=float(input('num1'))
num2=float(input('num2'))
print(num1+num2)
print(num1-num2)
print(num1*num2)
print(num1/num2)
print(num1>num2)
print(num1<num2)
#num1=4.5
#num2=6.7

运行结果:

1
2
3
4
5
6
11.2
-2.2
30.150000000000002
0.6716417910447761
False
True

第6题

题目要求:

  1. 最喜欢的数字:将你最喜欢的数字存储在一个变量中,再使用这个变量创建一条消息,指出你最喜欢的数字,然后将这条消息打印出来。
  2. 使用input()函数,键盘输入两个3位数的整数,然后通过str()将它们转换为字符串,再使用+对它们进行拼接,并输出结果。

代码如下:

1
2
3
4
5
6
7
massage=98
print('我最喜欢的数字是:'+str(massage))
num1=str(input('三位整数'))
num2=str(input('三位整数'))
print(num1+um2)
#num1=234
#num2=456

运行结果:

1
2
我最喜欢的数字是:98
234456

第7题

题目要求:

  1. 添加注释:选择你编写的两个程序,在每个程序中都至少添加一条注释。如果程序太简单,实在没有什么需要说明的,就在程序文件开头加上你的姓名和当前日期,再用一句话阐述程序的功能。

代码如下:

1
2
3
4
5
6
7
8
num1=float(input('num1')) # str --> float
num2=float(input('num2')) # str --> float
print(num1+num2)
print(num1-num2)
print(num1*num2)
print(num1/num2)
print(num1>num2)
print(num1<num2)
1
2
3
#谢森时 3/20
massage='Hello World!'
print(massage)

评论