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()

随机推荐

  1. c++实现几种常见排序算法

    一.快速排序 int getPivot(vector<int>& arr, int left, int right){ int tmp = arr[left]; while(lef ...

  2. 物体检测序列之一:NMS

    IoU (Intersection over Union),交并比,是衡量物体检测模型在特定数据集上检测效果好坏的一个常用的标准,通常情况下,想要通过IoU来衡量物体检测模型好坏需要具备以下几点: 1 ...

  3. 还在苦于密码太弱?教你3招用Linux生成高强度密码

    各位好啊,我是会编程的蜗牛,作为java开发者,我们平常肯定会接触Linux操作系统,其实除了一般的部署应用外,它还可以帮助我们生成密码.解决我们平常自己想各种复杂密码的烦恼,以后我会讲一讲如何安全地 ...

  4. .NET 开源高性能 MQTT 类库

    前言 随着物联网(IoT)技术的迅猛发展,MQTT(消息队列遥测传输)协议凭借其轻量级和高效性,已成为众多物联网应用的首选通信标准. MQTTnet 作为一个高性能的 .NET 开源库,为 .NET ...

  5. WebBrowser中打开新页面

    要求新打开的网页受控于WebBrowser 解决办法很简单,分两情况,一是在当前WebBrowser中打开新页面,二是在新Form中的WebBrowser中打开新页面: public Form1() ...

  6. 2024年2月中国数据库排行榜:PolarDB夺魁首登顶,TiDB攀升回探花

    银装素裹覆大地,春意初醒待来临.2024年2月墨天轮中国数据库流行度榜单出炉,表现最亮眼的无疑是PolarDB,其自23年7月以来一路高歌猛进,此次更是一举夺魁,彰显了云原生数据库的蓬勃发展态势,Oc ...

  7. 数据库周刊57丨Oracle 2021年度安全警报;MySQL 8.0.23发布;MySQL索引优化导致的死锁案例;巨杉数据库跨引擎事务实践;MongoDB企业级能力解析;OceanBase OBCP 实验指导手册……

    摘要:墨天轮数据库周刊第57期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.Oracle 2021年度安全警报: Critical Patch Update 发布8个 ...

  8. 2021年12月墨天轮国产数据库排行榜: openGauss节节攀升拿下榜眼,GaussDB与TDSQL你争我夺各进一位

    2021年12月的国产数据库流行度排行榜已在墨天轮发布,本月共有189家数据库参与排名.为使国产数据库排名更加专业与客观,本月起,排行榜加入了三方评测.生态.专利数.论文数等新的指标.其中三方测评方面 ...

  9. DDD实体和对象

    实体 entity 标识符用来唯一定位一个对象,在数据库中我们一般用表的主键来实现标识符,主键和标识符的思考角度不同,就是 id 字段 : 实体:拥有唯一的标识符,标识符的值不会改变,而其他对象的状态 ...

  10. 淘宝程序员没活硬整?在 Excel 和 VSCode 中购物!

    大家好,我是程序员鱼皮,最近某宝网站的改进,属实是有点 "新" 了. 你敢相信这是一个购物网站么? 你可以在 Excel 表格中挑选商品进行购物,还原度极高,这两个图表更是点睛之笔 ...