基本数据类型



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

type(数据)     查看数据类型

id  (数据)     查看内存地址


1数字intfloatcomplex


作用:年纪、等级、薪资、×××号、qq号等数字相关的


a. int(整型数字)

age=10 #age=int(10)
print(type(age)) 

输出:
<class 'int'>


32位机器上,整数的位数为32位,取值范围为-2**312**31-1,即-21474836482147483647

64位系统上,整数的位数为64位,取值范围为-2**632**63-1,即-92233720368547758089223372036854775807

long(长整型数字)

C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。

注意:

  1.自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整    数数据后面不加字母L也不会导致严重后果了

  2.Python3里不再有long类型了,全都是int


b.浮点数float

salary=3000.3 #salary=float(3000.3)
print(type(salary))

输出:
<class 'float'>


c.复数(包含实部和虚部)

x=1-2j
print(x.real)          #real查看实部
print(x.imag)          #imag查看虚部输出:
1.0
-2.0


d.进制之间的转换

age=10 #age=int(10)
print(bin(age)) #10->2十进制转二进制
#1010  1*(2**3)+1*2=10
print(oct(age)) #10->8 十进制转八进制
print(hex(age)) #10->16 十进制转十六进制 

输出:
0b1010
0o12
0xa


2字符串


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

定义:在单引号/双引号/三引号,由一串字符组成

python中,加了引号的字符都被认为是字符串(引号:单引号、双引号、三引号都可以),字符串也可以进行数学运算,但只有相加或相乘,而且字符串的拼接只能是双方都是字符串,不能跟数字或其它类型拼接

常用操作:

a.移除空白strip

name=input('username: ').strip()
print(name)或
name=input('username: ')
print(name.strip())

 

也可以移除其他特殊字符

name='***egon********'
print(name.strip('*'))

print(name.lstrip('*'))               #移除左边的特殊字符
print(name.rstrip('*'))               #移除右边的特殊字符

 

b.切分split

user_info='root:x:0:0::/root:/bin/bash'
print(user_info.split(':')[5])        #指定:为分隔符,取第6段

 

也可以指定切割次数

cmd_info='get|a.txt|333333333'        #取get这个字符串
print(cmd_info.split('|')[0])
print(cmd_info.split('|',1)[0]        #指定切割1次

 

c.长度len

计算字符串的长度

name='egon'
# print(name.__len__())
print(len(name))       #name.__len__()


d.切片

name='hello world'
print(name[1])
print(name[2])
print(name[3])
print(name[1:7:2])            #含头不含尾,取第2-6个字符,指定步长为2

 

e.其他方法

startswith()  以括号里的内容开头

endswith()   以括号里的内容结尾

name='ab_cd'
print(name.endswith('cd'))
print(name.startswith('ab'))输出:(布尔值)
True
True

 

replace(老的值,新的值,替换次数替换

name='tom say :i have one tesla,my name is tom'
print(name.replace('tom','john',1))输出:
john say:i have one tesla,my name is alex

 

format  的三种方法

print('{} {} {}'.format('egon',18,'male'))    
print('{0} {1} {0}'.format('egon',18,'male'))
print('NAME:{name} AGE:{age} SEX:{sex}'.format(age=18,sex='male',name='egon'))

 

sdigit() 判断是否为数字

num='123'
print(num.isdigit())

输出:(返回布尔值)
True

#判断输入内容是否为数字
oldboy_age=73
while True:
    age=input('>>: ').strip()                 #移除空格
    if len(age) == 0:continue     
    if age.isdigit():
        age=int(age)
        print(age,type(age))

 

find()        查找字符所在的位置(下标),如果未找到字符不报错

index()        查找字符所在的位置(下标),如果未找到字符会报错

count()       统计查找的字符有多少个

默认是从左往右查找

rfind()rindex()       从右往左查找

name='egon hello'
print(name.find('o'))
print(name.find('x'))
print(name.find('o',3,6))      #在第4到第6个之间查找字符

print(name.index('o'))
print(name.index('x'))
print(name.count('o',1,3))     #顾头不顾尾,如果不指定范围会查找所有

 

join()          更改分隔符

l=['egon','say','hello','world'] #类别内容必须都是字符串
print(':'.join(l))输出:
egon:say:hello:world

 

center()              字符居中

ljust()               字符左对齐

rjust()               字符右对齐

zfill()              字符右对齐(默认填充字符为0

name='egon'
print(name.center(30,'*'))     #指定宽度30,填充字符为*
print(name.ljust(30,'*'))
print(name.rjust(30,'*'))
print(name.zfill(30))          #填充字符为0输出:
*************egon*************
egon**************************
**************************egon
00000000000000000000000000egon

 

expandtabs()          指定tab键的空格数量

name='egon\thello'
print(name)
print(name.expandtabs(1))

 

lower()       字符全变为小写字符

upper()       字符全变为大写字符

name='EGON'
print(name.lower())

name='eg'
print(name.upper())

 

capitalize()        首字母大写

swapcase()       大小写翻转

title()         每个单词的首字母大写

name='egon say'

print(name.capitalize()) #首字母大写
print(name.swapcase()) #大小写翻转
msg='egon say hi'
print(msg.title()) #每个单词的首字母大写

 

isalnum()          判断字符串由数字和字母组成

isalpha()           判断字符串只由字母组成

name='egon123'
print(name.isalnum()) #字符串由字母和数字组成
name='egon'
print(name.isalpha()) #字符串只由字母组成

输出:(返回布尔值)
True
True

 

判断数字类型

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

# isdigit能判断bytes,unicode,最常用的
print(num1.isdigit())
print(num2.isdigit())
print(num3.isdigit())
print(num4.isdigit())


# isdecimal能判断unicode
print(num2.isdecimal())
print(num3.isdecimal())
print(num4.isdecimal())


# isnumberic能判断unicode,汉字,罗马
print(num2.isnumeric())
print(num3.isnumeric())
print(num4.isnumeric())

 

3布尔值(bool

主要用记逻辑判断

只有两个值:

True()

False()

练习:

判断布尔值

>>>True or Flase and Flase

True

 

4列表

定义:[]内可以有多个任意类型的值,使用,分割

my_girl_friends=list(['alex','wupeiqi','yuanhao',4,10,30])

可以简写为:

my_girl_friends=['alex','wupeiqi','yuanhao',4,10,30]

可以存放多个值,每个值可以对应任意一种数据类型

names=[‘alex’,’egon’,’lyndon’]

要取列表内的元素,需要通过下标,从0开始


a.索引(根据下标取)

my_girl_friends=['alex','wupeiqi','yuanhao',4,10,30]
print(my_girl_friends[2])

 

b.切片

my_girl_friends=['alex','wupeiqi','yuanhao',4,10,30]
print(my_girl_friends[1:3])


c.追加

my_girl_friends=['alex','wupeiqi','yuanhao',4,10,30]
my_girl_friends.append('oldboy')

 

d.删除

pop()     未指定索引的话,从最后开始删除

remove()    按照值删除

my_girl_friends=['alex','wupeiqi','yuanhao',4,10,30]
my_girl_friends.pop()          #删除最后一个
my_girl_friends.pop(0)         #指定索引,删除第一个
my_girl_friends.remove('yuanhao')     #删除yuanhao

 

e.统计长度(统计的是列表内元素的个数)

my_girl_friends=['alex','wupeiqi','yuanhao',4,10,30]
my_girl_friends.__len__()
print(len(my_girl_friends))

 

f.in成员运算

my_girl_friends=['alex','wupeiqi','yuanhao',4,10,30]
print('wupeiqi' in my_girl_friends)输出:(返回布尔值)
True


g.插入

insert()             插入到指定位置之前

my_girl_friends=['alex','wupeiqi','alex','yuanhao',4,10,30]
my_girl_friends.insert(1,'Sb')


其他操作:

clear()        清除列表内容

copy()        复制列表内容到新的列表

count()       统计列表内元素的个数

extend()      一次添加多个元素

index()        查看元素下标

reverse()     翻转列表

sort()         从小到大排序

 

#队列:先进先出

方法一:

使用append追加,使用pop从第一个开始取

fifo=[]
#入队
fifo.append('first')
fifo.append('second')
fifo.append('third')
print(fifo)
#出队
print(fifo.pop(0))
print(fifo.pop(0))
print(fifo.pop(0))

 

方法二:

使用insert插入元素到第一,这样后插入的元素就排在前面,然后使用pop默认从最后一个开始取

#入队
# fifo.insert(0,'first')
# fifo.insert(0,'second')
# fifo.insert(0,'third')
# print(fifo)
#
# #出队
# print(fifo.pop())
# print(fifo.pop())
# print(fifo.pop())

 

#堆栈:先进后出



 

5字典

作用:存多个值,key-value存取,取值速度快,字典内的键值对是无序的,不能使用下标取值

定义:key必须是不可改变类型,也成为可hash类型,value可以是任意类型,不可变的数据类型都可以当做字典的key

info={'name':'egon','age':18,'sex':'male'}
#本质

info=dict({'name':'egon','age':18,'sex':'male'})



采用key:value的方式存储值,可以存放多个值

dic={‘name’:’egon’,’passwd’:123}

字典通过key来取value


 

可变数据类型(或称为不可hash数据类型):

      id不变

      type不变

      值变了

列表属于可变类型,数字和字符串都是不可变类型

a./

info={'name':'egon','age':18,'sex':'male'}
print(info['age'])     #取出key为age的value值
print(info.get(‘age’))     #根据key取value值,如果不存在不会报错
info['height']=1.80    #存入一个key=height,value=1.80的元素

 

b.删除

pop(key,none)        按照key删除,如果key不存在,则显示none,不会抛出异常

info={'name':'egon','age':18,'sex':'male'}
print(info.pop('name'))
print(info.pop('asdfsadfasdfasfasdfasdfasdf',None))

 

其他方法:

popitem()         会随机的删除字典中的一个键值对

keys()              会取出字典中所有的key           

values()      会取出字典中所有的value    

items()             会把字典以一个列表的形式打印出来,字典中的元素以列表中的元组表示

copy()             复制到一个新字典

clear()              清空字典

info={'name':'egon','age':18,'sex':'male'}
print(info.popitem())         #随机删除字典中的一个键值对

print(info.keys())            #取出字典中所有的key
print(info.values())          #取出字典中所有value

print(info.items())
for key,value in info.items(): # key,value=('name','egon')
    print(key,value)


fromkeys(keys,value)         keys用列表的形式,列表内为多个key,一个value对应多个key

info={'name':'egon','age':18,'sex':'male'}
dic=info.fromkeys(['name','age','sex'],11111111)

输出:
{'name': 11111111, 'age': 11111111, 'sex': 11111111}

 

老字典.update(新字典)   用新的字典更新老的字典

setdefault()       一个key使用列表的方式储存多个vaule

d={}
d.setdefault('hobby',[]).append('play1') #d['hobby']
d.setdefault('hobby',[]).append('play2') #d['hobby']
d.setdefault('hobby',[]).append('play3') #d['hobby']
print(d)

输出:
{'hobby': ['play1', 'play2', 'play3']}


6、元组


作用:存多个值,相当于一个元素不可改变的列表,主要用于读

定义:使用()进行定义,可以当做字典的key

a.索引

index()        根据下标取值

age=(11,22,33,44,55,33)# 本质age=tuple((11,22,33,44,55))
print(age.index(33))

 

b.长度

len()           计算长度

count()       统计元素的个数

age=(11,22,33,44,55,33)
print(len(age))
print(age.count(33))

 

c.切片

age=(11,22,33,44,55,33)
print(age[1:4])

 

练习:简单购物车

打印商品信息,用户输入商品名和购买个数,则将商品名,价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求用户重新输入

msg_dic={
'apple':10,
'tesla':100000,
'mac':3000,
'lenovo':30000,
'chicken':10,
}
goods_l=[]

while True:
    for key in msg_dic:
        # print('Goods Name:%s Price:%s' %(key,msg_dic[key]))
        print('\033[43mName:{name} Price:{price}\033[0m'.format(price=msg_dic[key],name=key))
    choice=input('your goods name>>: ').strip()
    if len(choice) == 0 or choice not in msg_dic:continue
    count=input('your count>>: ').strip()
    if count.isdigit():
        goods_l.append((choice,msg_dic[choice],int(count)))
    print(goods_l)



7、集合

作用:去重,关系运算

定义:由不同元素组成的集合,集合中是一组无序排列的hash值(也就是集合内的值都是不可变数据类型),集合内的元素唯一,可以作为字典的key,集合的目的是将不同的值存放在一起,不同的集合之间用来做关系运算,无需纠结于集合的单个值

 

a.成员运算

in not in

结果返回布尔值

 

b.关系运算

&      交集

|      并集

-     差集

^      对称差集

>=     父集

<=     子集

父集、子集会返回布尔值

# 关系运算
s1={1,10,11,22}
s2={1,11,33}

# 交集
print(s1 & s2)

# 并集
print(s1 | s2)

# 差集
print(s1 - s2)
print(s2 - s1)

# 对称差集
print(s1 ^ s2)

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

# 子集
print(s1 <= s2)
print(s2 <= s1)

 

c./

add()          增加元素(必须是不可变类型)

pop()         删除元素(随机删)

remove()        删除元素(指定元素名,元素不存在会报错)

discard()     删除元素(指定元素名,元素不存在不会报错)

 

d.方法

使用方法来表示各种集合

intersection             交集

union                并集

difference                  差集

symmetric_difference           对称差集

 


总结:

按存值个数区分
    标量/原子类型:数字,字符串
    容器类型:列表,元组,字典

按可变不可变区分
    可变:列表,字典
    不可变:数字,字符串,元组

按访问方式区分
    直接访问:数字
    按照索引访问(序列类型):字符串,列表,元组
    key访问(映射类型)    字典