1、homework
'''
输出商品列表,用户输入序号,显示用户选中的商品
商品 li = ['手机','电脑','鼠标垫','游艇']
要求:
1、li: 页面显示 序号+商品名称,如:
1 手机
2 电脑
……
2、用户输入选择的商品序号,然后打印商品名称
3、如果用户输入的商品序号有误,则提示输入有误,并重新输入
4、用户输入Q或者q,退出程序
'''
while 1:
li = ['手机','电脑','鼠标垫','游艇']
for i in li:
print('{}\t\t{}'.format(li.index(i)+1,i))
num_of_choice = input('please input your choice id:')
if num_of_choice.isdigit():
num_of_choice = int(num_of_choice)
if num_of_choice>0 and num_of_choice <= len(li):
print('your choice is '+li[num_of_choice-1])
else:print('please input correct digit')
elif num_of_choice.lower() == 'q':
break
else:
print('please input the digit')
2、小知识点总结回顾
pytho2和pytho3区别
# python2
# print 'abc' # print不用加括号,但是也可以加括号
# range() xrange() # xrange是生成器,可以转换成range
# raw_input() # 输入
# python3
# print('abc') # print必须加括号
# range() # 无xrange
# input() # 输入
# = :赋值运算,让2者指向同一个内存地址
# == :比较值
# is : 比较内存地址
# id(内容) :测出内存地址
# 数字,字符串
# 小数据池,为了节省空间,在一定范围内(-5 -- 256),i1和i2 指向的内存是一致的
# i1 = 300
# i2 = 300
# 字符串:1、不能有特殊字符 比如¥等 指向不同的内存地址
# i1 = 'alex$'
# i2 = 'alex$'
# 2、i1和i2 都是 'abc'*20,i1和i2指向的内存是相同的 i1和i2 都是 'abc'*21 ,i1和i2指向的内存是不同的
# 只有字符和数字有小数据池的概念
Python2和Python3 编码
# Python2 和 Python3 编码
Ascii
只有英文
1个英文 占 8位(1个字节)
Unicode
开始16位,后来32位
英文和中文都是32位(4个字节)
utf-8
英文:8位(1个字节)
中文:24位(3个字节)
GBK系列
英文:8位(1个字节)
中文:16位(2个字节)
1、各个编码之间的二进制,是不能互相识别的,会出现乱码
2、文件的储存、传输 不能是Unicode,(只能是utf-8,utf-16,gbk,gb2312,ascii等)
python3 编码
str在内存中是用Unicode编码
bytes类型:utf-8 或者 gb2312 编码
如果str需要存储和传输,需要将str转换成bytes
对于英文
str :表现形式:s = 'alex'
编码方式:01 Unicode
bytes:表现形式:s = b'alex'
编码方式:01,utf-8,gb2312……
对于中文
str :表现形式:s = '中国'
编码方式:01 Unicode
bytes:表现形式:s = b'x\e91\e91\e01\e21\e31\e32'
编码方式:01,utf-8
s1 = 'alex'
# encode:如何将 str->bytes
s11 = s1.encode('utf-8') #b'alex'
s11 = s1.encode('gbk') # b'alex'
s2 = '中国'
# encode:如何将 str->bytes
s11 = s2.encode('utf-8') # b'\xe4\xb8\xad\xe5\x9b\xbd'
s11 = s2.encode('gbk') # b'\xd6\xd0\xb9\xfa'