Day2-数据类型、字符编码、购物车

一、引子

1、什么是数据?

x=10,10是我们要存储的数据。

2、为何数据要分不同的类型?

数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示。

3、存在哪些数据类型

  • 数字(整形,长整形,浮点型,复数)
  • 字符串
  • 列表
  • 元组
  • 字典
  • 集合

4、按照以下几个点展开数据类型的学习

#一:基本使用
1 用途
2 定义方式
3 常用操作+内置的方法

#二:该类型总结
1 存一个值or存多个值
    只能存一个值
    可以存多个值,值都可以是什么类型
2 有序or无序    
能按位置取值,就是有序;否则无序
3 可变or不可变 !!!可变:值变,id不变。可变==不可hash !!!不可变:值变,id就变。不可变==可hash

 二、数字

1、整型与浮点型

#一:int(无内置方法)
#作用:年龄,级别,等级,身份证号
x=10 #x=int(10)
print(id(x),type(x),x)

#二:float
#作用:工资,身高,体重
salary=3.1 #salary=float(3.1)
print(id(salary),type(salary),salary)

数字无长度!

2、其他数字类型(了解)

#长整形(了解)
    在python2中(python3中没有长整形的概念):      
    >>> num=2L
    >>> type(num)
    <type 'long'>

#复数(了解)  
    >>> x=1-2j
    >>> x.real
    1.0
    >>> x.imag
    -2.0
View Code

3、实操

int与float为不可变类型:
>>> x=123
>>> id(x)
4297640800
>>> x=12345
>>> id(x)
4320497584

>>> x=3.14
>>> id(x)
4300280000
>>> x=9.11
>>> id(x)
4300280120

>>> x=123
>>> y=123
>>> id(x)
4297640800
>>> id(y)
4297640800
>>> x=1234567890 >>> y=1234567890 >>> id(x) 4320497488 >>> id(y) 4320497584 is身份判断,判断id是否相等 identify >>> x==y True >>> x is y False 也就是说,值相等,id可以不一样:申请两个内存空间,放同样的值; 如果id一样,那么它们用的是同一个内存空间,所以类型、值全部一样。 >>> x=123 >>> y=x >>> x is y True >>> x==y True >>> 但,当数据量比较小的时候:小到没必要把时间耗费在申请内存空间上。 >>> x=123 >>> y=123 >>> id(x) 4297640800 >>> id(y) 4297640800 字符串同理: >>> x='abcdefg' >>> y='abcdefg' >>> id(x) 4320792392 >>> id(y) 4320792392 >>> x='Today is Monday' >>> y='Today is Monday' >>> id(x) 4320819568 >>> id(y) 4320819632

三、字符串;

#作用:名字,性别,国籍,地址等描述信息

#定义:在单引号双引号三引号内,由一串字符组成
name='guoxq'

#优先掌握的操作:
按索引取值(正向取+反向取) :只能取
切片(顾头不顾尾,步长)
长度len
成员运算in和not in

移除空白strip
切分split

1、实操

#用途:名字,性别,地址
name='guoxq' #name=str('guoxq')
# print(id(name),type(name),name)

#优先掌握的操作:
# 按索引取值(正向取+反向取) :只能取
# print(name[0],type(name[0]))
# print(name[-2])
# name[0]='E'                    #字符串不支持插入字符

# 切片(顾头不顾尾,步长)
# print(name[1:3])
# msg='hello world'
# print(msg[1:7])
# print(msg[1:7:2])

# msg='abcdefg'     #bdf
# # print(msg[1:6:2])
# # print(msg[::2])
# print(msg[6::-1]) #了解
# print(msg[5:0:-1])  #顾头不顾尾,所以取不到a
# print(msg[5::-1]) #去掉零,就可以取全
# 长度len
# msg='ab c '
# print(len(msg))

# 成员运算in和not in
# msg='hello alex'
# print('a' in msg)
# print('alex' in msg)
# print('ae' not in msg)

# 移除空白strip
# password='   alex3714              '
# password=password.strip()
# print(password)
# print(password.strip())

# msg='***egon***********'
# print(msg.strip('*'))
# msg='***eg**on***********'
# print(msg.strip('*'))

# 切分split
user_info='root:x:0:0::/root:/bin/bash'
# print(user_info[0:4])
# print(user_info.split(':')[0])    #取第0个值
# print(user_info.split(':',1))    #切一次

# cmd='put       a.txt'
# print(cmd.split())

# filepath='put /a/b/c/d/a.txt'
# print(filepath.split())
# filepath='/a/b/c/d/a.txt'
# print(filepath.split('/')[-1])
# msg='alex say i have on tesla'
# print(msg.split(maxsplit=1)[0])           #切一次,取第0个值

#isdigit:用来判断字符是否是由纯数字组成(bytes,unicode)

#常用操作
# msg='***alex****'
# print(msg.strip('*'))
# print(msg.lstrip('*'))
# print(msg.rstrip('*'))

# msg='alex_SB'
# print(msg.startswith('alex'))
# print(msg.endswith('SB'))

# msg='alex say i have one telsa, my name is alex'
# print(msg.replace('alex','SB',1))    #替换一次

# print('my name is %s my age is %s' %('egon',18))
# print('my name is {} my age is {}'.format('egon',18))
# print('{1} {0} {1}'.format('egon',18))    #‘egon’对应0;18对应1

# print('my name is {x} my age is {y}'.format(y=18,x='egon'))    #可以无序

#split
# user_info='root:x:0:0::asdfasdf'
# l=user_info.split(':')

#join
# print(':'.join(l))    #将上面l返回的列表,用:再连接起来,与原来一样;
# print(''.join(l))
# print(' '.join(l))

#center,ljust,rjust,zerofill
#=================egon===================
# print('egon'.center(30,'='))
# print('egon'.rjust(30,'='))
# print('egon'.ljust(30,'='))
# print('egon'.zfill(30))

#了解部分
#find,rfind,index,rindex,count
# msg='hello world'
# print(msg.find('ell'))    #从左到右找,如果有,则返回第一个字符的索引
# print(msg.find('easdfasdf'))    #从左到右找,如果没有,返回-1

# print(msg.index('d',0,3))    #从左到右找,如果有,则返回第一个字符的索引
# print(msg.index('x'))    #从左到右找,如果有,则返回第一个字符的索引

# print(msg.count('l',0,4))
# print(msg.count('l',0,3))

# msg='abc	deft'
# print(msg.expandtabs(3))    #3个空格

# msg='alex Say hello'
# print(msg.capitalize())    #整句话,首字母大写
# print(msg.upper())    #全部字母大写
# print(msg.lower())    #全部字母小写
# print(msg.title())    #每个单词首字母大写
# print(msg.swapcase())    #颠倒大小写

#is系列
# msg='Alex Say Hello'
# print(msg.isupper())
# print(msg.islower())
# print(msg.istitle())

# msg='asasdf123'
# print(msg.isalnum())   #字符串是由字母或数字组成
msg='asdfasdf'
print(msg.isalpha())    #字符串是由字母组成的

# msg='   1'
# print(msg.isspace())    #字符串都是空格吗?都是空格为真
# msg='aaaai fabc'
# print(msg.isidentifier())    #字符串不存在空格吗?不存在为真

#判断数字
# age=10
# inp=input('>>: ').strip()
# if inp.isdigit():    #isdigit能判断bytes和unicode
#     inp=int(inp)
#     if inp > age:
#         print('ok')
#
# else:
#     print('必须输入数字')

num1=b'4' #bytes
num2=u'4' #unicode,python3中无需加u就是unicode
num3='' #中文数字
num4=''
num5='' #罗马数字

#bytes,unicode
# print(num1.isdigit())
# print(num2.isdigit())
# print(num3.isdigit())
# print(num4.isdigit())
# print(num5.isdigit())

#unicode
# print(num2.isdecimal())    #isdecimal也能判断数字,但是没有isdigit判断的全面
# print(num3.isdecimal())
# print(num4.isdecimal())
# print(num5.isdecimal())

#unicode,汉字,罗马
# print(num2.isnumeric())
# print(num3.isnumeric())
# print(num4.isnumeric())
# print(num5.isnumeric())

2、练习题:

# 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)
# name = " aleX"
# 1)    移除 name 变量对应的值两边的空格,并输出处理结果
# print(name.strip())
# 2)    判断 name 变量对应的值是否以 "al" 开头,并输出结果# print(name.startswith('al'))
# 3)    判断 name 变量对应的值是否以 "X" 结尾,并输出结果# print(name.endswith('X'))
# 4)    将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
# print(name.replace('l','p'))
# 5)    将 name 变量对应的值根据 “l” 分割,并输出结果。
# print(name.split('l'))
# 6)    将 name 变量对应的值变大写,并输出结果# print(name.upper())
# 7)    将 name 变量对应的值变小写,并输出结果# print(name.lower())
# 8)    请输出 name 变量对应的值的第 2 个字符?
# print(name[1])
# 9)    请输出 name 变量对应的值的前 3 个字符?
# print(name[0:3])
# 10)    请输出 name 变量对应的值的后 2 个字符?# print(name[3:])
# or
# name=' aleX'
# print(name[-2:])
# 11)    请输出 name 变量对应的值中 “e” 所在索引位置?# print(name.index('e'))
# 12)    获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
# name=' oldboy '
# print(name[0:6])
name=' oldboy ' print(name[:-2])

四、列表

#作用:多个装备,多个爱好,多门课程,多个女朋友等

#定义:[]内可以有多个任意类型的值,逗号分隔
my_girl_friends=['alex','wupeiqi','yuanhao',4,5] #本质my_girl_friends=list([...])
或
l=list('abc')

#优先掌握的操作:
按索引存取值(正向存取+反向存取):即可存也可以取      
切片(顾头不顾尾,步长)
长度
成员运算in和not in
追加
删除

1、注意步长

#ps:反向步长
l=[1,2,3,4,5,6]

#正向步长
l[0:3:1] #[1, 2, 3]
#反向步长
l[2::-1] #[3, 2, 1]
#列表翻转
l[::-1] #[6, 5, 4, 3, 2, 1]

2、实操

#定义:[]内可以有多个任意类型的值,逗号分隔
my_girl_friends=['alex','wupeiqi','yuanhao',4,5] #本质my_girl_friends=list([...])

#优先掌握的操作:
# 按索引存取值(正向存取+反向存取):即可存也可以取
# print(my_girl_friends[2])
# print(my_girl_friends[-1])
# print(id(my_girl_friends))
# my_girl_friends[0]='SB'
# print(id(my_girl_friends))
# print(my_girl_friends)

# 切片(顾头不顾尾,步长)
# print(my_girl_friends[0:2])
# print(my_girl_friends[0:4:2])

# 长度
# print(len(my_girl_friends))    #元素个数

# 成员运算in和not in
# print('alex' in my_girl_friends)
# print(5 in my_girl_friends)

# 追加
# my_girl_friends.append('6号')    #默认加在后面
# print(my_girl_friends)

# 删除
# del my_girl_friends[2]
# print(my_girl_friends)

# print(my_girl_friends.remove('yuanhao')) #remove是单纯的删除,不会返回删除的值,并且是按照值去删
# res=my_girl_friends.pop(1) #按照索引取删,默认从末尾开始删
# print(res)  #返回删除的值

# my_girl_friends.pop() #按照索引取删,默认从末尾开始删
# print(my_girl_friends)

#常用操作:
my_girl_friends=['alex','wupeiqi','alex','yuanhao',4,5] #本质my_girl_friends=list([...])
# my_girl_friends.insert(0,'sb_alex')
# my_girl_friends.insert(2,'yh')

# my_girl_friends.extend([1,2,3,4])    #默认向末尾扩展

# print(my_girl_friends.count('alex'))

#了解
# my_girl_friends.clear()    #清空列表
# print(my_girl_friends)

# l=my_girl_friends.copy()    #复制列表 # print(l) # my_girl_friends.reverse()    #颠倒列表 # print(my_girl_friends) # l=[3,4,-1,2]
# l.sort    #排序 # l.sort(reverse=True)    #反过来排序 # print(l)

3、练习题:

#队列:先进先出
#append,pop
# l1=[]
# l1.append('first')
# l1.append('second')
# l1.append('third')

# print(l1.pop(0))
# print(l1.pop(0))
# print(l1.pop(0))

#堆栈:先进后出
# l1=[]
# l1.append('first')
# l1.append('second')
# l1.append('third')

# print(l1.pop())
# print(l1.pop())
# print(l1.pop())

同上: l1
=[] l1.insert(0,'first') l1.insert(0,'second') l1.insert(0,'third') print(l1) print(l1.pop(0)) print(l1.pop(0)) print(l1.pop(0)) END. 有列表data=['alex',49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日赋值给不同的变量 data=['alex',49,[1900,3,18]] name=data[0] age=data[1] year=data[2][0] month=data[2][1] day=data[2][2] print(name,age,year,month,day)

 五、元组

#作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读

#定义:与列表类型比,只不过[]换成()
age=(11,22,33,44,55)本质age=tuple((11,22,33,44,55))

#优先掌握的操作:
按索引取值(正向取+反向取):只能取   
切片(顾头不顾尾,步长)
长度
成员运算in和not in

1、实操

#作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读
#定义方式:
ages=(10,12,18,33,18) #ages=tuple((10,12,18,33))
# print(id(ages),type(ages),ages)


#优先掌握的操作:
# 按索引取值(正向取+反向取):只能取
# 切片(顾头不顾尾,步长)
# print(ages[0:2])
# print(ages)
# 长度
# print(len(ages))
# 成员运算in和not in
# print(10 in ages)

#其他操作:
# print(ages.index(18))
# print(ages.index(123123123123))    #报错,他不在tuple(元组)里面
# print(ages.count(18))    #18出现几次

# l=['a','b','c','d','e']
# # l='abcde'
# l=('a','b','c','d','e')
# index=0
# while index < len(l):
#     print(l[index])
#     index+=1
# l1=['a','b','c','d','e'] # for item in l1: # print(item)
# l2='abcde' # for item in l2: # print(item) # for i in range(1,10,2): # print(i)

# l1=['a','b','c','d','e'] # for i in range(len(l1)):
# print(i)
# print(i,l1[i])

2、练习题:

#简单购物车,要求如下:
实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求用户重新输入
msg_dic={
'apple':10,
'tesla':100000,
'mac':3000,
'lenovo':30000,
'chicken':10,
}
goods_l=[]
# while True:
#     for item in msg_dic:
#         print(item,msg_dic[item])
#     choice=input('请输入您想要购买的商品: ').strip()
#     if choice not in msg_dic:continue
#     count=input('请输入您要购买的个数: ').strip()
#     if count.isdigit():
#         goods_l.append((choice,msg_dic[choice],int(count)))
#         print(goods_l)

while True:
    for item in msg_dic:
        print(item,msg_dic[item])
    choice=input('请输入您想要购买的商品: ').strip()
    if choice in msg_dic:
        count=input('请输入您要购买的个数: ').strip()
        if count.isdigit():
            goods_l.append((choice,msg_dic[choice],int(count)))
            print(goods_l)
    else:
        print('请输入列表里的产品: ')
下一节字典知识的运用:
while True: for key,item in msg_dic.items(): print('name:{name} price:{price}'.format(price=item,name=key)) choice=input('商品>>: ').strip() if not choice or choice not in msg_dic:continue count=input('购买个数>>: ').strip() if not count.isdigit():continue goods_l.append((choice,msg_dic[choice],count)) print(goods_l)

3、补充了解知识点(for)

#while+else
# for i in range(5): # if i == 3:break # print(i) # else: # print('ok')

for也支持+else和break。

六、字典

#作用:存多个值,key-value存取,取值速度快

#定义:key必须是不可变类型,value可以是任意类型
info={'name':'egon','age':18,'sex':'male'} #本质info=dict({....})
或
info=dict(name='egon',age=18,sex='male')
或
info=dict([['name','egon'],('age',18)])
或
{}.fromkeys(('name','age','sex'),None)

#优先掌握的操作:
按key存取值:可存可取
长度len
成员运算in和not in

删除
键keys(),值values(),键值对items()

1、实操:

#定义:key必须是不可变类型,value可以是任意类型
# d={'a':1}
# d={0:1}
# d={[1,2,3]:1}   #列表不能当做字典的key
# d={(0,'mac'):3000} # print(d[(0,'mac')]) info={'name':'egon','age':18,'sex':'male'} #本质info=dict({....}) #优先掌握的操作: # 按key存取值:可存可取 # print(info['sex']) # info['hobbies']=['read','music','play','sleep','eat'] # print(info) # 长度len # print(len(info)) # 成员运算in和not in # 删除 # print(info.pop('name')) # print(info.pop('name1213','确实是没有的,我的哥')) # print(info.pop('name1213',None)) # 键keys(),值values(),键值对items() # print(info.keys()) # print(info.values()) # print(info.items()) # for key in info.keys(): # print(key) # for val in info.values(): # print(val) # for item in info.items(): # print(item[0],item[1]) #常用方法 # info={'name':'egon','age':18,'sex':'male'} # print(info['name123']) # print(info.get('name123',123))    #取值不报错 # print(info.popitem())    #弹出最后一个key-value,pop是弹出value # for k,v in info.items():   #k,v=('name', 'egon') # print(k,v) # print(info.setdefault('hobbies',['read','music'])) #有则不改,返回已经有的值,没有则新增,返回新增的值 # print(info) # print(id(info.setdefault('hobbies',[])))    #id一样 # print(id(info['hobbies']))

info={'name':'egon','age':18,'sex':'male',} # if 'hobbies' not in info: # info['hobbies']=[] # info['hobbies'].append('music') # else: # info['hobbies'].append('read') # # if 'hobbies' not in info: # info['hobbies'] = [] # info['hobbies'].append('music') # else: # info['hobbies'].append('read') # # print(info) # info.setdefault('hobbies',[]).append('music') # # {'name': 'egon', 'age': 18, 'sex': 'male', 'hobbies': ['music', ]} # info.setdefault('hobbies',[]).append('read')     #['music', ].append('read') # print(info) #了解 # info_new={'a':1,'age':19}    #'a'新增,‘age'更新 # info.update(info_new) # print(info) # dic={'name':None,'age':None,'sex':None,'hobbies':None} # dic1={}.fromkeys(['name','age','hobbies'],None) # print(dic1) #补充两种赋值方式: #一:链式赋值 # x=10 # y=x # x=y=z=10 # print(id(x),id(y),id(z)) #交换两个变量的值 # m=10 # n=20 # temp=n # n=m #n=10 # m=temp # print(m,n)
# m,n=n,m # print(m,n) #二:从一个数据类型中解压出我们想要的值 # t=(10.3,11.2,12.1,14.3,3.1) # x,y,z,a,b=t # print(x,y,z,a,b) # x,_,_,_,b=t # print(x,b) # print(_) # x,*_,b=t    #*后面多个_ # print(x,b) # x,*_='hello' # print(x) # x,y,z={'a':1,'b':2,'c':3}    #取值 # print(x,y,z)

2、练习题:

#1 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
#即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}

# l=[11,22,33,44,55,66,77,88,99,90]
# a={'k1':[],'k2':[]}
# for i in l:
#     if i > 66:
#         a['k1'].append(i)
#     else:
#         a['k2'].append(i)
# print(a)

# 2 统计s='hello alex alex say hello sb sb'中每个单词的个数
# 结果如:{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2}
# s='hello alex alex say hello sb sb'
# l=s.split()
# dic={}
# for item in l:
#     if item in dic:
#         dic[item]+=1
#     else:
#         dic[item]=1
# print(dic)

# s='hello alex alex say hello sb sb'
# dic={}
# words=s.split()
# print(words)
# for word in words: #word='alex'
#     dic[word]=s.count(word)
# print(dic)

#利用setdefault解决重复赋值
'''
setdefault的功能
1:key存在,则不赋值,key不存在则设置默认值
2:key存在,返回的是key对应的已有的值,key不存在,返回的则是要设置的默认值
d={}
print(d.setdefault('a',1))   #返回1

d={'a':2222}
print(d.setdefault('a',1))   #返回2222
'''
# s='hello alex alex say hello sb sb'
# dic={}
# words=s.split()
# for word in words:   #word='alex'
#     dic.setdefault(word,s.count(word))
#     print(dic)

七、集合

#作用:去重,关系运算,

#定义:
            可变类型是不可hash类型
            不可变类型是可hash类型

#定义集合:
            集合:可以包含多个元素,用逗号分割,
            集合的元素遵循三个原则:
            1:每个元素必须是不可变类型(可hash,可作为字典的key)
            2:没有重复的元素
            3:无序

注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值

#优先掌握的操作:
长度len
成员运算in和not in

|合集
&交集
-差集
^对称差集
==
>,>= ,<,<= 父集,子集 

 1、实操:

# pythons=['alex','wupeiqi','egon','yuanhao','gangdan','oldboy']
# linuxs=['egon','oldboy','tiedan','liudan']

# l=[]
# for item in pythons:
#     if item in linuxs:
#         l.append(item)    #找出即报名python又报名linux的学员
# print(l)

# s={1,2,'a','b','c','d','e','f'}   #s=set({1,2,'a'})
# print(type(s),s)

# 优先掌握的操作:
# 长度len
# s={1,2,'a','b','c','d','e','f'}
# print(len(s))
# 成员运算in和not in
# print('a' in s)
# for item in s:
#     print(item)
# | 并集
# s1={1,2,3}
# s2={3,4,5}
# print(s1 | s2)

# & 交集
# print(s1 & s2)

# -差集    #在s1里,不在s2里,或在s2里,不在s1里
# print(s1 - s2)
# print(s2 - s1)

# ^ 对称差集    #共有部分之外的部分
# s1={1,2,3}
# s2={3,4,5}

# ==
# > , >= , <, <= 父集,子集
# s1={1,2,3,4}
# s2={3,4,5}
# print(len(s1) > len(s2))

# s1={1,2,3,4}
# s2={3,4}
# print(s1 > s2)
# print(s1 >= s2)

#常用操作
s1={1,2,3,'a',4}
# print(s1.pop())   #随机删,并返回删除的结果

# s1.remove('a')   #单纯地删,不会返回删除的结果,并且如果删除的元素不存在则报错
# s1.remove('asdfasdfa')   #单纯地删,不会返回删除的结果
# print(s1)
# print(s1.discard('a'))   #单纯地删,不会返回删除的结果,并且如果删除的元素不存在返回None,不会报错
# print(s1)

# s1.add('b')
# print(s1)

s1={1,2,3}
s2={4,5}
# print(s1.isdisjoint(s2))   #如果s1和s2没有交集则返回True

#了解
# s1={1,2,3,4}
# s2={3,4,5}

# | 并集
# print(s1.union(s2))

# & 交集
# print(s1.intersection(s2))
# s1.intersection_update(s2)   #s1=s1.intersection(s2)
# print(s1)

# -差集 # print(s1.difference(s2)) # ^ 对称差集 # print(s1.symmetric_difference(s2)) # == # > , >= , <, <= 父集,子集 # s1={1,2,3,4} # s2={3,4} # print(s1.issuperset(s2)) # print(s2.issubset(s1)) #去重,无需保持原来的顺序 # l=['a','b',1,'a','a']
# print(set(l)) # print(list(set(l)))
#去重,需要保持原来的顺序 # l=['a','b',1,'a','a'] # l_new=[]      #等同于 l_new=list() # s=set() # for item in l: # if item not in s: # s.add(item) # l_new.append(item)
# print(l_new)

#列表中元素为可变类型时,去重,并保持原来的顺序 l=[ {'name':'egon','age':18,'sex':'male'}, {'name':'alex','age':73,'sex':'male'}, {'name':'egon','age':20,'sex':'female'}, {'name':'egon','age':18,'sex':'male'}, {'name':'egon','age':18,'sex':'male'}, ] l_new=list() s=set() for item in l: res = (item['name'], item['age'], item['sex']) if res not in s: s.add(res) l_new.append(item) print(l_new) #了解:不可变集合    可变才有.add .pop .remove等 fset=frozenset({1,2,3}) fset.

 八、数据类型总结

1、按存储空间的占用分(从低到高)

数字
字符串
集合:无序,即无序存索引相关信息
元组:有序,需要存索引相关信息,不可变
列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改

2、按存值个数区分

标量/原子类型 数字,字符串
容器类型 列表,元组,字典

3、按可变不可变区分

可变 列表,字典
不可变 数字,字符串,元组

4、按访问顺序区分

直接访问 数字
顺序访问(序列类型) 字符串,列表,元组
key值访问(映射类型) 字典

5、练习题:

# 1. 文件a.txt内容:每一行内容分别为商品名字,价钱,个数,求出本次购物花费的总钱数
# apple 10 3
# tesla 100000 1
# mac 3000 2
# lenovo 30000 3
# chicken 10 3
#
a=[
    {'name':'apple','price':10,'count':3},
    {'name':'tesla','price':100000,'count':1},
    {'name':'mac','price':3000,'count':2},
    {'name':'lenovo','price':30000,'count':3},
    {'name':'chicken','price':10,'count':3}
]
list=[]
num=0
res=0
for i in a:
    pri=i['price']*i['count']
    list.append(pri)
    while num < len(list):
        res+=list[num]
        num+=1
print(res)

# 2. 修改文件内容,把文件中的alex都替换成SB
# a='alex is a good teacher, alex has a tesla'
# print(a.replace('alex','SB'))

 九、作业

 

 

 

 

 

 

 

作者:大雄猫
出处:http://www.cnblogs.com/guoxiangqian/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面 明显位M给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/guoxiangqian/p/7505053.html