计算机基础 数据类型 流程控制 字符编码 文件操作

Posted almira998

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机基础 数据类型 流程控制 字符编码 文件操作相关的知识,希望对你有一定的参考价值。

计算机基础 数据类型 流程控制 字符编码 文件操作

一、关于计算机、编程语言、数据类型、及运算符

1.关于计算机

计算机就是我们平时叫的电脑(computer)其实就是\'通电的大脑\'
所以它的工作肯定离不开电 而电信号只有高低电平两种状态(0 and 1)
显而易见 计算机只认识数字0和1

2.关于进制数

二进制:0 1
八进制:0 1 2 3 4 5 6 7
十进制:0 1 2 3 4 5 6 7 8 9
16进制:0 1 2 3 4 5 6 7 8 9 a b c d e f

3.关于单位换算

比特位(bit) 1 bit
8 bit = 1 bytes(字节)
1024bytes = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB

4.计算机五大组成部分

控制器		控制计算机各个硬件的工作
运算器		数学运算 逻辑运算
存储器		短期记忆即内存 长期记忆即硬盘
输入设备    接受外界信息 鼠标 键盘 触摸屏
输出设备    给外界传递信息 显示屏 打印机 音响
# 控制器 + 运算器 = CPU(中央处理器)
\'CPU:Central Processing Unit\'

5.计算机三大核心硬件

CPU		计算机中真正干活的部分(程序想要必须要有CPU参与)
内存	   存取数据速度极快 主要与CPU配合使用 相遇短期记忆
硬盘	   能够长久保存数据 相当于长期记忆
内存容量 2GB 4GB 8GB 16GB
硬盘容量 500GB~~2TB
为什么不直接砍掉内存让CPU直接跟硬盘交互呢?
首先虽然内存容量小但是运行速度非常快 无法跟硬盘对比
其次就算让硬盘跟CPU交互 运行速度很慢满足不了需求
所以让内在中间做桥接作用 这样既能提高效率也能保证数据保存
保存数据其实就是把内存的数据刷到硬盘当中的过程
目前有两种保存数据机制
方式1:实时检测文档变化 一旦有变化就进行保存操作
方式2:循环定时任务 每个一段时间进行保存操作
操作系统:控制 协调 管理 计算机各个硬件的工作
由于计算机各个硬件几乎一致 所以操作计算机各个硬件的代码也几乎相同 为了避免重复造轮子 就出来有个人出来专门干这个活儿 微软Windows

PC端常见的操作系统:Windows macOS Linux
移动端常见操作系统:Android IOS 鸿蒙

6.编程与编程语言

什么是编程?
# 人与计算机之间的交流的媒介
什么是编程语言?
# 程序员将自己的思维逻辑以及想法用计算机能读懂的语言写下来的过程
编程语言的分类?
编译型语言	C++ 一次性翻译
解释型语言	Python 一句一句的翻译
编程语言的发展史?
机器语言	直接用二进制与计算机交流
汇编语言	用英语字母代替一串二进制
高级语言	用英语和符号与计算机交流

7.Python解释器

Python发展历史?
时间	发明于1989年 公开发行于1991年
国家	荷兰
人物	Guido 龟叔
Python解释器?
pyhon1.x	初期版本几乎不用
pyhon2.x	python2.7(2020年以后不再维护更新)
pyhon3.x	python3.6  python3.8
下载官网:https://www.python.org/downloads/windows/
在CMD中使用python方法步骤?
windows+r
输入cmd回车
切换盘符 D:
切换目录 cd python38
运行解释器 python
退出解释器 exit()
退到上一层目录 cd ..	
运行Python的三种方式?
cmd直接运行
解释器命令运行
IDE工具运行
IDE工具的分类?
sunline
vscode
pycharm

8.关于变量名

什么是变量?什么是常量?
变量与常量就是为了让程序员具备事物状态的能力
变量是记录变化的事物状态
常量是记录固定的事物状态
三个注意事项?
同一个数据值可以绑定多个变量名
复制符号也可以做变量 这种情况下先找该变量名绑定的数据值
一个变量名同一时间只能绑定一个数据值
变量名的命名规范?
不建议用中文起变量名 太low了而且容易报错
不建议用汉语拼音起变量名 不高级 太low了
变量名只能出现字母、数字、下划线且不能以数字开头
变量名尽量做到见明知意且不得与关键字冲突
变量的命名风格?
下划线式	name_from_userinfo = \'almira\'
大驼峰体	NameFromUserinfo = \'almira\'
小驼峰体	nameFromuserInfo = \'almira\'
三种注释语法?
# 单行注释
\'\'\'多行注释\'\'\'
"""多行注释"""

8.关于垃圾回收机制

首先要记住以下12个字

引用计数
标记清楚
分代回收

二、常用的基本数据类型及内置方法

1.八大数据类型概览

整型int
浮点型float
字符串str
列表list
字典dict
布尔值bool
元组tuple
集合set

2.八大数据类型详细介绍

(1)整型相关基本知识

# 1.整型int
定义:其实就是整数
应用场景:年龄 年份 学生人数...
代码实现:
	age = 18
    year =2023
    stu_num = 56

(2)整型相关内置方法

# 浮点型可以直接转 字符串必须满足内部是纯数字才可以
类型转换	int(其他数据类型)
# 十进制转其他进制
print(bin(100))  # 0b1100100  0b 为二进制
print(oct(100))  # 0o144  0o 为八进制
print(hex(100))  # 0x64  0x 为十六进制

(1)浮点型相关基本知识

# 2.浮点型flaot
定义:其实就是小数
应用场景:身高、体重、薪资...
代码实现:
	height = 1.56
    weight = 48.5
    salary = 3.1

(2)浮点型相关内置方法

# 字符串里面可以允许出现一个小数点 其他都必须是纯数字
类型转换	float(其他数据类型)	

(1)字符串相关基本知识

# 3.字符串str
定义:引号引起来的部分就是字符串
应用场景:姓名、地址、爱好...
代码实现:
	name = \'almira\'
    addr = \'xinjiang\'
    hobby = \'study\'
    
定义字符串的四种方式
    \'\'
    ""
    \'\'\' \'\'\'
    """ """

(2)字符串相关内置方法

# 可以转任意数据类型(只需要在前后加引号即可)
类型转换	str(其他数据类型)
# 起始位置0开始 超出范围报错 支持负数从尾部开始
索引取值	print(s1[0])
# 顾头不顾尾 默认是从左往右
切片操作	print(s1[1:5])
# 最常用用的是括号里面为空的情况 可以移除首尾的空格 写登录注册时最常用
移除字符串首尾指定的个数	username = input(\'username>>>:\').strip()
# 按照某个特定字符来切除 结果为列表
切割字符串中指定的字符		print(res.split(\'|\'))
# 其实有四种玩儿法 最常用的是以下方法
格式化输出	res = f\'my name is name my age is age\'

(1)列表相关基本知识

# 4.列表list
定义:其实就是可以存储多个以及任意数据类型且可以非常方便的取
应用场景:存储多个数据值且将来可能需要单独取其中一些数据
代码实现:
	name_list = [\'almira\', \'lina\', \'linda\', \'bella\']
    
"""
可以索引取值 是从0开始
格式:列表变量名[索引值]
name_list[0] 结果是almira
"""

(2)列表相关内置方法

# 能够被for循环的数据类型都可以转换成列表 如字符串、字典、元组、集合
类型转换	list(其他数据类型)
# 起始位置0开始 超出范围报错 支持负数从尾部开始
索引取值	print(l1[0])
# 顾头不顾尾 默认是从左往右
切片操作	print(l1[0:5])
统计列表中数据值的个数		print(len(l1))
# 索引对应的数据值改成1232
数据值修改	l1[0] = 1232
# append尾部添加、insert索引位置插入、extend扩展列表
添加数据值	.append(\'\') .insert(0, \'almira\') .extend(l1)
# del通用的删除关键字、remove索引位置移除、pop括号为空默认弹出末尾
删除数据	del l1[2] .remove(22) .pop(3)
# sort为默认升序括号里传参数reverse=True为降序
列表排序	.sort()
# 统计列表里面某个数据值的出现次数
统计次数	.count(111)
# reverse关键字可以颠倒顺序
颠倒顺序	.reverse(l1)

(1)字典相关基本知识

# 5.字典dict
定义:能够非常精确的表达数据值的含义
形式:大括号括起来 内部可以放多个数据 K:V键值对
应用场景:以后的编程最常用的数据类型
代码实现:
	info_dict = 
        \'username\': \'almira\',
        \'age\': 18,
        \'hobby\': \'study\'
    
   
"""
K是key 键
V是value 值
每个键值对之间用逗号隔开
可以按K取值
格式:字典变量名[\'键\']
info_dict[\'username\'] 结果是almira
"""

(2)字典相关内置方法

# 字典类型转换一般不用关键字 需要自己手动转换
类型转换	dict()
# K不存在时会直接报错
按K取值	print(user_dict[\'username\'])
# get方法推荐使用 键不存在时报None
get取值	print(user_dict.get(\'username\'))
# 修改键所对应的值
修改数据	user_dict[\'username\'] = \'almira\'
# 键不存在时新增键值对
新增键值对	user_dict[\'age\'] = 18
# 字典所对应的变量名前面加del或者点pop
删除数据	del .pop(\'键\')
# 统计出字典所有的键值对
统计数据	print(len(user_dict))
# keys一次性获取所有的键values一次性获取所有的值 items一次性获取所有的键值对
字典三剑客	.keys() .values() .items()

(1)布尔值相关基本知识

# 6.布尔值bool
定义:用来判断事物的对错(True False) 只要用于流程控制中
应用场景:python中所有的数据类型都自带布尔值 很多程序中提供的注销账户的功能 其实底层并没有删除数据 而是修改了数据的状态
代码实现:存储布尔值的变量名一般推荐使用is开头 
	is_delete = False 
    
    
"""
布尔值为False的数据值:0 None \'\' [] 
布尔值为True的数据值:除了以上以外都是
"""

(2)布尔值相关内置方法

布尔值没有相关的内置方法

(1)元组相关基本知识

# 7.元组tuple
定义:也成\'不可变\'的列表 元组内索引绑定的内存地址不能修改
形式:小括号括起来 内部存放多个数据值 用逗号隔开 就算元组内只有一个数据值也要加上逗号 可以是任何数据类型
代码实现:
	t1 = (11, 22,  \'almira\')

    
# 一道练习题来袭
    t1 = (11, 22, [111, 222])
    t1[2][1] = 666
    print(t1)
    """
    A.直接报错
    B.(11, 22, [111, 666])
    C.不知道 超出了我的认知
    """
    # 答案:B

(2)元组相关内置方法

# 支持for循环的数据类型都可以转成元组
类型转换	tuple()
# 如下内置方法上面总结过而且完全一样 所以只列出内置方法名称
索引取值
切片操作
间隔方向
统计个数
统计次数
统计指定
必须逗号
不可变的
不能新增
不能删除

(1)集合相关基本知识

# 8.集合set
定义:集合只能用于去重与关系运算 里面的数据类型只能是不可变类型
形式:大括号括起来 内部存放多个数据值 用逗号隔开 
代码实现:
	s1 = 1, 2, 3, 3, 4, 6
    
    
"""
定义空字典与空集合
  默认是字典
set() 默认是空集合
"""

(2)集合相关内置方法

# 必须是不可变类型(整型 浮点型 字符串 元组) 集合是无序且无索引概念
类型转换	set()
# 集合关键字本身就是去重 集合不允许出现重复的数据值
去重方法	print(set)
# &求共同 -求独有 |求所有 ^求各自多有 用法是两个集合用这些符号链接即可
关系运算	& - | ^

三、流程控制理论

流程控制>>>:控制事物的执行流程

事物执行流程有三种类型 在编程过程中三者大部分情况下是混着使用

  • 顺序结构
  • 分支结构
  • 循环结构

关于流程控制必回基础知识

python中使用代码的缩进来表示代码的从属关系
并不是所有的代码都可以拥有缩进的代码(子代码)
如果有多行子代码属于同一个父代码 那么保证同等缩进量
python中针对缩进量没有具体的要求 但是推荐使用四个空格(tab键)
当某一行代码需要编写子代码的时候 那么这一行代码的结尾肯定要加冒号
相同缩进量的代码彼此之间平起平坐 按照顺序结构依次执行

1.if 分支结构

# 1.单if分支结构

if 条件:
    条件成立之后才会执行的代码
    
    
username = input(\'请输入您的用户名>>>:\')
if username == \'almira\':
    print(\'美女你好\')
# 2.if...else...分支结构

if 条件:
    条件成立之后执行的代码
else:
    条件不成立之后执行的代码
    
    
if username == \'almira\':
    print(\'美女你好\')
else:
    print(\'滚蛋!!\')
# 3.if...elif...else分支结构

if 条件1:
   条件1成立之后执行的子代码
elif 条件2:
    条件1不成立 条件2成立执行的子代码
elif 条件3:
    条件1和2都不成立 条件3成立执行的子代码
else:
    上述条件都不成立 执行的子代码
    
    
score = input(\'请输入您的成绩>>>:\')
score = int(score)  # 将字符串转换为整型
if score >= 90:
    print(\'excellent\')
elif score >= 80:
    print(\'very goog\')
elif score >=70:
    print(\'good\')
else:
    print(\'oops, failed\')
# if 的嵌套使用

age = 18
height = 180
weight = 70
is_beautiful = True
is_success = False
username = \'tom\'
if username == \'tom\':
    print(\'tom find the target\')
    if age < 30 and height >160 and weight < 80 and is_beautiful:
        print(\'hi handsome boy can i have ur wechat?\')
        if is_success:
            print(\'see movie have dinner...\')
        else:
            print(\'sry i have no time\')
    else:
        print(\'sry wrong person maybe\')
else:
    print(\'failed maybe\')

2.while循环

循环结构就是让一些代码反复执行

while 条件:
    条件成立之后执行的子代码(循环体代码)
  1. 先判断条件是否成立
  2. 如果成立则执行循环体代码
  3. 循环体代码执行完毕之后再次回到判断处 继续判断条件是否成立
  4. 如果成立 则继续执行循环体代码
  5. 按照上述规律依次执行 当条件不成立时才会结束循环体代码的执行
count = 1
while count < 5:
	print(\'hello world\')
	count += 1
print(\'复习使我快乐\')
break  # 结束循环
	while
continue  # 继续循环
	while
# 关于死循环
真正的死循环是一旦执行 CPU功能消耗会急速上升 
直到系统采取紧急措施 尽量不要让CPU长时间不间断运算

# 关于嵌套及全局标志位
一个break只能结束它所在的那一层循环
有几个while的嵌套 想一次性结束 就应该写几个break
如果不想反复写break 可以使用全局标志位
is_flag = True
while is_flag:
    username = input(\'username>>>:\')
    password = input(\'password>>>:\')
    if username == \'jason\' and password == \'123\':
        while is_flag:
            cmd = input(\'请输入您的指令>>>:\')
            if cmd == \'q\':
                is_flag = False
            print(\'正在执行您的指令:%s\' % cmd)
    else:
        print(\'用户名或密码错误\')

3.for循环

for循环能够做到的事情while都可以做到 只不过for循环在一些场景下使用更简单

主要场景:循环获取存储多个数据的数据内部数据值
 
for循环语法结构中的变量名如何命名
	见名知意如果遍历出来的数据值没有具体的含义可以使用常用的
     i j k item v
语法结构:
	for 变量名 in 待遍历的数据:
 		  for循环体代码
使用案例:
    name_list = [\'almira\', \'lina\', \'lida\', \'bella\']
    for i in name_list:
        print(i)

4.rage方法

range可以简单的理解为是帮我们产生一个内部含有多个数字的数据

for i in range(101):  # 起始位置为0 终止位置为100 
    print(i)  # [0,.......100]
 
for i in range(10, 20):  # 第一个为起始位置 第二个终止位置
    print(i)
    
for i in range(1, 20, 2):  # 第三个数为等差值 默认不写为1
    print(i)
 

在python2中
range() 直接产生一个列表 内部含有多个数值
xrange() 其实就是python3里面的range
在python3中
range() 类似于一个工厂 不会占用太多的内存空间 要就生产

四、字符编码理论以及实操

1.字符编码理论部分

字符编码只针对文本数据
计算机内部只认识数字0和1
计算机可以敲出各种字符的原因是内部存在一个数字跟字符的对应关系
字符编码本就是用来存储该关系的地方

字符编码的发展史
一家独大:ASCII码 记录英文字母跟数字的对应关系 用9bit表示一个英文字符
群雄割据:GBK 记录了英文、中文跟数字的对应关系 中文用16bit 英文8bit 日本shifts_JIS 韩国Euc_kr
天下一统:Unicode万国码 兼容所有语言 utf系列:utf8 英文一个字节 中文三个字节

2.字符编码实操部分

针对乱码 解决方案是切换慢慢试即可

编码:将人类语言转换成计算机能读懂的数据 字符串.encode()
解码:将计算机能读懂的数据转换成人类语言 bytes类型数据.decode()

python2默认的编码是ASCII码 
文件头加 # encoding:utf8 
字符串前面加 u\'\' 引号里面写字符串即可

python3默认的编码是utf8系列(Unicode)

五、文件操作

1.文件操作理论

# 文件的概念
文件就是系统暴露给用户操作硬盘的快捷方式
双击一个文件其实就是从硬盘将数据加载到内存
保存文件其实就是将内存中的数据刷到硬盘当中
# 代码打开文件的两种方式

方式一:为了避免撬棍跟一些字母组合出现特殊含义前面加 r\'\'
f = open(文件路径,读写模式,encoding=\'utf8\')  # 打开文件
f.close()  # 关闭文件

方式二:with方法支持一次性打开多个文件 自动调用close方法关闭文件
with open(\'a.txt\', \'r\', encoding=\'utf8\') as f:
    with子代码块

2.文件读写模式

\'r\'	read 只读模式 只能读不能写 rt
# 文件路径不存在直接报错 存在就正常运行
with open(r\'a.txt\', \'r\', encoding=\'utf8\') as f:
    print(f.read())  
\'w\' write 只写模式 只能写不能读 wt
# 文件路径不存在自动创建 存在就先清空内容再自己重新写入 换行符要自己添加
with open(r\'a.txt\', \'w\', encoding=\'utf8\') as f:
    f.write(\'的确解决遗忘的最佳方法就是重复这就是广告效应\\n\')
\'a\' append 只追加模式 文件末尾添加数据 at
# 文件路径不存在自动创建 存在就末尾自动追加内容
with open(r\'a.txt\', \'a\', encoding=\'utf8\') as f:
    f.write(\'在复习过程中意识到了哪怕是非常难的知识点多复习就可以搞定\') 

3.文件操作模式

# t	文本模式(text) 默认模式 rt wt at
只能操作文本文件
读写都是以字符为单位
需要指定encoding参数 
如果不知道则会采用计算机默认的编码
# b	二进制模式(bytes) 不是默认模式 需要自己指定 rb wb ab
可以操作任意类型的文件
读写都是以bytes为单位
不需要指定encoding参数 
因为它已经是二进制模式了 不需要编码

4.文件诸多方法

# 1.read() 	
一次性读取文件内容 并且光标停留在文件末尾 继续读取则没有内容
并且当文件内容比较多的时候 该方法还可能会造成计算机内存溢出
括号内还可以填写数字 在文本模式下 表示读取几个字符
# 2.readline()
一次只读一行内容
# 3.readlines()
一次性读取文件内容 会按照行数组织成列表的一个个数据值
# 4.readable()
判断文件是否具备读数据的能力
# 5.for循环
一行行读取文件内容 避免内存溢出现象的产生
# 6.write()
写入数据
# 7.writelines()
接收一个列表 一次性将列表中所有的数据值写入
# 8.writeable()
判断文件是否具备写数据的能力
# 9.flush()
将内存中文件数据立刻刷到硬盘 等价于ctrl + s

4.文件光标移动

with open(r\'a.txt\', \'rb\') as f:
    print(f.read())
    f.seek(0,0)
    print(f.read())
    f.seek(0, 0)
    print(f.read())
    # print(f.read(2).decode(\'utf8\'))
    # f.seek(-1, 2)
    # print(f.tell())  # 返回光标距离文件开头产生的字节数
    # print(f.read(3).decode(\'utf8\'))
    
seek(偏移量,模式)
offset 偏移量只能以字节为单位 
whence 模式有三种 0表示开头 1表示当前位置 2表示文件末尾

tell()
返回光标距离文件开头已经移动了多少个字节
import time

with open(r\'a.txt\', \'rb\') as f:
    f.seek(0, 2)
    while True:
        line = f.readline()
        if len(line) == 0:
            # 没有内容
            time.sleep(0.5)
        else:
            print(line.decode(\'utf8\'), end=\'\')

6.文件内容修改

硬盘写数据可以看成是在硬盘上刻字 一旦需要修改中间内容 则需要重新刻字
因为刻过的字不可能从中间再分开

硬盘删除数据的原理:不是直接删除而是改变状态 等待后续数据的覆盖才会被真正删除

# 修改文件内容的方式1:覆盖写
with open(r\'a.txt\', \'r\', encoding=\'utf8\') as f:
    data = f.read()
     
with open(r\'a.txt\', \'w\', encoding=\'utf8\') as f1:
    f1.write(data.replace(\'jason\', \'tony\'))
# 修改文件内容的方式2:换地写
\'\'\'先在另外一个地方写入内容 然后将源文件删除 将新文件命名成源文件\'\'\'
import os

with open(\'a.txt\', \'r\', encoding=\'utf8\') as read_f, \\
        open(\'.a.txt.swap\', \'w\', encoding=\'utf-8\') as write_f:
    for line in read_f:
        write_f.write(line.replace(\'tony\', \'kevinSB\'))


os.remove(\'a.txt\')  # 删除a.txt
os.rename(\'.a.txt.swap\', \'a.txt\')  # 重命名文件

以上是关于计算机基础 数据类型 流程控制 字符编码 文件操作的主要内容,如果未能解决你的问题,请参考以下文章

第二篇:流程控制数据类型字符编码文件处理

python基础之字符编码及文件操作

Python培训需要学习哪些内容

python培训需要多久?

2019 08 08 字符编码,文件操作

python学科课程分几个部分?