PythonDay3Advance

运算符

位运算符

进制:

  1. 将整数分了几种进制表示法
  2. 二进制:由01构成,逢21,以0b开头
  3. 八进制:由01234567构成,逢81,以0开头
  4. 十进制:由0123456789构成,逢101,默认就是10进制
  5. 十六进制:由0123456789abcdef,逢161,以0x开头
  • 如何从其他进制转10进制

    1. 十进制转十进制
    2. 十进制:12345 十进制:12345
    3. 12345 = 10000 + 2000 + 300 + 40 + 5
    4. = 1*10^4 + 2*10^3 + 3*10^2 + 4*10^1 + 5*10^0
    5. = 10000 + 2000 + 300 + 40 + 5
    6. = 12345
    7. 规律口诀:系数*进制的幂次方之和
    8. 二进制:0b10011
    9. 10011 => 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 16 + 2 + 1 = 19
  • 如何从10进制转其他进制

    除基取余,直到商为0,余数反转

    1. 十进制:108 二进制:0b1101100
    2. 108/2 = 54 ......0
    3. 54/2 = 27 ......0
    4. 27/2 = 13 ......1
    5. 13/2 = 6 ......1
    6. 6/2 = 3 ......0
    7. 3/2 = 1 ......1
    8. 1/2 = 0 ......1
  • 如何从其他进制转其他进制

    • 拆分组合法【只适合二进制转八进制或者16进制】

      • 二进制转八进制 从右向左,每3位一组合,每个组合算自己的10进制结果,拼接

      • 二进制转十六进制 从右向左,每4位一组合,每个组合算自己的10进制结果,拼接

        1. 二进制:0b1101100 八进制:0154
        2. 100->4
        3. 101->5
        4. 001->1
        5. 二进制:0b1101100
        6. 十六进制:0x6c
        7. 1100->12
        8. 0110->6
    • 先转10进制,再转其他进制

原码 反码 补码

  • 在计算机所有数据的运算采用的是补码进行的

  • 原码 反码 补码均都是数据的二进制的形式

    1. 原码:
    2. 正数:数值位就是二进制的表现形式,最高位符号位就是0
    3. 负数:数值位和正数保持一致,但是最高符号位为1
    4. 举例:3的原码:
    5. 1. 3的二进制:11
    6. 2. 3的原码: 00000011
    7. -4的原码:
    8. 1. 4的二进制:100
    9. 2. -4的原码: 10000100
    10. 反码:
    11. 正数:和原码保持一致
    12. 负数:符号位原码保持一致,数值位按位取反
    13. 举例:3的反码: 00000011
    14. -4的反码:11111011
    15. 补码:
    16. 正数:和原码保持一致
    17. 负数:是反码的基础之上末尾+1
    18. 举例:3的补码: 00000011
    19. -4的补码:11111100
    20. 举例:-4+3 = -1
    21. -4的补码+3的补码:
    22. 00000011
    23. + 11111100
    24. -----------
    25. 补码:11111111
    26. 我们最终看到的结果是转原码再转10进制之后的结果 -1
    27. 已知补码求原码:
    28. 符号位 数值位
    29. 补码: 1 1111111
    30. 反码: 1 1111110
    31. 原码: 1 0000001
    32. --------------------------
    33. 数值位转10进制:1,又因为最高位是1,所以是负数,索引最终的结果是 -1
& 两个位都为1时,结果才为1
| 两个位都为0时,结果才为0
^ 异或 两个位相同为0,相异为1
~ 取反 0变1,1变0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补0
>> 右移 各二进位全部右移若干位,高位补0或符号位补齐
  1. 3的补码: 00000011
  2. -4的补码:11111100
  3. a = 3 b = -4
  4. print(a & b) # 0 有0则0
  5. 00000011
  6. & 11111100
  7. ------------------
  8. 00000000
  9. print(a | b) # -1 有1则1
  10. 00000011
  11. | 11111100
  12. -----------------
  13. 补码:11111111
  14. 已知补码求原码
  15. 补码: 11111111
  16. 反码: 11111110
  17. 原码: 10000001
  18. ----------------
  19. 结果:-1
  20. print(a ^ b) # -1 相同则0,不同则1
  21. 00000011
  22. & 11111100
  23. -----------------
  24. 补码:11111111
  25. 已知补码求原码
  26. 补码: 11111111
  27. 反码: 11111110
  28. 原码: 10000001
  29. ----------------
  30. 结果: -1
  31. print(~ b) # 3
  32. ~ 11111100
  33. -------------
  34. 00000011
  35. 12的补码: 00001100
  36. -12的补码:11110100
  37. print(12<<2) 左移,左边多的位丢弃,右边用0补齐,左移n位相当于*2^n
  38. 00001100
  39. 左移2 (00)00110000
  40. --------------------
  41. 00110000 -> 32+16 = 48
  42. print(-12<<2) # -48
  43. print(12>>2) 右移,右边多的位丢弃,左边若最高位是0就用0补齐,若最高位是1就用1补齐,右移相当 于除以2^n次方
  44. 00001100
  45. 右移2 00000011(00)
  46. ---------------------------
  47. 结果:3
  48. print(-12>>2) # -3

文件操作

常见的编码表

  • ACSII码表 采用一个字节存储键盘上任意一个字符
  1. 需要记忆的符号对应的ASCII码值:
  2. '0' - 十进制:48 - 二进制:00110000
  3. 'A' - 十进制:65 - 二进制:01000001
  4. 'a' - 十进制:97 - 二进制:01100001
  • GB2312 | GBK 中国简体汉字字符表示,一个汉字字符占用2个字节
  • BIG-5 大5码 用于表示中国台湾香港繁体字
  • unicode 万国码,表示一个字符占用4个字节 python****默认的编码
  • utf-8 是unicode编码的压缩格式,表示一个字符占用3个字节

体验编码

编码

  1. # 编码
  2. str1 = '今天晚上我们一起去爬大蜀山吧'
  3. b1 = str1.encode('UTF-8')
  4. print(b1)

解码

  1. # 解码
  2. s2 = b1.decode('UTF-8')
  3. print(s2)

文件操作的步骤:

  • 打开文件【创建与系统资源的连接】
  • 操作文件【写 读】
  • 关闭文件【释放|关闭系统资源的连接】

写操作open()

  • 方式1:以字节的方式覆盖写数据到文件中 wb模式

    1. f = open('test1.txt', mode='wb') # 若写数据目标文件不存在,则自动创建
    2. # 写数据到文件中
    3. f.write('黄沪生是33期最帅的男人!'.encode('UTF-8')) # 以指定编码变成字节
    4. f.close()

    路径分类

    • 相对路径:以项目作为根路径进行查找

    • 绝对路径:[完整路径|带盘符的路径]

      1. f = open('E:\\Projects\\PycharmProjects\\bigdata33\\day04\\data\\test1.txt', mode='wb') # 写数据到文件中
      2. f.write('黄沪生是33期最帅的男人!'.encode('UTF-8'))
      3. f.close()
  • 方式2:以字节的方式追加写数据到文件中 ab模式

    1. f = open('E:\\Projects\\PycharmProjects\\bigdata33\\day04\\data\\test1.txt', mode='ab') # 写数据到文件中
    2. f.write('黄沪生是33期最帅的男人!\r\n'.encode('UTF-8'))
    3. f.close()
  • 方式3:以字符的方式以指定的编码覆盖写入 w模式

    1. f = open('E:\\Projects\\PycharmProjects\\bigdata33\\day04\\data\\test2.txt', mode='w', encoding='UTF-8') # 写数据到文件中
    2. f.write('数加科技666!\r\n')
    3. f.close()
  • 以字符的方式以指定的编码覆盖写入 a模式

    1. f = open('E:\\Projects\\PycharmProjects\\bigdata33\\day04\\data\\test2.txt', mode='a', encoding='UTF-8') # 写数据到文件中
    2. f.write('数加科技666!\n')
    3. f.close()

读取操作open()

  • 方式1:以字节的形式读取文件数据

    1. f = open('E:\\Projects\\PycharmProjects\\bigdata33\\day04\\data\\test2.txt', mode='rb')
    2. s1 = f.read().decode('GBK')
    3. f.close()
    4. print(s1)
  • 方式2:以字符的形式读取文件数据

    1. f = open('E:\\Projects\\PycharmProjects\\bigdata33\\day04\\data\\test2.txt', mode='r', encoding='GBK')
    2. # s1 = f.read()
    3. res1 = f.readlines()
    4. f.close()
    5. # print(res1)
    6. for i in res1:
    7. if '\n' in i:
    8. str1 = i[:-1]
    9. else:
    10. str1 = i
    11. print(str1)
    12. print("-" * 50)

文件操作的应用场景

代码中的数据存储到文件中【用户注册】

  1. while True:
  2. name = input("请输入您的姓名:")
  3. if name.upper() == 'Q':
  4. break
  5. pwd = input("请输入您的密码:")
  6. email = input("请输入您的邮箱:")
  7. infos = f"{name},{pwd},{email}\n"
  8. f = open('data/users.csv',mode='a',encoding='UTF-8')
  9. f.write(infos)
  10. f.close()
  1. f = open('data/users.csv',mode='a',encoding='UTF-8')
  2. while True:
  3. name = input("请输入您的姓名:")
  4. if name.upper() == 'Q':
  5. break
  6. pwd = input("请输入您的密码:")
  7. email = input("请输入您的邮箱:")
  8. infos = f"{name},{pwd},{email}\n"
  9. f.write(infos) # 这里的写实际上是往内存中写的
  10. flush()
  11. f.close() # 原则上是在关闭连接之前将内存的数据刷到磁盘中

代码逻辑中的数据写到文件中

  1. f = open('data/jj.txt','a',encoding='UTF-8')
  2. for i in range(1, 10):
  3. for j in range(1, i + 1):
  4. f.write(f"{j}*{i}={i * j}\t")
  5. f.write('\n')
  6. f.flush()
  7. f.close()

随机推荐

  1. 超轻量级、支持插件的 .NET 网络通信框架

    前言 给大家推荐一个轻量级的.支持插件的综合网络通信库:TouchSocket. TouchSocket 的基础通信功能包括 TCP.UDP.SSL.RPC 和 HTTP.其中,HTTP 服务器支持 ...

  2. 用CSS border画一个铅笔

    先上效果图 该例子来自 CSS世界 的书中项目 总结技巧如下: 巧用 border 和 伪元素 来 绘制层叠效果. 使用 transform-origin 来改变元素的轴心 使用 filter:dro ...

  3. JS插入排序完全理解

    插入排序是JS中的一种常见数组排序算法,记录一下如何理解并实现插入排序的功能; 首先看一下最直观的动态图 图片来源:https://www.javascriptc.com/ 从图像可以很直观的看出,插 ...

  4. C#上位机与PLC通信心跳的实现方法

    -Begin- 大家好!我是付工.众所周知,在工业自动化控制系统中,上位机与下位机之间的通信是实现自动化生产的关键环节之一.为了确保通信的稳定性和可靠性,我们通用会采用一种被称为[心跳机制]的方法,它 ...

  5. c++中字符/串->整数

    char字符->整数数字:std::isdigit 用于判断某个字符是否为数字(0-9). 字符串->数字:std::stoi 用于将字符转换为整数. int isdigit( int c ...

  6. union联合体的缺陷

    传统的 union 联合体在 C++ 中虽然提供了一种能够在相同的内存空间内存储多种不同类型的方式,但它也有一些显著的缺陷和限制.这些缺陷让 union 的使用不太安全,尤其是在复杂的程序中.以下是传 ...

  7. 通过脚手架 npx 创建 react 项目

    npx create-react-app create-react --template typescript 使用 ts 模板

  8. Android复习(四)权限—>应用权限最佳做法

    应用权限最佳做法 权限请求可以保护设备上的敏感信息,仅在需要访问信息以使应用正常工作时才应使用.利用本文档提供的技巧,您可能无需请求访问此类信息即可实现相同(或更好)的功能:但本文不会详细讨论权限在 ...

  9. [第一章 web入门]SQL注入-1

    启动靶机 很明显注入点为id值,单引号闭合影响语句,说明为单引号闭合 构造注入语句 ?id=1 ' and 1 =1 --+ 发现没报错,说明没有其他过滤 ,开始sql注入 ?id=1 ' order ...

  10. 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-2-环境准备与搭建-基于Maven(详细教程)

    1.简介 上一篇宏哥已经讲解和分享了如何通过引入jar包来搭建Java+Playwright自动化测试环境,这一种是比较老的方法,说白了就是过时的老古董,但是我们必须了解和知道,其实maven搭建无非 ...