• python编程小知识tips 20220720


    1、格式化是如输出

    def p(n):
        print("f(%d)=%d%s素数" % n % f(n) % ("是" if isprime(n) else "不是"))
    
    • 1
    • 2

    即TypeError:格式字符串的参数不足,本来以为少了%,后来对着度娘观摩半天后,终于意识到一堆参数只需要一个%,剩下的使用括号即可,正确代码为(其实只有最后一行错了):

    def p(n):
        print("f(%d)=%d%s素数" %( n, f(n), ("是" if isprime(n) else "不是")))
    
    • 1
    • 2

    2、map高级用法,直接看图
    在这里插入图片描述
    3、range生成的是list,无法进行中间改变

    for i in range(1,5):
        print(i)
        i -= 1
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    4、字符串的start with属性

    if not ID.startswith('20'):   #如果学号未以20开头  
        print('未以20开头')  
    
    • 1
    • 2

    5、负一整除
    在若干次循环后,d的值一直为-1,这次循环是-1,下次循环整除2后还是-1,也就是说,-1//2的结果是-1而不是0,可以验证一下这个说法,程序如下:

    print(-1//2) #-1//2的结果是-1(请自行上网查询负数整除如何进行)
      所以,输入负数时会出现死循环。

    6、递归定义的特殊符号
    在这里插入图片描述
    7、进制转化
    print(bin(37)) #bin(n)是将十进制整数n转换为二进制
    print(oct(37)) #oct(n)是将十进制整数n转换为八进制
    print(hex(37)) #bin(n)是将十进制整数n转换为十六进制
    print(int(‘100101’, 2)) #int(n, 2)是将二进制数n转化为十进制
    print(int(‘45’, 8)) #int(n, 8)是将八进制数n转化为十进制
    print(int(‘25’, 16)) #int(n, 16)是将十六进制数n转化为十进制
    在这里插入图片描述
    在这里插入图片描述
    可见进制转换后变成了str
    8、字符串是不可以随意修改的
    在这里插入图片描述
    下面这种改法,x不会改变text中的enchar
    在这里插入图片描述
    9、三通道图像处理
    from PIL import Image
    img = Image.open(‘src/step2/head.jpg’)
    pix = img.getpixel((23, 5)) #获取(23, 5)处像素的颜色
    print(pix)
      其中,第 3 行中getpixel函数的功能是获取一个像素的颜色信息,其参数是用元组类型表示的像素坐标。
      程序运行结果是一个包含 3 个整数的元组(0, 156, 68),这就是计算机表示颜色的一种方法,称为 RGB 颜色。

    10、透明度

    RGBA颜色

    在 RGB 颜色的基础上,再加入一个 A 分量,就构成了 RGBA 颜色。A 分量表示的是像素透明度,取值也是 0~255,0 表示完全透明,255 表示完全不透明。
      在现实生活中,要看一个物体的透明度,可以通过它看后面的景象,透明度越高,后面的景象就看得越清晰,颜色的透明度也是类似的。例如,在下图中,第 1 个矩形中颜色的透明度是 255,表示完全不透明,将它放到背景图像上,则只能看到这个颜色,而看不到背景;第 2 个颜色的透明度是 100,表示半透明,所以既能看到这个颜色,也能透过这个颜色隐约看到背景图像;第 3 个颜色的透明度是 0,表示完全透明,看到的就都是背景图像。
      在这里插入图片描述
    11、绿屏抠像原理

    偏绿色的判断

    初始代码给出了绿幕抠像的程序框架,与上关代码基本一样,区别在于:上关是将所有像素都改为半透明,而本关只对偏绿色像素进行修改(改为完全透明)。所以,只要在第 9 行问号处给出偏绿色像素的判断条件,即可过关。
      RGB 颜色包含红绿蓝三个分量,每个分量的取值范围是 0~255,一个分量的数值越大,表示这个分量占的比例越高。所以,绿色分量数值越大,颜色就越偏绿色,比如在下图中,保持红色和蓝色分量数值不变,增大绿色分量的数值,颜色就越来越偏绿色。

    在这里插入图片描述

    绿色分量占的比例可以用绿色分量除以三个分量之和来表示,即 (G+1)/(R+G+B+3),这里给每个分量均增加 1,是为了避免 R、G、B 分量均为 0 时发生除 0 错误。根据视觉效果可以看出,当绿色分量的比例超过 40% 时,颜色看起来就是偏绿色了。所以,得偏绿色判断条件如下:

    在这里插入图片描述

    例如在下图中,几种颜色的红色和蓝色分量都是 0,所以绿色分量占的比例都是 100%。但当绿色分量取值较小的时候,颜色看起来是黑色,当超过一定数值时看起来才是绿色。

    在这里插入图片描述

    所以,在“比例超过 40%”这个条件的基础上,还要再加一个条件,绿色分量的取值要大于某一个值,根据视觉效果,这个值可以设置为 60,即在程序第 9 行中增加条件 G>60。

    补充说明

    上面给出的两个值是经验值,而不是理论值,比例比 40% 高一些或低一些、取值比 60 大一些或小一些,其实都可以进行判断,某些时候甚至效果更好。
      此外,判断偏绿色的方法也不唯一,例如,条件g-r>30 and g-b>30(即绿色分量比红、蓝色分量的取值都大 30 以上)也可以取得较好的抠图效果。
    12、乘二取整法
    在这里插入图片描述
    12、找下标
    n = b.index(‘.’) #小数点的编号,即整数部分的总位数

    13、超重点:list的join操作

    在这里插入图片描述
    14、保留一位小数的最简单方法
    b 保留一位小数(用round函数实现,如round(3.14, 1))

    15、map典型案例解析ip地址
    ########## Begin ##########
    def DectoBin(t):
    t = int(t)
    def DtB(t):
    if t == 0:
    return ‘’
    return DtB(t//2)+str(t%2)
    if t == 0:
    return ‘00000000’
    if t < 0:
    return ‘-’+DtB(-t)
    return DtB(t)
    def BintoDec(b):
    s = 0
    for i in range(len(b)):
    s += 2**iint(b[len(b)-i-1])
    return str(s)
    def NOT(x):
    b = ‘’
    for i in x:
    a = ‘1’ if i ==‘0’ else ‘0’
    b += a
    return b
    def AND(x,y):
    ans = ‘’
    if len(x) x = ‘0’
    (len(y)-len(x))+x
    else:
    y = ‘0’*(len(x)-len(y))+y
    for i in range(len(x)):
    ans += ‘1’ if x[i] == ‘1’ and y[i] == ‘1’ else ‘0’
    return ans
    def parseIP(ip,mask):
    ipls = list(map(DectoBin,ip.split(‘.’)))
    mkls = list(map(DectoBin,mask.split(‘.’)))
    # print(mkls)
    netID = []
    hostID = []
    mk0ls = list(map(NOT,mkls))
    # print(mk0ls)
    netID = list(map(BintoDec,list(map(AND,ipls,mkls))))
    hostID = list(map(BintoDec,list(map(AND,ipls,mk0ls))))
    return ‘.’.join(netID),‘.’.join(hostID)
    ########## End ##########
    ip = input() #IP地址
    mask = input() #子网掩码
    netID, hostID = parseIP(ip, mask)
    print(‘网络号:’, netID) #网络号
    print(‘主机号:’, hostID) #主机号

    17、二进制加一的特殊算法,值得记忆
    在这里插入图片描述
    18、定点数 与 浮点数
    第 1 关提到,二进制中除了 0 和 1,还有 +、− 和 .,而计算机底层只有 0 和 1。之前关卡解决的是如何用 0 和 1 表示正负号的问题,从本关开始要进一步解决小数点的问题。
      问题的难点在于不能直接用 0 和 1 表示小数点这个符号。例如,若用 1 表示小数点,则二进制数 101.01 对应的表示为 101101,计算机无法区分哪个 1 是小数点,用 0 或其它 01 串表示都存在类似问题。
      解决方法是固定小数点的位置。例如,可以做如下规定,在 8 位原码中,小数点位置总是在第 4 位和第 5 位之间,固定不变,则 01010100 表示的数是 +101.0100,即 101.01,从而不用再直接表示小数点了,因为它的位置是已知的。这种表示方式叫定点数。
      在这里插入图片描述
    二进制转十进制 int(byte,2)

    19、超重点 zip构造字典

    list1 = [‘key1’,‘key2’,‘key3’]
    list2 = [‘1’,‘2’,‘3’]
    print(dict(zip(list1,list2)))

    20、  判断一个字符是否为数字字符,方法有很多,下面给出其中 3 种。

    x = '2'   
    if x in '0123456789':     #方法1  
        print(x,'是数字字符')  
    else:  
        print(x,'不是数字字符')
    if '0'<=x<='9':           #方法2  
        print(x,'是数字字符')   
    else:  
        print(x,'不是数字字符')
    if x.isdigit():           #方法3  
        print(x,'是数字字符')   
    else:  
        print(x,'不是数字字符')  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    C指针与一维二维数组、数组指针与指针数组、函数指针_数组的理解使用
    银河麒麟桌面操作系统V10升级 华云数据携手麒麟为用户提供更佳体验
    【著作阅读笔记】《代码整洁之道》对Sql类的重构引发的思考
    JVM 调优系列 1:“精通 JVM 调优,有过 JVM 调优经验”,简历敢写吗?薪资涨 5k 的技巧!
    免费玩云上大数据--海汼部落实验室
    详解欧拉计划第622题:完美洗牌
    《未来简史:从智人到智神》笔记一——人类的新议题
    python面向对象继承开发时遇到情况——方法的重写(覆盖、扩展)
    维格云短信模板入门教程
    vue3使用QuillEditor
  • 原文地址:https://blog.csdn.net/weixin_54227557/article/details/125878896