
一、初识 Python
Python 是一种计算机的程序设计语言,常常被用作新手入门的第一个编程语言
1、什么是编程语言
编程(动词),即编写程序,其实就是用代码告诉计算机去完成一系列任务。
语言(名词),就是进行沟通交流的表达方式
那么顾名思义,编程语言,就是一种程序代码的语言,有固定的语法规则,用于和计算机进行交流,
打个比方,这就像你在教一个新手如何做一道菜。你会详细地用中文告诉他每一步该怎么做:先洗菜,再切菜,然后热锅,最后烹饪。
同样地,编程也是把复杂的任务分解成简单的步骤,然后通过编程语言所对应的语法和规则,告诉计算机如何执行这些步骤。
Procedure MultiplyUsingLoop
Input: a, b
result = 0
abs_b = abs(b)
for i in range(abs_b):
result += a
if b < 0:
result = -result
return result
既然编程是把人类的思维转换成计算机能够理解的语言,那么为什么还会有 Python、C、C++、Java 等多种多样的语言呢?
那是因为计算机能够识别和执行的命令被称为指令,指令的格式是二进制码(只有 0 和 1 组成),但是程序员只用 0 和 1 来编程难度很大,这就让人类无法与计算机顺畅沟通。
因此,为了方便程序员编写程序,编程语言承担了二者的中间人,我们写的代码最终都会变成 CPU 能执行的机器指令(0和1),而翻译工具(编译器/解释器)就是完成这个转换的。
这个工具可以理解为翻译工具,即解释器、编译器等
2、Python 和 Pycharm
Python 只是一种计算机程序设计语言,它具有简单易学、可读性、可扩展的特点,使得 Python 成为最流行的编程语言
以下是不同编程语言来计算 1 + 2 的结果:
# Python
print(1 + 2)
/* Java */
public class Main {
public static void main(String[] args) {
System.out.println(1 + 2);
}
}
/* C++ */
#include <iostream>
using namespace std;
int main() {
cout << 1 + 2 << endl;
return 0;
}
可以看出来同样的功能,python 代码量是最少的。但是计算机还是不能直接运行这段代码,我们知道了 Python 语言所对应的语法和规则,但是计算机没有学习过这门语言啊,所以需要下载 Python 解释器到计算机上,然后才能运行这段代码。就相当于人类和计算机要学习同一门外语才能进行交流
而 Pycharm 是一个用于 Python 的集成开发环境(IDE),它提供了丰富的功能,如代码自动完成、错误检查、代码格式化、调试等等,使得 Python 的开发更加高效。
当然你也可以不用 Pycharm,用记事本也是可以的。就好比,拍照不管是用原相机还是用美颜相机,都会调用摄像头来进行拍照一个道理
大多数操作系统(如 Windows)默认不自带 Python,需要手动安装;而部分 Linux 和 macOS 系统可能预装了 Python,但版本不一定是最新的,建议根据开发需要安装官方版本。

总结一下:
1、程序员通过 Python 对应的语法和规则来编写程序(.py 文件)。
2、但是计算机并不认识你写的程序,需要下载 Python 这个解释器软件才能让 .py 文件成功运行(被翻译成指令)。
3、最后为了高效地编写程序,一般会用到 Pycharm 这个工具
二、如何编写和运行 Python 程序
这里就不涉及语法和规则了,体验下编程的感觉就行,在你安装好了 python 和 pycharm 的基础上执行以下步骤
1、记事本 + 命令行运行
1、新建一个 .py 文件,比如 test.py
2、右键打开方式选择记事本,在 test.py 文件中粘贴如下代码:
import math
import time
import sys
def main():
A = 0.0
B = 0.0
# 清屏的ANSI转义码
print("\x1b[2J", end="")
while True:
# 初始化数组
z = [0.0] * 1760
b = [' '] * 1760
j = 0.0
while j < 6.28:
i = 0.0
while i < 6.28:
c = math.sin(i)
d = math.cos(j)
e = math.sin(A)
f = math.sin(j)
g = math.cos(A)
h = d + 2
D = 1.0 / (c * h * e + f * g + 5.0)
l = math.cos(i)
m = math.cos(B)
n = math.sin(B)
t = c * h * g - f * e
x = int(40 + 30 * D * (l * h * m - t * n))
y = int(12 + 15 * D * (l * h * n + t * m))
o = x + 80 * y
N = 8 * ((f * e - c * d * g) * m - c * d * e - f * g - l * d * n)
if 22 > y > 0 and 0 < x < 80 and D > z[o]:
z[o] = D
# 确保N在有效范围内
idx = int(N) if N > 0 else 0
if idx >= len(".,-~:;=!*#$@"):
idx = len(".,-~:;=!*#$@") - 1
b[o] = ".,-~:;=!*#$@"[idx]
i += 0.02
j += 0.07
# 移动光标到屏幕顶部
print("\x1b[H", end="")
# 输出字符
for k in range(1761):
if k % 80 == 0:
print()
else:
print(b[k], end="")
A += 0.00004
B += 0.00002
# 控制帧率,避免输出过快
time.sleep(0.05)
# 刷新输出缓冲区
sys.stdout.flush()
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
# 捕获Ctrl+C,恢复终端设置
print("\x1b[0m")
sys.exit(0)
3、先在命令行中进入 test.py 文件所在的目录,然后在命令行中运行 test.py 文件:
# 首先切换到文件所在的目录,例如桌面
cd C:\Users\你的用户名\Desktop
# 然后运行程序
python test.py
除了命令行,你还可以右键文件直接选择 python 运行
4、运行结果

2、Pycharm 运行
1、新建项目

2、添加 .py 文件

3、粘贴代码并运行

三、一个程序从诞生到执行的过程
整个过程可以大体分为三步:
- 源代码转换为二进制指令
- 操作系统加载指令到内存
- CPU 逐行执行指令
1、从源代码到二进制指令
不管什么编程语言,对于计算机和人类来讲都是外语,计算机直接读是读不懂的,需要经历代码到二进制指令的转换过程。这个转换过程所用到的工具主要分为两种,编译和解释
编译:将源代码编译成二进制指令,然后保存成二进制文件,比如 C++ 的 .exe 文件
解释:将源代码解释成二进制指令,然后运行。比如 Python 的 .py 文件
以下是 C 语言对应的机器码的一个例子:

其中的第一行 d10043ff
就是一句机器码指令,只不过为了缩短长度,将 2 进制用了 16 进制表示。

2、程序载入内存
电脑为什么需要内存条?
为了运行速度更快,电脑中一共有两种存储硬件,分别是硬盘和内存条。内存条拥有更快的速度,所以被用来运行程序。这也是为什么运行的应用越多,内存占用就越高的原因
那既然内存条更快,为什么还需要硬盘呢?
那是因为硬盘存储的数据是永久的,并且便宜,而内存条存储的数据是临时的。你后台关闭一个应用,内存中的占用就会减少,一些数据就会丢失。

CPU 运行速度最快,为什么不直接把指令载入到 CPU 中运行呢?
CPU 贵啊,为了合理调用资源,内存起到了缓冲的作用
硬盘是“仓库”,程序不用时就放在里面;内存是“工作台”,程序要运行时才搬过来;CPU 是“工人”,只在工作台上干活。
更详细的内存介绍可以看看这篇文章:https://www.qladgk.com/blog/memory-layout-cpp
3、CPU 执行指令
CPU 如何执行指令涉及到计算机体系结构的核心知识(如寄存器、ALU、控制单元等),内容较为复杂,我们将在后续的文章中专门探讨。
四、一些其他问题
1、中文为什么不能编程
编程就是两个步骤:1、编写代码 2、翻译成二进制。那为什么不能直接用中文、英语、法语等表示代码然后翻译成二进制呢?专门去学习一种编程语言的语法规则不是多次一举吗?
那是因为像中文、英文等自然语言太复杂了。比如你想让程序输出“你好帅”,有多种的表示方法:
类型 | 表示方法 |
---|---|
傲娇版 | 夸我帅 |
礼貌版 | 请在屏幕上输出你好帅 |
自然语言的复杂程度不能让翻译官精准地翻译,相反,代码地表示方法往往比自然语言更简单、更清晰,翻译起来也更容易
编程语言的关键字(如 if, for)是设计好的、无歧义的符号系统,而自然语言的复杂性(一词多义、语法灵活)不利于这种精确的逻辑表达。
其实也有中文的编程语言,叫做易语言(写出来跟文言文一样)
2、单靠 0 和 1 真能存储信息吗
虽然只是两个简单地数字,但是通过不同地组合,0 和 1 就能存储任意信息
你们可以看下面的用二进制转中文看看下面的 0 和 1 表示什么信息
111001101000100010010001111001011001011010011100111001101010110010100010111001001011110110100000
二进制转中文在线工具:https://onetools.online/zh/binary-translator