前言
本章节开始之前,我们了解一下计算机的组成
储存程式型电脑结构(冯诺伊曼结构)提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备)。运算器和控制器的合称中央处理器,负责执行各种运算、控制指令,并处理计算机软件中的数据。程序实际上是一系列指令的集合,通过组织这些指令,我们能够控制计算机按照特定的方式执行任务。具体来说:
- 运算器(ALU - Arithmetic Logic Unit): 运算器是中央处理器的关键组成部分,负责执行各种算术和逻辑运算,如加法、减法、乘法和除法。它是实现计算功能的核心。
- 控制器(Control Unit): 控制器与运算器一起形成中央处理器。它的任务是协调计算机的各个部件,确保指令按照正确的顺序执行。控制器从存储器中获取指令,并将其传递给运算器进行执行。
- 存储器(Memory): 存储器用于存储程序和数据。随机存储器(RAM)是临时存储,用于正在运行的程序和数据。只读存储器(ROM)包含启动时需要的固定信息。存储器的高速读写操作是计算机快速运行的关键。
- 输入设备(Input Devices): 输入设备允许用户向计算机提供数据。常见的输入设备包括键盘、鼠标、触摸屏等。这些设备将用户的物理操作转换为计算机能够理解的信号。
- 输出设备(Output Devices): 输出设备将计算机处理后的数据呈现给用户。显示器、打印机、扬声器等都是常见的输出设备,它们将计算机的输出转换为可感知的形式。
冯·诺依曼结构是现代计算机体系结构的基础。它强调将存储器与中央处理器分离,允许程序和数据在存储器之间交互。同时,冯·诺依曼结构采用二进制编码方式,这是因为在电子电路中更容易实现。二进制是一种“逢二进一”的计数法,与我们熟悉的十进制(“逢十进一”)有一定差异,但在计算机中被广泛应用。
了解二进制与十进制、八进制和十六进制之间的转换关系对于理解计算机的底层原理和编程是非常重要的。这种基础知识有助于程序员更好地理解计算机如何处理和存储信息
变量和数据类型
在程序设计中,变量是一种存储数据的载体。是一种用于存储数据的容器。计算机中的变量实际上是存储在内存中的数据,是计算和控制的基础要素。变量的值可以被读取和修改,是计算和控制的基本要素之一,为计算机执行各种任务提供了灵活性。
计算机处理的数据类型多种多样,不仅仅包括数值,还涵盖文本、图形、音频、视频等各种形式的数据。不同的数据需要定义不同的存储类型。在Python中,提供了丰富的数据类型,并且允许用户自定义新的数据类型(这将在后面详细介绍)。
以下是几种常用的Python数据类型:
- 整数(int): 用于存储整数值。
age = 25
- 浮点数(float): 用于存储带有小数点的数值。
height = 1.75
- 字符串(str): 用于存储文本数据。
name = "John"
- 布尔值(bool): 用于表示真或假。
is_adult = True
Python的数据类型丰富多样,同时支持用户自定义新的数据类型,使得编写灵活而强大的程序变得更加容易。深入理解这些数据类型将有助于更有效地利用计算机进行数据处理。
变量
下面来尝试在hello_world.py
中使用一个变量。在这个文件开头添加一行代码,并对第2行代码进行修改,如下所示:
message = "Hello Python world!"
print(message)
运行这个程序,输出与以前相同:
Hello Python world!
变量: 在Python中,message
是一个变量,可以看作是一个用于存储数据的容器。在这里,它存储了一个字符串数据,即 "Hello Python world!"。
输出: print()
是一个用于在控制台输出信息的函数。在这里,通过 print(message)
,将 message
变量的值输出到控制台。
下面来进一步扩展这个程序:修改hello_world.py
,使其再打印一条消息。
message = "Hello Python world!"
print(message)
message = "Hello Python Crash Course world!"
print(message)
现在如果运行这个程序,将看到两行输出:
Hello Python world!
Hello Python Crash Course world!
在程序中可随时修改变量的值,而Python将始终记录变量的最新值。
变量命名
做个职业素养的程序员,对于每个变量需要给它取一个得体的名字,就如同我们每个人都有属于自己的名字一样。在Python中,变量命名需要遵循以下这些必须遵守硬性规则和强烈建议遵守的非硬性规则。
硬性规则:
- 变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为message_1,但不能将其命名为1_message。
- 变量名不能包含空格,但可使用下划线来分隔其中的单词。例如,变量名greeting_message
- 可行,但变量名greeting message会引发错误。
- 不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词,
- 变量名应既简短又具有描述性。例如, name比n好, student_name比s_n好, name_length
- 比length_of_persons_name好。
- 慎用小写字母l和大写字母O,因为它们可能被人错看成数字1和0。
# 小写字母: l
# 大写字母: O
PEP 8建议:
小写字母: 使用小写字母拼写变量名,多个单词之间使用下划线连接。
代码语言:py复制user_name = "John"
受保护的实例属性: 受保护的实例属性应该以单个下划线开头。
代码语言:python代码运行次数:0复制_protected_variable = 10
私有的实例属性: 私有的实例属性应该以两个下划线开头。
代码语言:python代码运行次数:0复制__private_variable = 20
见名知意: 变量名应当具有清晰的语义,使其他人能够理解变量的用途。
PEP
PEP是Python Enhancement Proposal的缩写,通常翻译为“Python增强提案”。
每个PEP都是一份为Python社区提供的指导Python往更好的方向发展的技术文档,其中的第8号增强提案(PEP 8)是针对Python语言编订的代码风格指南。
尽管我们可以在保证语法没有问题的前提下随意书写Python代码,但是在实际开发中,采用一致的风格书写出可读性强的代码是每个专业的程序员应该做到的事情,也是每个公司的编程规范中会提出的要求,这些在多人协作开发一个项目(团队开发)的时候显得尤为重要。
可以读一下PEP 8建议: https://peps.python.org/pep-0008/
程序员都会犯错,而且大多数程序员每天都会犯错。虽然优秀的程序员也会犯错,但他们也知道如何高效地避免和消除错误。
规范的命名可以降低错误的发生率。使用具有描述性的变量名和函数名有助于减少对代码的误解和错误的引入,从而提高代码的质量。提高代码的可读性,使代码更易理解。清晰、有意义的命名使开发者和维护者能够更迅速地理解代码的结构和功能,从而提高代码的可维护性。
数据类型的使用
- 整数 (
int
): 用于表示整数,如-5
,0
,42
。 - 浮点数 (
float
): 用于表示带有小数点的数值,如3.14
,2.0
。 - 字符串 (
str
): 用于表示文本数据,如'Hello'
,"Python"
。 - 布尔值 (
bool
): 用于表示逻辑值,只有两个取值,True
或False
。 - 列表 (
list
): 用于表示有序的可变序列,可以包含不同类型的元素,如[1, 'apple', 3.14]
。 - 元组 (
tuple
): 用于表示有序的不可变序列,类似于列表,但元素不可修改,如(1, 'banana', 2.71)
。 - 字典 (
dict
): 用于表示键值对的集合,如{'name': 'Alice', 'age': 25}
。 - 集合 (
set
): 用于表示无序、唯一元素的集合,如{1, 2, 3, 4}
。
例子1:整数和浮点数
代码语言:javascript复制# 整数
age = 25
print("年龄:", age)
# 浮点数
height = 1.75
print("身高:", height)
输出:
代码语言:javascript复制年龄: 25
身高: 1.75
在这个例子中,age
是一个整数变量,height
是一个浮点数变量,分别表示年龄和身高。输出语句将它们的值打印出来。
例子2:字符串
代码语言:javascript复制# 字符串
name = "张三"
print("名字:", name)
输出:
代码语言:javascript复制名字: 张三
name
是一个字符串变量,表示名字。输出语句将名字打印出来。
例子3:布尔值
代码语言:javascript复制# 布尔值
is_student = True
print("是否是学生:", is_student)
输出:
代码语言:javascript复制是否是学生: True
is_student
是一个布尔值变量,表示是否是学生。输出语句将布尔值打印出来。
例子4:列表
代码语言:javascript复制# 列表
grades = [90, 85, 92, 88]
print("成绩:", grades)
输出:
代码语言:javascript复制成绩: [90, 85, 92, 88]
grades
是一个列表变量,包含一组成绩。输出语句将整个列表打印出来。
例子5:元组
代码语言:javascript复制# 创建一个元组
coordinates = (3, 4)
# 访问元组中的元素
x = coordinates[0]
y = coordinates[1]
# 打印元组
print("坐标:", coordinates)
print("X 坐标:", x)
print("Y 坐标:", y)
输出:
代码语言:javascript复制坐标: (3, 4)
X 坐标: 3
Y 坐标: 4
在这个示例中,coordinates
是一个包含两个元素的元组,表示二维平面上的坐标。通过索引访问元组的元素,并且可以将整个元组打印出来。元组是不可变的,这意味着一旦创建,就不能修改其中的元素。
例子6:字典
代码语言:javascript复制# 字典
person = {"name": "Bob", "age": 30, "is_student": False}
print("个人信息:", person)
输出:
代码语言:javascript复制个人信息: {'name': 'Bob', 'age': 30, 'is_student': False}
person
是一个字典变量,包含个人信息。输出语句将整个字典打印出来。
例子7:集合
代码语言:javascript复制# 集合
unique_numbers = {1, 2, 3, 4, 5}
print("唯一数字集合:", unique_numbers)
输出:
代码语言:javascript复制唯一数字集合: {1, 2, 3, 4, 5}
unique_numbers
是一个集合变量,包含一组唯一的数字。输出语句将整个集合打印出来。
我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!