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

学习目标:

  • 如何使用变量,如何创建描述性变量名,以及如何消除名称错误和语法错误
  • 字符串是什么,如何使用全小写、全大写和首字母大写的方式显示字符串。
  • 如何使用空白来显示整洁的输出,如何删除字符串中的多余字符。
  • 如何使用整数和浮点数,了解使用数值数据的方式。
  • 如何编写说明性注释,了解 Python 代码编写的理念。

2.1 运行hello_world.py时的情况

变量

变量是可以被赋值的标签,可以说一个变量指向一个特定的值。在程序中可以随时修改,Python 始终记录最新值。

变量的命名规则(蛇形命名法也叫下划线命名)

注意:

目前应使用小写的 Python 变量名。虽然大写不会导致错误,但大写字母在变量名中有特殊含义,这将在后续讨论。

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

Python解释器在程序无法成功运行时,提供一个 Traceback,指出解释器在运行代码时,在什么地方陷入困境。如果你错误拼写了变量名:

>>> message = "Hello Python Crash Course reader!"
>>> print(mesage)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'mesage' is not defined. Did you mean: 'message'?

编程语言不关心拼写是否正确,但需要保持一致。如果在定义变量的地方也将 message 错误地拼写成了 mesage,程序将成功地运行。

2.3 字符串 string

字符串是一系列字符。在 Python 中,用英文引号引起的都是字符串,您可以在字符串周围使用单引号('')或双引号("")或者三个单/双引号。

大小写修改

.title()方法

在函数调用print()中,title()出现在name这个变量的后面。

name.title()name后面的句点.告诉Python让title()方法作用于变量name。

name = "ada lovelace"
print(name.title()) # 将单词首字母大写,输出Ada Lovelace
print(name.upper()) # 将字母全部大写,输出ADA LOVELACE
print(name.lower()) # 将字母全部小写,输出ada lovelace

lower() 方法在存储数据很有用。用户通常不像你期望的那样提供正确的大小写,因此需要将字符串先转换为全小写的再存储。

关于函数(function)和方法(method)

目前为止,我们还不用知道它们之间的区别,但你可以把方法视为特殊的函数。它们的书写方式略有不同:

方法是 Python对一段数据执行的操作。每个方法后面都有一组小括号,这是因为方法通常需要在圆括号内提供额外的信息来完成其工作:变量名.方法名(…);

函数的书写方式:函数名(…)

如果要力求精确,可以在 Python 解释器中通过去掉函数后面的括号来执行代码,从而确定函数是否应该被称为方法:

>>> print
<built-in function print>
>>> ''.title
<built-in method title of str object at 0x00007FF922DA36E0>

title()函数不需要额外的信息,因此它后面的圆括号是空的。

字符串中使用变量

在前引号前加上字母f(format),再将要引用的变量放在花括号{}内。

# 使用两个变量分别表示名字和姓氏,然后组合这些值以显示某人的全名
first_name = "Guido"
last_name = "van Rossum"
full_name = f"{first_name} {last_name}"
print(f"你好, {full_name.title()}!") # 输出 Hello, Ada Lovelace!

message = f"你好, {full_name.title()}!"
print(message) # 同样输出 Hello, Ada Lovelace! 但赋给变量,让函数调用print()变得简单
Warning

f 字符串是Python 3.6引入的。如果你使用的是Python 3.5或更早的版本,需要使用 format() 方法:full_name = "{} {}".format(first_name, last_name)

字符串的连接

字符串的连接是一个比较常见的需求,比如将姓和名进行连接。直接使用操作符+就可以将两个或者两个以上的字符串进行连接。

字符串的复制

有的时候我们需要把一个字符串重复多遍,比如你要把“Python真强大”这句话重复三遍,可以使用操作符*对字符串进行重复。上面代码对字符串重复三遍,输入3就可以。你可以根据需要,重复多遍。

字符串的简单拼接
除了使用 f-字符串来生成字符串,我们还可以对字符串“做运算”:

>>> 'Hello' + 'iTuring' # 使用+号来拼接字符串
'HelloiTuring'
>>> 'Hello' *2 # 使用*号来生成重复的字符串
'HelloHello'

获取字符串的长度

手机号、身份证号、姓名都是字符串,想要知道这些字符串的长度,可以利用len()函数来获取字符串长度。

字符串查找

字符串查找是指查找某一个字符串是否包含在另一个字符串中,比如知道一个用户名,你想知道这个用户是不是测试账号(测试账号的判断依据是名字中包含测试两字),那么只要在名字中查找“测试”字符串即可。如果找到了,则说明该用户是测试账号;如果查找不到,则说明不是测试账号。

in或者not in这两种方法均可实现。除了innot in,还可以用find,当用find查找某一字符是否存在于某个字符串中时,如果存在则返回该字符的具体位置,如果不存在则返回-1,如下所示。

注意,因为在Python中位置是从0开始数的,所以第3位就是2。

添加空白

空白泛指任何非打印字符,如空格、制表符(\t)和换行符(\n)。用空白组织输出,增加易读性。

# 单行字符串生成四行输出
>>> print("Languages:\n\tPython\n\tC\n\tJavaScript") 
Languages:
		Python
		C
		JavaScript

删除空白

rstrip() 方法:剔除字符串右侧的空白

lstrip()方法:剔除字符串左侧的空白

strip()方法:剔除字符串首尾的指定字符,默认剔除字符串首尾的空格或换行符

>>> '\tPython\n'.strip()
'Python'
>>> 'APythonA'.strip("A")
'Python'
>>> favorite_language = ' Python ' 
>>> favorite_language.strip() # 剔除字符串两边的空白
'Python'
>>> favorite_language.rstrip() # 剔除字符串右侧的空白
' Python'
>>> favorite_language.lstrip() # 剔除字符串左侧的空白
'Python '
>>> favorite_language
' Python '

# 要永久删除字符串中的空格,必须将删除的值与变量名关联起来
>>> favorite_language = favorite_language.strip()
>>> favorite_language
'python'

删除前缀

如果我们想去掉https://这个URL前缀,只关注用户在地址栏需要输入的部分

removeprefix() :输入变量名,后面跟一个点,然后输入 removeprefix()方法。在括号内输入要从原始字符串中删除的前缀。同样也会使原始字符串保持不变。如果要保留新的值可以重新分配给原来的变量或新的变量。

>>> nostarch_url = 'https://davonos.com' 
>>> nostarch_url.removeprefix('https://') 
'davonos.com'
>>> simple_url = nostarch_url.removeprefix('https://')
>>> print(simple_url)
davonos.com

字符串分隔

先将一个字符用某个分隔符号分开,然后将分隔后的值以列表的形式返回,用到的是split()

>>>"a,b,c".split(",")
['a', 'b', 'c']

2.4 数值 Number

整数integer

基础数学运算

双乘号**表示乘方运算,双斜杠//表示整除运算

>>> 2 + 3
5
>>> 3 - 2
1
>>> 2 * 3
6
>>> 3 / 2
1.5
>>> 3 ** 2
9
>>> 2 + 3 * 4
14
>>> (2 + 3) * 4
20

Python3 的六个标准数据类型中:

不可变数据(3个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3个):List(列表)、Dictionary(字典)、Set(集合)。

数据类型 Excel对照
整数int 整数
浮点数float 小数
布尔值bool TRUE/FALSE
复数complex COMPLEX函数
字符串string 文本
列表list 某列内容(不包含表头)
字典dict 某列内容(含表头)& 某行内容
元组(Tuple)
集合(Set)

此外还有一些高级的数据类型,如:字节数组类型(bytes)。

浮点数float

小数点可以出现在数的任何位置上。注意包含的小数位数可能不确定。在第二部分的项目中学习处理多余小数位的方式。

>>> 0.1 + 0.1
0.2
>>> 0.2 +0.1
0.30000000000000004
>>> 2 * 0.1
0.2
>>> 3 * 0.1
0.30000000000000004

任意两个数相除,即便能整除,结果也总是浮点数。只要有操作数是浮点数,Python默认得到的总是浮点数。

>>> 4/2
2.0
>>> 2 * 3.0
6.0

用下划线将数字分组,使很大的数更清晰易读,下划线不会被打印

>>> universe_age = 14_000_000_000 # 在书写长数字时,可以使用下划线对数字进行分组,使大数字更加易读
>>> print(universe_age) # 打印使用下划线定义的数字时,Python 只打印数字
14000000000
>>> print( 3**2, 3/2, 3//2 )
9 1.5 1

Python 支持在一行代码中给多个变量赋值,这有助于缩短程序并提高可读性。

常用做法是将一系列数赋给一组变量。数和变量均用逗号分开,书写的顺序就是分配的顺序。

# 如何将变量 x、y 和 z 都初始化为零
>>> x,y,z = 0,1,2
>>> print(x,y,z)
0 1 2

常量

程序内一直保持不变的变量。Python 没有内置的常量,我们给出的是一个约定俗成的惯例,习惯使用全大写字母(单词由下划线分割)来指出将某个特定的变量视为常量。

请不要在程序中修改任何常量!

避免语法错误

语法错误:包含非法的 Python 代码时发生的错误(时常会遇到)

解释器无法正确地确定字符串的结束位置,所以会给出错误

2.5 注释 #

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

单行注释:使用#注释内容,说明多行代码功能一般放在代码上一行,说明单行代码的功能时一般放在代码右侧。

多行注释:使用三个连续的单引号```或三个连续双引号注释"""

作为新手,最值得养成的习惯之一就是在代码中编写清晰、简洁的注释。

如果不确定是否要编写注释,问问自己:在找到合理解决方案前,考虑了多个解决方案吗?如果答案是肯定的,就编写注释对你的解决方案进行说明吧。相比回过头去再添加注释,删除多余的注释要容易得多。

动手一试

完成下面的每个练习时,都编写一个独立的程序。保存每个程序时,使用符合标准 Python 约定的文件名:使用小写字母和下划线,如simple_message.py

简单消息:将一条消息赋给变量,并将其打印出来。

msg = "I love learning to use Python."
print(msg)

多条简单消息:将一条消息赋给变量,并将其打印出来。再将变量的值修改为一条消息,并将其打印出来。

msg = "I love learning to use Python."
print(msg)
msg = "It's really satisfying!"
print(msg)

个性化消息:用变量表示一个人的名字,并向其显示一条消息。显示的消息应非常简单,如下:Hello Eric, would you like to learn some Python today?

name = "eric"
msg = f"Hello {name.title()},would you like to learn some Python today?"
print(msg)

调整名字的大小写:变量表示一个人的名字,再分别以全小写、全大写和首字母大写的方式显示这个人名。

name = 'eric'
print(name.lower())
print(name.upper())
print(name.title())

名言1:找一句名人名言,并打印出来,输出应类似于(包括引号):Albert Einstein once said, “A person who never made a mistake never tried anything new.”

print('Albert Einstein once said, "A person who never made a mistake')
print('never tried anything new."')

名言2:重复名言1的练习,但用变量 famous_person 表示名人的姓名,再创建要显示的消息并将其赋给变量 message,然后打印这条消息。

famous_person = "Albert Einstein"
message = f'{famous_person} once said, "A person who never made a mistake never tried anything new."'
print(message)

删除人名中的空白:变量表示一个人的名字,并在其开头和末尾都包含一些空白字符。务必至少使用字符组合“\t"“\n”各一次。打印这个人名,显示其开头和末尾的空白。然后分别使用函数lstrip()rstrip()strip()对人名处理,并打印结果。

name = "\tEric Matthes\n"
print("Unmodified:")
print(name)

print("\nUsing lstrip():")
print(name.lstrip())

print("\nUsing rstrip():")
print(name.rstrip())

print("\nUsing strip():")
print(name.strip())

文件扩展名:Python 提供了 removesuffix() 方法,工作原理与 removeprefix() 很像。请将值'python_notes.txt'赋给变量 filename,再使用 removesuffix()方法来显示不包含扩展名的文件名,就像文件浏览器那样。

filename = 'python_notes.txt'
print(filename.removesuffix('.txt'))

数字8:编写4个表达式,分别使用加减乘除运算,结果都是数字8。为了使函数调用print()来显示结果,务必将表达式用括号括起来,类似于:print(5+3)

print(2+6)
print(9-1)
print(2*4)
print(2**3)
print(16/2)

最喜欢的数:用一个变量表示你最喜欢的数,再使用这个变量创建一条消息,指出你最喜欢的数是什么,然后将这条消息打印出来。

fav_num = 42
msg = f"My favorite number is {fav_num}."
print(msg)

添加注释:选择你编写的两个程序,每个程序至少添加一条注释,如何实在没有需要说明的,就在开头加上姓名和当前日期,再用一句话阐述程序的功能。

Python之禅:在终端执行命令import this,并了解一下有关编写优秀 Python 代码的指导原则。