Python—数据类型
#### 数组和列表 list###
数组:存储同一种数据类型的集合 如scores = [12,13,14]
列表:(打了激素的数组):可以存储任意数据类型的集合
ctrl+Q 查看命令的使用方法
1.列表的创建
示例:
name1 = 'bob'
name2 = 'lily'
name3 = ['ni','hao','wf']
type(name3)
list
2.列表的特性:
示例:
service = ['http', 'ssh', 'ftp']
# 索引
print service[0]
print service[:]
print service[:-1]
# 切片
print service[::-1]
# 重复
print service * 3
# 连接
service1 = ['firewalld', 'mysql']
print service + service1
# 成员操作符
print 'firewalld' in service
print 'firewalld' in service1
# for循环遍历
for i in service:
print i,
for j in service[::-1]:
print j
# 列表里的嵌套列表
service2 = [['nihao',12],['wangfang',18],['hehe',20]]
#索引
print service2[1]
print service2[0]
print service2[::-1]
#切片
print service2[1][0]
print service2[:-1][0]
3.列表的增加:
示例:
service = ['http', 'ssh', 'ftp']
#1.直接在后面追加(只能追加列表类型的)
print service + ['firewalld']
#2.append:追加。追加一个元素到列表中,默认追加到最后
service.append('firewalld')
print service
#3.extend:拉伸,追加多个元素到列表中
service.extend(['my', 'name'])
print service
#4.insert:在指定位置插入元素
service.insert(1, 'haha')
print service
4.列表的删除:
示例:
service = ['http', 'ssh', 'ftp']
#1.如果pop()不传递值的时候,默认(显示)弹出最后一个元素
print service.pop()
#2pop()也可以传递索引值
print service.pop(0)
#3.remove:删除指定的元素
service.remove('ssh')
print service
#4.del关键字 从内存中将整个信息都删除
print service
del service
print service
5.列表的修改:
示例:
service = ['http', 'ssh', 'ftp']
#1.通过索引,重新赋值(给索引值为0的重新赋值为'haha')
service[0] = 'haha'
print service
#2.通过切片,大范围的重新赋值
service[:2] = ['nnn','mmm']
print service
print service[:2] ##显示前两个
6.列表的查看:
示例:
service = ['http', 'ssh', 'ftp','ftp']
#查看列表中的元素出现的次数
print service.count('http')
print service.count('ftp')
#查看指定元素的索引值
print service.index('http')
7.列表的排序:
示例:
service = ['http', 'ssh', 'ftp','ftp']
#1.按照ASCII码排序的
service.sort()
print service
#2.默认的是按照升序排序的,更改默认值
service.sort(reverse=True)
print service
service1 = ['Http', 'anny','ssh', 'ftp','Alice']
#1.默认的排序是大写的ASCII码值小,小写的值大
service1.sort()
print service1
#2.不区分大小写的排序
service1.sort(key=str.lower)
print service1
service1 .sort(key=str.upper)
print service1
#给一个区间,然后排序,默认的是按顺序排列
import random
li = list(range(10))
print li
#将li这个数列打乱输出
random.shuffle(li)
print li
8.练习题
(1)学生管理系统
-系统里面有用户 用户有密码
users = ['root', 'westos']
passwd = ['123', '456']
-用户登陆(判断用户登陆是否成功)
1)判断用户是否存在
2)如果存在:
判断用户密码是否正确:先找出索引
根据psswd【索引值】
如果正确:登陆成功,退出循环
如果错误:重新登陆(三次机会)
3)不存在
重新登陆(三次机会)
代码:
users = ['root', 'westos']
passwd = ['123', '456']
num = 1
count = 0
while num <= 3:
user = raw_input('请输入用户名:')
a = raw_input('请输入密码:')
num += 1
if user in users:
ps = passwd[users.index(user)]
if ps == a:
print '登陆成功!'
break
else:
count += 1
print '请重新登陆,还剩余%d次机会!' %(3-count)
else:
print '三次机会已用完!'
(2)后台管理
-后台管理员只有一个用户:admin 密码:admin
-当管理员登陆成功后,才可以管理用户信息
-管理用户信息包含
添加用户信息
删除用户信息
查看用户信息
退出
代码:
users = ['root', 'westos']
passwd = ['123', '456']
print '管理员登陆'.center(50, '*')
name = raw_input('请输入用户名:')
ps = raw_input('请输入密码:')
if name == 'admin' and ps == 'admin':
print '管理员登陆成功!'
print '用户信息管理'.center(50, '*')
while True:
print """
1.添加用户信息
2.删除用户信息
3.查看用户信息
4.退出
"""
choice = raw_input('请输入你的操作:')
if choice == '1':
print '添加用户信息'.center(50, '*')
addname = raw_input('输入添加用户名:')
if addname in users:
print '用户%s已经存在!' % addname
else:
addps = raw_input('输入添加用户密码:')
users.append(addname)
passwd.append(addps)
print '添加用户%s成功!' % addname
elif choice == '2':
print '用户信息删除'.center(50, '*')
print users
deluser = raw_input('请输入想要删除的用户:')
index = users.index(deluser)
users.remove(deluser)
passwd.pop(index)
print '用户已删除'
elif choice == '3':
print '用户信息'.center(50, '*')
print '\t用户名\t密码'
print '\t%s\t%s' % (users,passwd)
elif choice == '4':
print 'Bye Bye!'
exit
break
else:
print '请输入正确的选择!'
else:
print '管理员登陆失败!'
#### 元组 tuple ###
1.元组的创建
元组(tuple):带了紧箍咒的列表
元组本身是不可变数据类型,没有增删改查(没有.append等功能)
元组内可以存储任意数据类型
示例:
t = (1,2,3,4.0,'star')
print t,type(t)
#元组里面包含可变数据类型,可以间接修改元组的内容
t1 = ([1,2,3],4)
t1[0].append(4)
print t1
#元组如果只有一个元素的时候,后面一定要加逗号,否则数据类型不确定
t1 = ('hello',)
t2 = (1,)
print type(t1),type(t2)
2.元组的特性
name = ('wf','nihao','fentiao')
#索引 切片
print name[0]
print name[:]
print name[-1]
print name[:-1]
print name[1:]
print name[::-1]
#重复
print name * 3
#连接
print name + ('rourou','doubao')
#成员操作符
print 'rourou' in name
print 'wf' in name
3.元组的应用场景
# 1.变量交换数值
a = 1
b = 2
b, a = a, b
# 相当于先把a,b封装成了一个元组(a,b)=(1,2)
# 下面的交换数值,就想相当于
# b = (1,2)[0] a = (1,2)[1]
print a, b
#2.打印变量值
name = 'westos'
age = 10
print 'name:%s,age:%d' % (name, age)
###相当于
t = (name, age)
print 'name:%s,age:%d' % t
#3.元组的赋值:有多少元素,就用多少个变量
t1 = ('westos', '18', 'student')
name1,age1,work = t1
print name1, age1, work
scores = (100,99,88,98)
scores1 = list(scores)
scores1.sort()
print scores1
#相当于 (也可以倒叙排序,和上面的一样 reverse=True)
scores = sorted(scores) ##这个适用于所有数据类型
print scores
### 集合 set ###
1.集合(集合内的元素不能重复)
不支持索引,切片,连接,重复;但是支持for循环操作和成员操作符
示例:
s = {1,2,3,1,2,3,4,5}
print s,type(s)
#如何定义一个空集合
#(列表和元组直接不输入数值就可以定义一个空的)
#但是集合不行
比如:
s = {}
print s ## 输出的s的类型是字典
s1 = set([])
print type(s1)
#去掉列表当中的重复并输出
s2 = [1,2,3,1,2,3,4,5]
s3 = list(set(s2))
print s3
###相当于 先把列表s2转换成集合类型(因为集合不能重复)再把结果转换成列表的形式输出
print list(set(s2))
2.增删
示例:
s = {6,7,8,1,2,3}
#增加
s.add(10)
s.add(9)
print s
#增加多个元素
s.update({4,5})
print s
#删除元素,用pop()默认删除和列表的默认删除不一样
#列表是默认删除最后一个,集合是默认删除第一个
s.pop()
print s
#删除指定的元素
s.remove(8)
print s
3.交集,并集,差集
示例:
s1 = {1,2,3}
s2 = {2,3,4}
#并集
print '并集:',s1.union(s2)
print '并集:',s1 | s2
#交集
print '交集:',s1.intersection(s2)
print '交集:',s1 & s2
#差集
#s1与s2相比,比s2多了什么 s1-s2
print '差集:',s1.difference(s2) #s1-(s1&s2) 结果:[1]
#s2与s1相比,比s1多了什么 s2-s1
print '差集:',s2.difference(s1) #s2-(s1&s2) 结果:[4]
#对等差分:并集-交集
print '对等差分:',s1.symmetric_difference(s2)
print '对等差分:',s1^s2 ##结果:[1,4]
#s1是否为s2的子集
print s1.issubset(s2)
#两个集合是不是相交
print s1.isdisjoint(s2)
练习题:
用计算机生成N个1~1000之间的随机整数,N是用户输入的,对于其中重复的数字,只保留一个,把其余的相同的数字去掉,不同的数对应着不同的学生的学号,数字从小到大排序,按照排好的顺序去找同学作调查,完成去重与排序的工作
#### 字典 dict ###
字典的定义:字典是一个无序的数据集合,使用print输出字典的时候,通常输出的顺序和定义的顺序不太一致
message = {
'name' : 'tom'
'age' : '18'
'height' : '1.80'
'weight' : '75.5'
}
print message
1.定义一个字典
s = {}
print type(s) ##输出的结果是: dict 是一个空字典类型的
d = dirct()
print type(d) ##输出的结果是: dict 是一个空字典类型的
2.字典的特性
#成员操作符(默认判断key值是否存在)
d = dict(a=1,b=2)
print 'a' in d ## True
print 1 in d ## False
#for循环(默认循环遍历字典的key值)
for i in d:
print i, ##a b
3.字典的增加
d = dict(a=1,b=2)
#增或更改key-value值
d['g'] = 10
d['a'] = 20
print d ##{'a':20,'b':2,'g':10}
注意:如果key值存在的时候,更新value值;如果key值不存在,添加key-value值
#增加多个key-value值
d.update({'a':4,'f':1})
print d
d.setdefault('a':5)
print d
注意:setdefault 如果key值已经存在,不做修改;如果key值不存在,添加key-value值
4.字典的删除
d = dict(a=1,b=2,c=3)
#pop():弹出指定的key-value值 括号内必须填key值,否则会报错
d.pop('a')
print d
d.popitem() ##这个是默认弹出第一对key-value值
print d
del d['a'] ##也可以执行删除a这对key-value值
print d
5.字典的修改与查看
service = {
'http':80,
'mysql':3306
}
#查看字典里面所有的key值
print service.keys() ##['http','mysql']
#查看字典里所有的value值
print service.values() ##[80,3306]
#查看字典里面所有的key-value值
print service.items() ##['http':80,'mysql':3306]
#遍历
for k,v in service.items():
print k,'--->',v
for k in service:
print k,service[k]
if 'http' in service:
print service['http']
else:
print 'key not exist!'
get方法:获取指定的key对应的value值
如果key值存在,返回对应的value值;
如果key值不存杂,默认返回None。如果需要指定返回值,传值即可
print service.get('https')
print service.get('https','key not exist!')
6.练习题:
(1)重复的单词:此处认为单词之间以空格为分隔符,并且不包含,和.
-用户输入一句英文句子
-打印出每个单词及其重复的次数
-示例:
-“hello java hello python”
-hello 2
-java 1
-python 1
c
(2)重复数字统计:
-随机生成1000个整数
-数字的范围[20,100]
-升序输出所有不同的数字及其每个数字重复的次数