zoukankan      html  css  js  c++  java
  • python学习第4天----is和==区别、小数据池、编码解码

    1.is和==的区别

    1)==比较的是左右两边的值,无论是字符串、数字、列表,元组、若两边的值相等,则返回True

    a = "zdz"
    b = "zdz"
    print(a==b)
    输出:
    True 
    View Code

     ②列表:若两个列表元素相同,则返回True 若不相同,返回False

    li = [1,2,4]
    li_2 = [1,2,4]
    print(li==li_2)
    输出:
    True
    View Code

     2) is 是比较:比较的是内存地址

     补充:id是python中的内置函数,用来打印对象内存地址

    a = "zdz"
    print(id(a))
    输出:
    1673496780448
    View Code

     ①字符串

    str_1 = "zdz"
    str_2 = "zdz"
    print(str_1 is str_2)
    输出:
    True
    View Code

    ②数字

    num1 = 10
    num2 = 10
    print(num1 is num2)
    输出:
    True
    View Code

    ③列表

    list_1 = [1,2,3]
    list_2 = [1,2,3]
    print(list_1 is list_2)
    输出:
    False
    View Code

    ④元组

    tup_1 = (1,2,3)
    tup_2 = (1,2,3)
    print(tup_1 is tup_2)
    输出:
    False
    View Code

    ⑤字典

    dic_1 = {'1':"zdz",'2':"zzm"}
    dic_2 = {'1':"zdz",'2':"zzm"}
    print(dic_1 is dic_2 )
    输出:
    False
    View Code
    总结:
    	1)==比较左右两边的值
    	2)is 比较的是内存地址,通过id()内置函数比较
           一个py文件中所有相同的字符串,一般都是使用一样的内存地址
     

    2.小数据池

      只适用于数字和字符串,在小数据池中的数据内存地址相同(在终端测试正常,在pycharm会改变这个规则)

    ①数字小数据池范围:-5~256

    ②字符串小数据池范围:字符产中如果有特殊字符(空格、加减乘除等),内存地址就不一样(终端测试正常,pycharm中会改变该规则)

    #字符串中单个*20以为的内存地址一样;单个*21以上内存地址不一致

    a = 'a' * 20
    b = 'a' * 20
    print(a is b)
    输出:
    True
    ==================================
    a = 'a' * 21
    b = 'a' * 21
    print(a is b)
    输出:
    False
    View Code

    3.编码和解码

    1)常见编码

    ascii码:不支持中文,支持英文,数字,字母,符号;8位,即一个字节

    GBK码:支持中文,英文,数字,符号;英文和中文都占16位,即2个字节

    unicode:万国码:支持中文,英文,数字,符号;英文和中文都占32位,即4字节

    utf-8长度可变的外国码:最少用8位,英文占8位,中文占24位,即3个字节

    注:python2的默认编码为ascii;python3的默认编码为utf-8;python3中,在程序运行阶段,使用的是unicode编码(即unicode是一个桥梁);unicode是不可以做文件传输和存储的;所有的传输和存储都是使用bytes;pycharm存储的时候默认使用的是utf-8

    2)编码(encode):即拿到明文编码后对应的字节

    s = "lpl"
    print(s.encode('utf-8')) #指定要编码成什么样的编码类型
    输出:
    b'lpl'
    View Code

    #中文

    s = "吃了吗"
    print(s.encode('utf-8')) #指定要编码成什么样的编码类型
    输出:
    b'xe5x90x83xe4xbax86xe5x90x97'        #一个字三个字节(文件存储时,存在硬盘中的就是类似这样的数据)
    View Code

    2)解码(decode:用什么编码方式编码,就要用什么编码方式解码,否则解码报错或者解码后的字符乱码;即将编码后的字节编码成对应的明文

    s = "吃了"
    s1 = s.encode('utf-8')
    print(s1)
    print(s1.decode("gbk"))
    print(s1.decode("utf-8"))
    输出:
    b'xe5x90x83xe4xbax86'
    鍚冧簡
    吃了
    View Code

    编码和解码的本质:通过unicode这个桥梁,进行编码和解码

    4.练习

    1)好声音大赛评委打分时,可以进行输入,假设有10个评委,让10个评委进行打分,要求,分树必须大于5分,小于10

    i =1
    while i <= 10:
        score  = input("请%d号评委打分:"%i)
        if int(score) > 5 and int(score) < 10:
            print("分数合理")
        else:
            print("分数不合理")
            continue
        i = i + 1
    输出:
    请1号评委打分:1
    分数不合理
    请1号评委打分:8
    View Code

    2)电影投票:程序先给出一个目前正在上映的电影列表,由用户给每一个电影打分,最终将该用户投票信息公布出来lst=['烈日灼心','美国往事','西西里的美丽传说','憨豆先生'],最终结果如下:{'烈日灼心':88,'美国往事':85,'西西里的美丽传说':90,'憨豆先生':89}

    lst=['烈日灼心','美国往事','西西里的美丽传说','憨豆先生']
    dic={}
    for i in lst:
        score = input("请给%s打分:" % i)
        dic[i] = score
    print(dic)
    输出:
    请给烈日灼心打分:88
    请给美国往事打分:85
    请给西西里的美丽传说打分:90
    请给憨豆先生打分:89
    {'美国往事': '85', '西西里的美丽传说': '90', '烈日灼心': '88', '憨豆先生': '89'}
    View Code

    3)念数字:给出一个字典,在字典中表示2每个数字的发音,包括相关符号,然后由用户输入一个数字,让程序读出相应的读音(不需要语音输出,单纯的打印即可)

    dic = {
        '-':"fu",
        '1':"yi",
        '2':"er",
        '3':"san",
        '4':"si",
        '5':"wu",
        '6':"liu",
        '7':"qi",
        '8':"ba",
        '9':"jiu"
    }
    num = input("请输入一个数字:")
    for i in num:
        print(dic[i],end=" ")  #用空格分割每一个元素
    else:
        print()           #换行
    print("输入完毕")
    输出:
    请输入一个数字:127
    yi er qi 
    输入完毕
    View Code

    4)现有主播的收益信息,按照要求,完成相应操作:

    zhubo = {'卢本伟':122000,'冯提莫':189999,'PDD':'200000','老贼':188888}

    ①计算主播的平均收益

    zhubo = {'卢本伟':122000,'冯提莫':189999,'PDD':200000,'老贼':188888}
    sum = 0
    for value in zhubo.values():
        sum = sum + value
    print(sum/len(zhubo))     #计算平均值
    输出:
    175221.75
    View Code

    ②干掉收益小于平均值的主播

    zhubo = {'卢本伟':122000,'冯提莫':189999,'PDD':200000,'老贼':188888}
    sum = 0
    for value in zhubo.values():
        sum = sum + value
    print(sum/len(zhubo))     #计算平均值
    
    avg = sum/len(zhubo)
    #循环的时候记录要删除的key
    #注:字典循环的时候,不允许修改被迭代的元素,所以先将key放入到列表中
    lst = []
    for k,v in zhubo.items():
        if v < avg:
            lst.append(k)      #列表保存要删除的key
    for i in lst:
        zhubo.pop(i)
    print(zhubo)
    输出:
    175221.75
    {'老贼': 188888, '冯提莫': 189999, 'PDD': 200000}
    View Code

    ③干掉卢本伟

    zhubo.pop('卢本伟')

    总结:

             1==比较左右两边的值

             2is 比较的是内存地址,通过id()内置函数比较

    一个py文件中所有相同的字符串,一般都是使用一样的内存地址

  • 相关阅读:
    各种小知识
    基础技能
    st表
    有理数取余
    FFT加速高精度乘法
    unique
    离散化
    线段树复杂度分析
    楼房重建
    电脑装系统常用方法
  • 原文地址:https://www.cnblogs.com/piaolaipiaoqu/p/13830067.html
Copyright © 2011-2022 走看看