day6:前两小节补充

1,练习题一:以66分割,大于部分一个键值对,小于部分一个键值对

li = [23,78,67,45,34,89,67,78,23,23]
lig = []
lil = []
dic = {}
for i in li:
    if i == 66:
        continue
    elif i > 66:
        lig.append(i)
    else:
        lil.append(i)

dic.setdefault("k1",lig)
dic.setdefault("k2",lil)
print(dic.items())

运行结果:
dict_items([('k1', [78, 67, 89, 67, 78]), ('k2', [23, 45, 34, 23, 23])])

2,练习题二

li = ["apple","pear","peach","watermelon"]
# 页面显示商品名称
for i in li:
    print(li.index(i)+1,"		",i)

# 用户输入index显示商品名称

while 1:
    num = input(">>>").strip()  # 这句话注意要写在循环里面
    if num.isdigit():
        num = int(num)
        if num in range(0,len(li)+1):
            print(li[num-1])
        else:
            print("number out of range")
    elif num.lower() =="q":
        break
    else:
        print("please input an number")
运行结果:
1          apple
2          pear
3          peach
4          watermelon
>>>5
number out of range
>>>4
watermelon
>>>e
please input an number
>>>q

3,Python2 和Python3的几点小区别:

Python2除了range函数还有个xrange,但是Python3只有range;

Python2的input函数叫做raw_input,Python3叫做input;

Python2的print函数,加括号不叫括号都可以,Python3必须加,另外还有之前讲解的编码区别

4,赋值运算符= 和身份运算符is 前置比较的是值,后者比较的是地址,如果用pycharm 的话,很多都会做优化占用一个地址,如果用console就不是一个了

这个老师也没有总结出来规律知道就好了,数字和字符串,基本上数字-5到256,字符串s*20 还是同一个,s*21就不是了,遇到的时候,还是实际来跑一下,因为没有明显规律

a = "abcdefgh"
b = "abcde"
c = a
print (id(a),id(b),id(c))
print (a == b)  #比较的是值
print (a is b)  #比较的是地址
print (a == c)
print (a is c)


# 由于小资源池的存在,Python为了节省空间自动用一块儿存储空间
a = 20000
b = 20000
c = a
print (id(a),id(b),id(c))
print (a == b)
print (a is b)
print (a == c)
print (a is c)

运行结果:
4460901104 4459766536 4460901104
False
False
True
True
4459708336 4459708336 4459708336
True
True
True
True
li = [1,]
l2 = [1,]
print(li is l2)
print(li == l2)

运行结果:
False
True

5,各个编码之间的二进制文件是不能互相认识的,密码本不同,文件的储存传输不能是unicode,只能是(GBK,GBK2312,UTF-8,UTF-16,ASCII)等也就是bytes类型,他们之间的转化需要通过Unicode,str在内存中是Unicode存储的,不能直接用来存储和传输,必须先转化成bytes类型,pycharm帮我们完成了这个转化的过程,其他的文件需要我们自己手动转化

"""
bytes类型

对于英文:
str :表现形式:s = "lisa"
      编码方式:01010100 Unicode
bytes:表现方式:s =b'lisa'
      编码方式:s = 10010011 utf-8 gbk......
      
对于中文:
str :表现形式:s = "我们"
      编码方式:01011110 Unicode
bytes:表现方式:s =b'xe6x88x91xe4xbbxac'
      编码方式:s = 10010011 11100101 11100001 utf-8 gbk......

"""

s = 'lisa'
s1 = b'lisa'

print(s,type(s))
print(s1,type(s1))
print("")
s = '我们'
# s1 = b'我们' #注意这个是错误的 报错:SyntaxError: bytes can only contain ASCII literal characters.
# encode 函数将str转化为bytes,还有decode函数
# 注意两种编码方式占用字节数,以及编码结果
s1 = s.encode("gbk")
print(s1,type(s1))
s1 = s.encode('utf-8')
print(s,type(s))
print(s1,type(s1

运行结果:
lisa <class 'str'>
b'lisa' <class 'bytes'>

b'xcexd2xc3xc7' <class 'bytes'>
我们 <class 'str'>
b'xe6x88x91xe4xbbxac' <class 'bytes'>
原文地址:https://www.cnblogs.com/lisa-blog/p/10024303.html