第一节课:基础入门

课程介绍

Python10 行代码加密文件

——三节课让你弄清自己到底适不适合学习编程

针对人群: 零基础想学习 python,又怕自己学不会,怀疑自己是不是适合学习编程的童鞋。

这一节课主要是扫盲,很多同学可能连 python 运行环境都没有搭建好。

python 运行环境搭建

python 是一门解释型编程语言,python 代码是通过 python 解释器解释后交给计算机执行的。

所以 python 运行环境的搭建主要是安装 python 解释器。

python 版本区别

目前 python 有两个大的版本,2.X 和 3.X。2.X 是遗产,3.X 是未来。除非特殊情况,新手建议学习 3.X。

下载安装 python 解释器

访问 python 官网,下载解释器安装包。

注意按照操作系统下载对应版本。

image.png

下载后双击安装文件会出现如下界面

image.png
记得勾选添加环境变量,然后就是下一步下一步,一般情况下都会正常安装成功。

image.png

cmd 命令行工具

全黑的窗口,满屏的像瀑布一样流动的英文,这是电影中黑客出场的画面。

cmd 命令行工具就满足这个要求,在 windows 系统中,win 键 +R 键弹出运行窗口

image.png

输入 cmd 确定就会打开命令行工具。

一般情况会打开如下窗口
image.png
不同版本,可能会有配色的不同,但功能一致。

其实这就是一个名字为 cmd.exe 的程序,感兴趣的同学可以在电脑中找下它的位置。

它有一个很重要的作用就是能够通过程序名自动调用对应的程序,而不需要去找到可执行文件双击执行。

例如,可以在命令行键入 notepad 回车,你会发现居然打开了记事本。
image.png

那是因为记事本这个程序的程序名就是 notepad.exe,机灵的小可爱就会联想 QQ 的程序名是 qq.exe 那么,那么在命令行中输入 QQ 是不是也可以打开 QQ 呢?

结果多半如下:
image.png

这是为什么呢?
其实 cmd 在接收到用户输入的命令后,会去电脑中搜索同名的程序或者批处理等文件,但是为了效率,它不会查找每个文件夹。

那它会去哪些文件夹中搜索呢?

环境变量

环境变量其实是一系列常用程序所在路径的集合,记事本程序的路径存在默认的环境变量中所以可以通过命令行打开,QQ 程序的路径不在环境变量中,所以打不开。

windows 系统设置环境变量的步骤如下:
右键【我的电脑】-【属性】-【高级系统设置】-【环境变量】
image.png

在用户变量中找到环境变量 path,如果没有就新建一个 path 变量。

点击编辑,将 QQ 程序路径添加到 path 中。
image.png
然后重新打开命令行工具应用新的环境变量,再次键入 qq 你就可以打开 QQ 啦。

如果在安装 python 解释器的时候忘记勾选添加环境变量,也可以通过手动设置环境变量,然后在命令行中就可以运行 python 命令啦。

在命令行中键入 python 命令,出现如下窗口表示运行环境搭建成功。
image.png

python 代码的运行

python 代码的运行方式有两种:

交互式

在命令行窗口输入命令

python

进入 python 解释器交互式客户端,在窗口中输入任意 python 代码,客户端窗口都会立即返回运行结
果,当关闭客户端窗口后,代码不会保存。这种方式一般用来进行测试,不是正式的运行方式。
image.png

脚本式

任意文本编辑工具都可以进行 python 代码的编写 ,在桌面新建一个文本文档,写入如下代码

print('hello world')

然后保存(尽量不要使用记事本直接编辑代码)。现在这个文本文档就是一个 python 的源代码文件,通
常称为 python 脚本文件,通常我们会将 python 脚本文件的后缀改为 .py 。

python 代码本质上是通过 python 解释器解释成机器码后交由计算机执行的。

在命令行输入命令

python 脚本文件路径

就可以运行对应的脚本代码。
image.png

练习作业

搭建好 python 运行环境后编写如下脚本然后运行试试看。

from turtle import *
color('red', 'yellow')
begin_fill()
while True:
    forward(200)
    left(170)
    if abs(pos()) < 1:
        break
end_fill()
done()

注意每层缩进都是 4 个空格。

文件概述

什么是文件

计算机文件是一个存储在存储器上的数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象。用文件形式组织和表达数据更有效也更为灵活。文件包括两种类型:文本文件和二进制文件。

文件本质上都是存储在存储器上的二进制数据。

使用 HexEditor 可以以 16 进制的方式打开任何文件。

image.png

特别的是文本文件遵循统一的字符编码,在打开时,计算机会根据字符编码解析成编码表上对应的字符。

二进制文件和文本文件本质上没有区别,只是没有统一的编码,需要根据特定的程序进行解析和运行。

无论是文本文件还是二进制文件都可以用"文本文件方式"和"二进制文件方式"打开,打开后的操作不同。

字符编码

计算机底层只能表示二进制信息,不能直接表示文字。计算机显示给我们看的文字可以看做是很小的一张张字符的图片。但如果文字都以图片进行存储和传输,图片体积非常大,从而效率会变得很低。

所以计算机科学家将这些单个字符图片放到一个文件中,这个文件就是字体文件。再给每个字符一个编号,存储传输时就用字符的编号。这个编号表就是字符编码(简单这么理解)。

文本文件存储的就是每个字符的编号,计算机在打开文本文件时,会根据指定的编码,去编码表中查询一个一个的字符,再渲染给用户。

ascii 码

因为历史原因,字符编码有很多。最先发明的是 ascii 码。

总共 127 个字符,因此使用一个字节(8 位二进制)来表示,也即是一个字符占一个字节的大小。
image.png

在记事本中键入 abc123+-*/,然后使用 HexEditor 打开后发现跟上面的编码表是一致的。
image.png

gb2312

可以看到 ascii 码里只有英文字母和常见字符,没有中文,以及世界上其他国家的文字。随着计算机的发展,各国都创建了自己国家的计算机字符编码。

1980 年中国发布了 gb2312, GB2312 是一个简体中文字符集,由 6763 个常用汉字和 682 个全角的非汉字字符组成。

gb2312 使用两个字节表示一个汉字。

通过字符串的 encode 方法可以根据字符编码进行编码

'中'.encode('gb2312')

b'\xd6\xd0'

gbk

GB2312 的出现,基本满足了汉字的计算机处理需要,但对于人名、古汉语等方面出现的罕用字,GB 2312 不能处理,这导致了后来 GBK 及 GB18030 汉字字符集的出现。

GBK 即汉字内码扩展规范,K 为扩展的汉语拼音中“扩”字的声母。GBK 编码标准兼容 GB2312,共收录汉字 21003 个、符号 883 个,并提供 1894 个造字码位,简、繁体字融于一库。

gbk 也是使用两个字节表示一个汉字。

'中'.encode('gbk')

b'\xd6\xd0'

'囙'.encode('gb2312')

UnicodeEncodeError Traceback (most recent call last)

in
----> 1 '囙'.encode('gb2312')

UnicodeEncodeError: 'gb2312' codec can't encode character '\u56d9' in position 0: illegal multibyte sequence

'囙'.encode('gbk')

b'\x87\xe0'

unicode

世界上存在着多种编码方式,同一个编码值,在不同的编码体系里代表着不同的字。要想打开一个文本文件,不但要知道它的编码方式,还要安装有对应编码表,否则就可能无法读取或出现乱码。

我上大学时玩电脑游戏最大的问题就是乱码。

以日文的编码方式创建一个文本文件写入 やめて,然后用记事本打开会显示如下:
image.png

这个问题促使了 unicode 码的诞生。

unicode 将世界上所有的符号都纳入其中,无论是英文、日文、还是中文等,大家都使用这个编码表,就不会出现编码不匹配现象。每个符号对应一个唯一的编码,乱码问题就不存在了。

Unicode 固然统一了编码方式,但是它的效率不高,比如 UCS-4(Unicode 的标准之一)规定用 4 个字节存储一个符号,那么每个英文字母前都必然有三个字节是 0,这对存储和传输来说都很耗资源。

将之前写有 abc123+-*\ 的文件用记事本另存为 unicode 会发现文件的体积大了一倍。(本来应该是 4 倍,windows 做了优化)
image.png

image.png

utf-8

为了提高 Unicode 的编码效率,于是就出现了 UTF-8 编码。UTF-8 可以根据不同的符号自动选择编码的长短。比如英文字母可以只用 1 个字节就够了。"汉"字的 Unicode 编码是 U+00006C49,然后把 U+00006C49 通过 UTF-8 编码器进行编码,最后输出的 UTF-8 编码是 E6B189。utf-8 中汉字使用 3 个字节存储。

'a'.encode('utf-8')

b'a'

'中'.encode('utf-8')

b'\xe4\xb8\xad'
注意为了统一 python3 在内存中所有的字符都采用 unicode。

1 操作
877649301 在 2020-09-11 13:55:03 更新了该帖
7 回帖
请输入回帖内容 ...
  • zmy 1 评论

    图片.png图片.png

    666
    877649301
  • yang. 1 评论

    image.png

    666 都用 vs 啦
    877649301
  • hopexuexia 1 评论

    image.png

    666 ,脚本名尽量用英文,养成习惯
    877649301
  • hopexuexia

    image.png

  • 13830069772 1 评论

    图片.png

    666
    877649301
  • ArielTan

    一、模仿编写,不理解的地方有 1,为什么 import*,import* 表示什么意思

    image.png

    二、改编

    这个存在问题,不知道如何解决,图形里面的颜色不知道怎么填充

    image.png

    1 回复
  • 877649301

    import * 是为了方便,导入 turtle 模块下所有的函数,变量,类。填充颜色具体你需要去看下 turtle 文档 https://docs.python.org/3/library/turtle.html

    image.png

    from turtle import *
    bgcolor('lightblue')
    color('purple', 'green')
    begin_fill()
    speed(10)
    for _ in range(50):
        forward(200)
        left(170)
        if abs(pos()) < 1:
            break
    end_fill()
    done()
    
    
    
    1 操作
    877649301 在 2020-08-26 17:22:08 更新了该回帖
请输入回帖内容 ...