python基本知识回顾

python 部分知识回顾

  • 列表的存储方式,对于列表 list[5] 来说,他在内存中的存储形式为:
    在这里插入图片描述

    • 因为列表中的元素可以是任意类型的,所以列表不能像C中的数组那样,划分一块连续的空间,并在其中直接存储数据。她的索引划分一块连续的空间,在其中存入指向对象的引用(指针)
  • 变量值的修改

    a = 123
    a = "abc"
    

    当第二条代码运行时,系统再内存中新申请一片内存,并存入“abc“,之后将新内存的引用,而旧内存将由垃圾回收机制回收,垃圾回收机制的介绍

    • 这里有个基本数据类型,相同的基本数据在内存中只存在一份,上面代码中的123 和 “abc”都是基本数据类型,这意味着你第二次给 a 赋值的时候,a 先与 123 的内存地址解绑,然后再与“abc”的内存地址绑定,并不是直接在 123 的内存块上将内容123 删除,换成abc

      • 数值、布尔类型、字符串、字节都是基本的数据类型
    • 其他的类型就不是这样了,你比如说列表,即使两个列表的内容都一样,但他们也有不同的内存地址

  • “```````“ 注释多行注释,其实三引号注释的方式是定义了一个字符串

    # 可以试一下将多行注释的内容赋给一个变量
    s = ```如果些内容可以正常运行输出,那么证明三引号中的内容是一个字符串```
    print(s)
    
  • 运算符

    • 算术运算符

      • 这里有个挺好玩的事儿,我们都知道 7%2 = 1,那么 (-7)&2 呢?答案也是 1,为什么呢?
      • 通过 7%2 = 1 我们可以发现,7/2 = 3.5 然后我们取小于3.5的最大整数,是3,然后 7 - 2*3 = 1 是余数,按这个道理推广到负数,(-7)/2 = -3.5 然后我们取小于-3.5 的最大整数,注意这里取得不是 -3,而是-4,-4 < -3.5,而 -3 > -3.5, 然后-7 - 2*(-4) = 1
      • python 与 C 不同得一个运算符是 “/”,在 C 中,这个符号是取整除法,而在python 中,这个符号得意义与数学中一致,就是普通的求商,python 中的取整运算符为“//”
    • 关系运算符

      • 运算符“<>”在python3中已经取消,python2中还可以使用
      • “==” 和“!=” 判断的变量指向的对象“内容”是否一致,对象的地址可以不一样
    • 身份运算符

      • is 和 is not 用来判断是否为一个地址。指向一个地址,也就是说,两个变量指向的是一个对象
    • 逻辑运算符

      • 最常用的与(and)、或(or)、非(not),网上资料很多,具体的可以去搜一下,就不说了。

      • 对于或、非运算,数学中的短路现象,在python中也有。

        • 对于 或 运算,短路现象表现为:当第一个式子为true时,系统不执行第二个式子

        • 对于 与 运算,短路现象表现为:当第一个式子为false时,系统不执行第二个式子

          10>0 or print("sdf")
          10<0 and print("aaa")
          # 运行后可以发现,两个print语句都没有得到执行
          
        • 有些很别扭的人会写这种代码

           balance or print("我太难了")
           # 什么意思呢
           # 当 balance == 0 时,输出"我太难了"
           # 注意,balance 为负数和正数时,在这里相当于true,不会执行print语句
          
    • 位运算符

      • &、|、^、~、<<、>>分别对应:与、或、按位异或、取反、左移、右移

      • 首先要知道一个知识点,电脑再进行位运算时,使用的是补码。

      • 我们由原码到补码的过程为:原码->符号位以外的每位取反->得到反码->之后加1->获得补码。

      • 计算机为什么要使用补码呢?原码不好吗?

    • 好,普通计算的时候方便又直观。但是,碰到负数怎么办?想过吗?感兴趣的同学可以去搜一搜

    • 上面说了有原码到补码的过程,接下来由补码到原码的过程:补码->符号位以外的每位取反->得到反码->之后加1->获得原码

    • 之前写0/1背包的穷举法时用过一次,程序时用C++写的,也可以尝试改为 python 的

      #include<iostream>
      using namespace std;
      int num=7;
      
      void main()
      {
      	double *p = new double[num] { 5, 8, 4, 6, 3, 2, 1 };	// 物品的价值
      	double *w = new double[num] { 8, 1, 5, 3, 6, 5, 4 };		// 物品的重量
      	int i, j, k;
      	double max = 0;	// 背包中物品价值的最大值
      	int c = 20;	// 背包容量
      	int n = 1 << 7;
      	double sum = 0;
      	int x;
      	int temp = c; // 方便对容量操作
      	for (i = n-1; i >=0; i--)
      	{
      		for (k = 0; k < 7; k++)
      		{
      			if ((i >> k & 1) == 1)	// 判断第 k 位是否为1
      			{
      				if (temp - w[k] >= 0)
      				{
      					temp = temp - w[k];
      					sum = sum + p[k];
      				}
      				else
      					break;
      			}
      		}
      		if (k == 7)
      		{
      			if (sum > max)
      			{
      				max = sum;
      				x = i;
      			}
      		}
      		sum = 0;
      		temp = c;
      	}
      	cout << "物品的放入情况:";
      	for (k = 0; k < 7; k++)
      	{
      		if (((x >> k) & 1) == 1)
      			cout << 1 << " ";
      		else
      			cout << 0 << " ";
      	}
      
      	cout << endl <<"最大值为:"<< max << endl;
      	system("pause");
      }
      
    • 成员运算符

      • in 和 not in 用来判断某元素是否在当前对象中

        print('h' in ['h','e','l','l','o'])
        print(['h','e'] in ['h','e','l','l','o'])
        

        猜猜输出结果是什么

        第一个是true,第二个也是true。是不是感觉不对劲?有这个感觉的证明你是个明白人。第二个应该是false,我们说 in 和not in 使用来判断元素是否在对象中,[‘h’,‘e’]是一个元素,那[‘h’,‘e’,‘l’,‘l’,‘o’] 中有这个元素吗?显然没有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值