第五天 数据类型(上)

时间:2021-05-10 09:45:38

本周学习内容:

Monday:
基于本数据类型与内置方法:
数字类型: int float
字符串类型
列表类型

Tuesday:
元组类型
字典类型
集合类型

Wednesday:
字符编码
文件处理part1

Thursday:
文件处理part2

Friday:
函数基础

一:基本使用

1 用途

2 定义方式

3 常用操作+内置的方法

二:该类型总结

1 存一个值or存多个值

    只能存一个值

    可以存多个值,值都可以是什么类型

2 有序or无序

1、有序:但凡有索引的数据都是有序的

Print (变量名[0])

3 可变or不可变

    !!!可变:值变,id不变。可变==不可hash

!!!不可变:值变,id就变。不可变==可hash

x=10
print(id(x))
x=11
print(id(x))
id不同int不可变,可hash

y=['a','b','c']
print(id(y))
y[0]='A'
print(y)
print(id(y))

id值相同list可变,不可hash

一: 整型int
基本使用
1、用途: 记录年龄\等级\各种号码

2、定义方式:
age=18 # age=int(18)

x=int('123') #只能将纯数字的字符串转换成整型
print(type(x))
print(int(3.7))

3、常用操作+内置的方法
赋值\比较\算术

    该类型总结
存一个值

不可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)
print(hash(10))
print(hash([1,2,3]))

二 浮点型float
基本使用

1 用途:记录身高\体重\薪资

2 定义方式

salary=1.3 #salary=float(1.3)

x=float('3.1')

print(x,typr(x))#=>3.1 float

3 常用操作+内置方法

赋值\比较\算术

该类型总结

存一个值

不可变1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

x=3.1

print(id(x))

x=3.2

print(id(x))

id不同

了解:

复数complex

x=1-2j

print(x,type(x))#=>(1-2j) <class'complex'>

print(x.real)#=>1.0

print(x.imag)#=>-2.0

长整型long

Python2中使用

Python3中无

其他进制=>十进制

十进制:0-9

11=1*10^1+1*10^0

二进制: 0 1

11=1*2^1+1*2^0

八进制:0-7

11=1*8^1+1*8^0

十六进制:0-9 A-F

11=1*16^1+1*16^1

十进制=>其他进制
print(bin(13)) # 十进制=>二进制
print(oct(13)) # 十进制=>八进制
print(hex(13)) # 十进制=>十六进制

 

三 字符串int

基本使用=

1 用途:记录描述性质的特征,比如名字\地址\性别

2 定义方式:在单引号\双引号\三引号内包含的一串字符

msg='aaa' "bbb"'#msg=str('aaa"bbb"')

可将任意类型转换成字符串

str(1)

str(1.3)

x=str([1,2,3])

print(x,type(x))#=>[1,2,3] <class'str'>

3 常用操作+内置方法

优先掌握的操作(*****):

1 按索引取值(正向取+反向取):只能取

msg='hellp word'

print(msg[0])#=> h

print(msg[5])#=> 

print(msg(len(msg)-1)#=>d

print(msg[-1])#=>d

msg[0]='H'#=>只能取,不能改

 

2 切片(顾头不顾尾,步长):想要从一个大字符串中切出一个小字符串

msg='hello word'

print(msg[0:5])#=>hello

print(msg[0:5:2]#=>hlo

了解

msg='hello world'
print(msg[-1:-5:1])
print(msg[-1:-5:-1]) #d l r o
print(msg[0:5:1])

print(msg[-1::-1]) #掌握

3 长度len

msg='你好啊a'
print(len(msg))#=>4

4、成员运算in和not in
msg='yangyuanhu 老师是一个非常虎的老师'
print('yangyuanhu' in msg)
print('虎' not in msg)
print(not '虎' in msg)

5、移除字符串左右两边的字符strip:默认去空格
pwd=' 1 23 '
res=pwd.strip(' ')
print(res)

pwd=input('>>: ').strip() #pwd='123'

if pwd == '123':
print('密码输入正确')

pwd='******12*3****'
print(pwd.strip('*'))

pwd='****/&^**123**^*/*&'
print(pwd.strip('*/&^'))
print(pwd.strip('*/&')) #^**123**^

6、切分split:针对有规律字符串按照某个字符切成列表
info='yyhdsb|18|female'
li=info.split('|',1)
 print(li)

7、循环
 msg='hello'

 for item in msg:
 print(item)


该类型总结

1 存一个值

2 有序

3 不可变

(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)
s1='hello'
print(id(s1))
s1='world'
print(id(s1))

id不同不可变,可hash

需要掌握的操作

1 strip,lstrip,rstrip

print('****egon***'.strip('*'))
print('****egon***'.lstrip('*'))
print('****egon***'.rstrip('*'))

2 lower,upper

print('AAAbbbb'.lower())#=>aaabbbb

print('AAAbbbb'.upper())#=>AAABBBB

3 startswith,endswith

print('alex is sb'.startswith('alex'))

print("alex is sb'.endswith('sb'))

4 formall的三种玩法

print('my name is %s my age is %s'%('egon',18))

print('my name is %s my age is %s'%(18,'egon')

print('my name is {name} my age is {age}'.format(age=18,name='egon')

了解

print('my name is {} my age is{}'.format(18,'egon'))

print('my name is {0} my age is {1}'.format(18,'egpn'))

print('my name is {1} my age is {0}'.format(18,'egon'))

5 split,rsplit

msg='a:b:c:d:e'

print(msg.split(':',1))#=>['a','b:c:d:e']

print(msg.rsplit(':',1))#=>['a:b:c:d','e']

6 join

msg='a:b:c:d:e'

list1=msg.split('':)

msg1=':'.jion(list)

print(msg)

 

info='egon:123:male'

list1=info.split(':')

print(list1)

 

print(':'.join(list1))

 

7 replace

msg='alex is alex alex is hahaha'

print(msg.replace('alex','SB',1)

 

8 isdigit

print('123',isdigit())#只能判断纯数字的字符串

print('12.3'.isdigit())

age_of_db=30
inp_age=input('>>>: ').strip()
if inp_age.isdigit():
  inp_age=int(inp_age)
  if inp_age > age_of_db:
    print('too big')
  elif inp_age < age_of_db:
    print('too small')
  else:
    print('you got it')

了解的操作(**)

四 列表 list

基本使用

1、用途:记录多个值,比如人的多个爱好

 2、定义方式: 在[]内用逗号分隔开多个任意类型的值

li=[1,2,3]  li=list([1,2,3])

 

x=list('hello')

x=list({'a':1,'b':2,'c':3})

print(x)

 

3、常用操作+内置的方法

优先掌握的操作:

1、按索引存取值(正向存取+反向存取):即可存也可以取

li=['a','b','c','d']

print(li[-1])

li[-1]='D'

print(li)

 

li[4]='e'

del li[0]

print(li)

2、切片(顾头不顾尾,步长)

li=['a','b','c','d']

print(li[0:3])

 

3、长度

print(len(li))

 

4、成员运算in和not in

users=['egon','lxx','yxx','cxxx',[1,2,3]]

print('lxx' in users)

print([1,2,3] in users)

print(1 in users)

 

5、追加

li=['a','b','c','d']

print(id(li))

li.append('e')

li.append([1,2,3])

print(li,id(li))

 

6、删除

li=['a','b','c','d']

按照元素值去单纯地删除某个元素

del li[1]

res=li.remove('c')

print(li)

print(res)

按照元素的索引去删除某个元素并且拿到该元素作为返回值

res=li.pop(1)

print(li)

print(res)

 

7、循环

li=['a','b','c','d']

for item in li:

    print(item)

 

该类型总结

1 存多个值

2 有序

3 可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

print(hash([1,2,3]))

需要掌握的操作

li=['a','b','c','d','c','e']

print(li.count('c'))

li.extend([1,2,3])#=>['a','b','c','d','e',1,2,3]

li.append([1,2,3])#=>['a','b','c','d','e',[1,2,3]]

 

print(li)

print(li.index('z'))

print(li.index('b'))

print(li.index('d',0,3))

 

li.insert(1,'egon')

print(li)

 

li=[3,1,9,11]

li.reverse()

print(li)

 

li.sort(reverse=True)

print(li)

 

练习

队列: 先进先出

q=[]

入队

q.append('first')

q.append('second')

q.append('third')

print(q)

出队

print(q.pop(0))#=>first

print(q.pop(0))#=>second

print(q.pop(0))#=>third

 

堆栈: 先进后出

q=[]

入栈

q.append('first')

q.append('second')

q.append('third')

出栈

print(q.pop(-1))#=>third

print(q.pop(-1))#=>second

print(q.pop(-1))#=>first

 

作业一:

写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)
name = " aleX"
 1)    移除 name 变量对应的值两边的空格,并输出处理结果
print(name.strip(' '))
aleX 2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果print(name.startswith('al')) False

 3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果

print(name.endswith('X'))
True
4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
print(name.replace('l','p'))
apeX
5) 将 name 变量对应的值根据 “l” 分割,并输出结果。
print(name.split('l'))
[' a', 'eX']
6) 将 name 变量对应的值变大写,并输出结果
print(name.upper
())
ALEX
7) 将 name 变量对应的值变小写,并输出结果
print(name.lower())

 8) 请输出 name 变量对应的值的第 2 个字符?
print(name[2])
9) 请输出 name 变量对应的值的前 3 个字符?
print(name[0:3])
al
10) 请输出 name 变量对应的值的后 2 个字符?
print(name[-1:-3:-1])
Xe
11) 请输出 name 变量对应的值中 “e” 所在索引位置?
print(name.index('e')
3

 12) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
print(name[0:len(name)-1])
ale

作业二:
1. 有列表data=['alex',49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日赋值给不同的变量
name,age,Firthday=data
year,month,day=Firthday
2. 用列表模拟队列
l=[]
l.append('first')
l.append('second')
l.append('third')
print(l)
print(l.pop(0))
print(l.pop(0))
print(l.pop(0))
 3. 用列表模拟堆栈
l=[]
l.append('first')
l.append('second')
l.append('third')
print(l)
print(l.pop())
print(l.pop())
print(l.pop())
 4. 有如下列表,请按照年龄排序(涉及到匿名函数) l=[ {'name':'alex','age':84}, {'name':'oldboy','age':73}, {'name':'egon','age':18},

练习三:
#简单购物车,要求如下:
实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求用户重新输入  

les=True
while les:
name=input('输入商品名>>:').strip()
if name in msg_dic:
number = input('购买个数>>:').strip()
if number.isdigit():
nuber = int(number)
print(name, msg_dic[name], nuber, msg_dic[name] * nuber)
les = 0
else:
print('请重新输入')
else:
print('请重新输入')