PythonDay3Advance
PythonDay3Advance
运算符
位运算符
进制:
将整数分了几种进制表示法
二进制:由0,1构成,逢2进1,以0b开头 八进制:由0,1,2,3,4,5,6,7构成,逢8进1,以0开头 十进制:由0,1,2,3,4,5,6,7,8,9构成,逢10进1,默认就是10进制 十六进制:由0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,逢16进1,以0x开头
如何从其他进制转10进制
十进制转十进制 十进制:12345 十进制:12345 12345 = 10000 + 2000 + 300 + 40 + 5 = 1*10^4 + 2*10^3 + 3*10^2 + 4*10^1 + 5*10^0 = 10000 + 2000 + 300 + 40 + 5 = 12345 规律口诀:系数*进制的幂次方之和 二进制:0b10011 10011 => 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 16 + 2 + 1 = 19
如何从10进制转其他进制
除基取余,直到商为0,余数反转
十进制:108 二进制:0b1101100
108/2 = 54 ......0
54/2 = 27 ......0
27/2 = 13 ......1
13/2 = 6 ......1
6/2 = 3 ......0
3/2 = 1 ......1
1/2 = 0 ......1
如何从其他进制转其他进制
拆分组合法【只适合二进制转八进制或者16进制】
二进制转八进制 从右向左,每3位一组合,每个组合算自己的10进制结果,拼接
二进制转十六进制 从右向左,每4位一组合,每个组合算自己的10进制结果,拼接
二进制:0b1101100 八进制:0154
100->4
101->5
001->1
二进制:0b1101100
十六进制:0x6c
1100->12
0110->6
先转10进制,再转其他进制
原码 反码 补码
在计算机所有数据的运算采用的是补码进行的
原码 反码 补码均都是数据的二进制的形式
原码:
正数:数值位就是二进制的表现形式,最高位符号位就是0
负数:数值位和正数保持一致,但是最高符号位为1 举例:3的原码:
1. 3的二进制:11
2. 3的原码: 00000011
-4的原码:
1. 4的二进制:100
2. -4的原码: 10000100 反码:
正数:和原码保持一致
负数:符号位原码保持一致,数值位按位取反
举例:3的反码: 00000011
-4的反码:11111011 补码:
正数:和原码保持一致
负数:是反码的基础之上末尾+1 举例:3的补码: 00000011
-4的补码:11111100 举例:-4+3 = -1
-4的补码+3的补码:
00000011
+ 11111100
-----------
补码:11111111
我们最终看到的结果是转原码再转10进制之后的结果 -1 已知补码求原码:
符号位 数值位
补码: 1 1111111
反码: 1 1111110
原码: 1 0000001
--------------------------
数值位转10进制:1,又因为最高位是1,所以是负数,索引最终的结果是 -1
& | 与 | 两个位都为1时,结果才为1 |
---|---|---|
| | 或 | 两个位都为0时,结果才为0 |
^ | 异或 | 两个位相同为0,相异为1 |
~ | 取反 | 0变1,1变0 |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 |
>> | 右移 | 各二进位全部右移若干位,高位补0或符号位补齐 |
3的补码: 00000011
-4的补码:11111100
a = 3 b = -4
print(a & b) # 0 有0则0
00000011
& 11111100
------------------
00000000
print(a | b) # -1 有1则1
00000011
| 11111100
-----------------
补码:11111111
已知补码求原码
补码: 11111111
反码: 11111110
原码: 10000001
----------------
结果:-1
print(a ^ b) # -1 相同则0,不同则1
00000011
& 11111100
-----------------
补码:11111111
已知补码求原码
补码: 11111111
反码: 11111110
原码: 10000001
----------------
结果: -1
print(~ b) # 3
~ 11111100
-------------
00000011
12的补码: 00001100
-12的补码:11110100
print(12<<2) 左移,左边多的位丢弃,右边用0补齐,左移n位相当于*2^n
00001100
左移2位 (00)00110000
--------------------
00110000 -> 32+16 = 48
print(-12<<2) # -48
print(12>>2) 右移,右边多的位丢弃,左边若最高位是0就用0补齐,若最高位是1就用1补齐,右移相当 于除以2^n次方
00001100
右移2位 00000011(00)
---------------------------
结果:3
print(-12>>2) # -3
文件操作
常见的编码表
- ACSII码表 采用一个字节存储键盘上任意一个字符
需要记忆的符号对应的ASCII码值:
'0' - 十进制:48 - 二进制:00110000
'A' - 十进制:65 - 二进制:01000001
'a' - 十进制:97 - 二进制:01100001
- GB2312 | GBK 中国简体汉字字符表示,一个汉字字符占用2个字节
- BIG-5 大5码 用于表示中国台湾香港繁体字
- unicode 万国码,表示一个字符占用4个字节 python****默认的编码
- utf-8 是unicode编码的压缩格式,表示一个字符占用3个字节
体验编码
编码
# 编码
str1 = '今天晚上我们一起去爬大蜀山吧'
b1 = str1.encode('UTF-8')
print(b1)
解码
# 解码
s2 = b1.decode('UTF-8')
print(s2)
文件操作的步骤:
- 打开文件【创建与系统资源的连接】
- 操作文件【写 读】
- 关闭文件【释放|关闭系统资源的连接】
写操作open()
方式1:以字节的方式覆盖写数据到文件中 wb模式
f = open('test1.txt', mode='wb') # 若写数据目标文件不存在,则自动创建
# 写数据到文件中
f.write('黄沪生是33期最帅的男人!'.encode('UTF-8')) # 以指定编码变成字节
f.close()
路径分类
相对路径:以项目作为根路径进行查找
绝对路径:[完整路径|带盘符的路径]
f = open('E:\\Projects\\PycharmProjects\\bigdata33\\day04\\data\\test1.txt', mode='wb') # 写数据到文件中
f.write('黄沪生是33期最帅的男人!'.encode('UTF-8'))
f.close()
方式2:以字节的方式追加写数据到文件中 ab模式
f = open('E:\\Projects\\PycharmProjects\\bigdata33\\day04\\data\\test1.txt', mode='ab') # 写数据到文件中 f.write('黄沪生是33期最帅的男人!\r\n'.encode('UTF-8'))
f.close()
方式3:以字符的方式以指定的编码覆盖写入 w模式
f = open('E:\\Projects\\PycharmProjects\\bigdata33\\day04\\data\\test2.txt', mode='w', encoding='UTF-8') # 写数据到文件中
f.write('数加科技666!\r\n')
f.close()
以字符的方式以指定的编码覆盖写入 a模式
f = open('E:\\Projects\\PycharmProjects\\bigdata33\\day04\\data\\test2.txt', mode='a', encoding='UTF-8') # 写数据到文件中
f.write('数加科技666!\n')
f.close()
读取操作open()
方式1:以字节的形式读取文件数据
f = open('E:\\Projects\\PycharmProjects\\bigdata33\\day04\\data\\test2.txt', mode='rb')
s1 = f.read().decode('GBK')
f.close()
print(s1)
方式2:以字符的形式读取文件数据
f = open('E:\\Projects\\PycharmProjects\\bigdata33\\day04\\data\\test2.txt', mode='r', encoding='GBK')
# s1 = f.read()
res1 = f.readlines()
f.close()
# print(res1)
for i in res1:
if '\n' in i:
str1 = i[:-1]
else:
str1 = i
print(str1)
print("-" * 50)
文件操作的应用场景
代码中的数据存储到文件中【用户注册】
while True:
name = input("请输入您的姓名:")
if name.upper() == 'Q':
break
pwd = input("请输入您的密码:")
email = input("请输入您的邮箱:")
infos = f"{name},{pwd},{email}\n"
f = open('data/users.csv',mode='a',encoding='UTF-8')
f.write(infos)
f.close()
f = open('data/users.csv',mode='a',encoding='UTF-8')
while True:
name = input("请输入您的姓名:")
if name.upper() == 'Q':
break
pwd = input("请输入您的密码:")
email = input("请输入您的邮箱:")
infos = f"{name},{pwd},{email}\n"
f.write(infos) # 这里的写实际上是往内存中写的
flush()
f.close() # 原则上是在关闭连接之前将内存的数据刷到磁盘中
代码逻辑中的数据写到文件中
f = open('data/jj.txt','a',encoding='UTF-8')
for i in range(1, 10):
for j in range(1, i + 1):
f.write(f"{j}*{i}={i * j}\t")
f.write('\n')
f.flush()
f.close()
随机推荐
- 这款PDF解析工具,精准触达大模型问答应用的需要
过去的一年,是大语言模型快速发展的一年.大模型强大的语言理解能力,逐渐让用户习惯了将各类文章丢给大模型,让它来帮忙总结提炼.从产品角度看,这是一次10倍体验的飞跃,意味着巨大的市场机会.也因此,市面上 ...
- .NET 开源的功能强大的人脸识别 API
前言 人工智能时代,人脸识别技术已成为安全验证.身份识别和用户交互的关键工具. 给大家推荐一款.NET 开源提供了强大的人脸识别 API,工具不仅易于集成,还具备高效处理能力. 本文将介绍一款如何利用 ...
- 常回家看看之house_of_cat
house_of_cat 前言: house of cat 这个利用手法和前面提到的 house of kiwi ,和 house of emma 利用的手法是一个链子,当程序无法通过main函数返回 ...
- VMWARE 客户机 ARP 问题一则
最近测试自定义的 linux 镜像,会在 vmware 里面反复安装.测试过程中,发现一个奇怪的现象,就是刚装好的虚拟机,要主动往外ping一下,才能被网络上其他主机连接上.否则就算是同一子网下的宿主 ...
- os.path.basename()和os.path.splitext()
1.os.path.splitext()是用来分离文件名与扩展名: 2.os.path.basename()他返回的是一个base name,我认为就是路径最后一个文件名. import os fna ...
- 博客配套视频已上传至 B 站,欢迎关注
博客配套视频已上传至 B 站,欢迎关注+一键三连 链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 链接 ...
- 使用doccano标注NER数据详细教程
使用doccano标注NER数据详细教程 说明: 首次发表日期:2024-10-12 参考资料: https://github.com/zjunlp/DeepKE/blob/main/README_T ...
- 云原生周刊:一文读懂 Pod 网络 | 2023.4.10
文章推荐 一文读懂 Pod 网络 这篇文章旨在帮助读者理解 Pod 网络的概念和原理.Pod 网络是 Kubernetes 中的一个重要概念,它描述了如何在一个集群中部署和运行应用程序. Pod 网络 ...
- 删除 KubeSphere 中一直卡在 Terminating 的 Namespace
介绍 最近一直在玩 EKS(Elastic Kubernetes Service -- Amazon EKS) 和 KubeSphere. 因为之前没有使用过 EKS 和 KubeSphere,所以这 ...
- OpenCV3 图像处理笔记
此笔记针对 Python 版本的 opencv3,c++ 版本的函数和 python 版本的函数参数几乎一样,只是矩阵格式从 ndarray 类型变成适合 c++ 的 mat 模板类型.注意,因为 p ...