• Python之路番外(第一篇):Python基本数据类型小测试及其他知识点


    一、基础小知识点

    1、if/for/while语句中,即使执行语句只有一句,也必须另起一行。

     

    2、在python中,python用相同的缩进表示同级别的语句块。

     

    3、在python中,对变量的名字大小写是敏感的(PI和pi是不同的变量)。

     

    4、每行长度79,换行可使用反斜杠,最好使用圆括号。

     

    5、操作符左右各加一个空格,不要为了对齐增加空格。就是各种大于小于 等于号左右加空格。

     

    6、函数默认参数使用的赋值符左右省略空格,就是在函数中参数等号左右不要使用空格,这个可以作为特例。

     

    7、类与类之间空两行、方法与方法之间空一行。

     

     

     

    二、关于基本数据类型的几个有趣的小题目

    1、直接口算

    v = dict.fromkeys(['k1', 'k2'], [])
    v['k1'].append(666)
    print(v)
    v['k1'] = 777
    print(v)
    

      

    直接说出两次打印结果。

    答案:

    v = {'k1':[666],'k2':[666]}
    v = {'k1':777,'k2':[666]}
    

      

    分析:

    []是可变数据类型,内存中k1和k2都指向同一个内存地址,只要指向的内存地址发生变化,k1和k2都要改变(保持一致),这里的k1,k2对应的值最开始都指向[]这个内存地址,而v['k1'].append(666)在[]添加了元素666,改变的是[]的第二层内存地址,k1,k2对应的值指向的第一层内存地址仍没有改变,所以k1,k2的值都变成了 [666]。

     

    第二次打印,v['k1'] = 777,这里直接对k1的值进行重新赋值,数字是不可变数据类型,也就是说这里会改变k1对应的值的内存地址,所以这里是k1的值直接指向了新的内存地址,而k2不变。

     

     

    2、求结果

    v1= a=1 or 2
    v2 = b=1 and 2  
    v3 = c=1 < (2==2)   
    v4 = d=1<2==2
    print(v1)
    print(v2)
    print(v3)
    print(v4)
    

      

    答案

    1
    2
    False
    True

    分析:

    逻辑运算规则

    x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。

    x or y 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。

    not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。

    总结:a and b ,如果a不行,那就返回这个不行的a,如果 a 和b都行则返回b。

    a or b,如果a不行则跳到后面的b,这里不管b行不行,如果a行就是a。

    not a就是直接取反。

    分析上题:

    a=1 or 2 ,or 语句,前真返回 前面的1

    b=1 and 2 and语句,如果 a 和b都行则返回b即返回2

    c=1 < (2==2) 先执行括号里的,2==2 结果是True, 1< true 很显然,结果是False

    d=1<2==2 注意这里是链式对比,相当于1<2 and 2==2,所以是true and 2==2 ,最后的结果是True

     

    3、(1)求结果:2 & 5

    (2)求结果:2 ^ 5

    (3)求结果:2 | 5

    分析:这里是位运算

    规则:

    (1)&是位与运算符

    参与运算的两个值,如果两个相应bit位相同,则结果为1,否则为0。

    相同为1不同为0

    (2) ^是位异或运算 参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。 相同为0不同为1

    (3)位或运算符(|) 与运算的两个值,如果两个相应bit位相同,只要有一个为1则为1,否则为0。

     

    第一个2 & 5求值过程

    2的转为二进制是 010

    5的转为二进制是101

    所以这两个二进制对应的bit位置,第一个是0对1,第二个是1对0,第三个是0对1,全都不同

    所以结果是000,即最后的运算结果是000转为十进制还是0。

    print(2 & 5) # 010 & 101 => 000 => 0

     

    第二个2 ^ 5求值过程

    2的转为二进制是 010

    5的转为二进制是101

    运算规则是相同为0不同为1,与上面的方法相似,他们最后运算的二进制结果是111,转为十进制为

    print(2 ^ 5)  # 10 ^ 101 => 111 => 1*2**0+1*2**1+1*2**2=1+2+4=7
    

      

     

    第三个 2 | 5求值过程

    2的转为二进制是 010

    5的转为二进制是101

    运算规则是只要有一个为1则为1,否则为0。

    与上面的方法类似,最后运算的二进制结果是111,所以这里的结果还是7。

     

    4、如何实现[‘1’,’2’,’3’]变成[1,2,3] ?

    l = ['1','2','3']
    res = [int(i) for i in l]
    print(res)
    

      

     

    5、如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?

    方法一
    a = '1,2,3'
    a=a.replace(',','')
    res = [i for i in a]
    print(res)
    
    方法二"1,2,3".split(',')
    

      

  • 相关阅读:
    linux TCP数据包重传过程----小结
    linux TCP头部的构造的简单分析
    CentOS 7镜像下载
    JAVAEE——BOS物流项目03:学习计划、messager、menubutton、登陆拦截器、信息校验和取派员添加功能
    JAVAEE——BOS物流项目02:学习计划、动态添加选项卡、ztree、项目底层代码构建
    JAVAEE——BOS物流项目01:学习计划、搭建环境、主页设计(jQuery EasyUI)
    Maven02——回顾、整合ssh框架、分模块开发、私服
    巧妙取法——最小公倍数
    深度优先搜索——地宫取宝
    Maven01——简介、安装配置、入门程序、项目构建和依赖管理
  • 原文地址:https://www.cnblogs.com/Nicholas0707/p/8584535.html
Copyright © 2020-2023  润新知