Python学习day03

一、列表

列表的修改
通过索引的重新赋值

		service = ['http','ftp','ssh']
		print(service)
		service[0]='mysql'			##通过索引改变列表service的第一个元素
		print(service)

在这里插入图片描述
通过切片

			service = ['http','ftp','ssh']
			print(service[:2])
			service[:2] = 'firewalld','iptables'		##通过切片改变列表service的前俩个元素
			print(service[:2])

在这里插入图片描述
列表的查看

			service = ['http','ftp','ssh','http']
			print(service.count('http'))			##查看元素http出现的次数

在这里插入图片描述

	print(service.index('http'))	## 查看指定元素的索引值,默认显示靠前的
	print(service.index('http',2,4))	##查看指定元素的索引值,并指定索引范围

在这里插入图片描述

二、排序

按照ASCII码进行排序

	 service = ['http','samba','nfs','iscsi','http']
	 service.sort()
	 print(service)

在这里插入图片描述

	import random			## 用数字呈现ascii码的排序更直观
	li = list(range(10))
	print(li)						## 按正常从小到大的顺序
	
	random.shuffle(li)		## 按ascii码的排列
	print(li)

在这里插入图片描述

练习

用户登陆系统
练习1:
#users = [‘root’,‘redhat’]
#passwd = [‘123’,‘456’]

1.用户名是否存在
2.如果存在:1)判断密码是否正确(如果正确,登录成功并退出循环)。2)错误(重新登录,只有3次机会)
3.用户不存在(重新登录,只有3次机会)

users = ['root','redhat']
passwd = ['123','456']
i = 0
while i < 3 :				##只有三次机会,需要限制循环次数
    username=input('请输入需要登陆的用户:')
    if username in users:				##判断用户列表内是否有输入的用户名
        userpasswd=input('请输入密码:')
        if users.index(username) == passwd.index(userpasswd):		
        ## 通过索引对应用户和相应的密码
            print('登陆成功')
            exit()
        else:
            print('密码错误,登陆失败,你总共只有三次机会')
            i += 1
    else:
        print('登录失败,该用户不存在,你总共只有三次机会')
      	i += 1

测试:
在这里插入图片描述

########
练习2:
#users = [‘root’,‘redhat’]
#passwd = [‘123’,‘456’]
#1.后台管理员用户:admin,密码:westos
#2.管理员登录后,可管理用户信息
#3.用户信息包括:1添加用户信息,2删除用户信息,3查看用户信息,4退出

	print('管理员登录'.center(40,'*'))
	aduser = input('Username: ')
	adpasswd = input('Password: ')
	users = ['root','redhat']
	passwd = ['123','456']
	if aduser == 'admin' and adpasswd == 'westos':
			print('管理员登录成功!')
			print('用户登录'.center(40, '*'))
			while True:
    				print("""
     						   菜单
   						1.添加用户信息
					    2.删除用户信息
  						3.查看用户信息
    					4.退出
    						""")
    				choice = input('请输入你的选择: ')
    				if choice == '1':
        					print('添加用户信息'.center(40,'*'))
        					adduser = input('添加用户名: ')
        					if adduser in users:
            					print('用户%s已经存在' %adduser)
        					else:
            					addpasswd = input('密码: ')
            					users.append(adduser)
            					passwd.append(addpasswd)
            					print(f"用户{adduser}添加成功")
    				elif choice == '2':
       						print('删除用户信息'.center(40, '*'))
        					deluser = input('删除用户名: ')
        					if deluser in users:
            					delindex = users.index(deluser)
            					users.remove(deluser)
            					passwd.pop(delindex)
            					print(f"删除用户{deluser}成功")
        					else:
            					print(f"用户{deluser}不存在")

    				elif choice == '3':
        					print('查看用户信息'.center(40, '*'))
        					print('\t用户名\t密码')
        					userlenth = len(users)
        					for i in range(userlenth):
            					print('\t%s\t%s' %(users[i],passwd[i]))
					elif choice == '4':
        					exit()

    				else:
        					print('请输入正确的选择!')
		else:
					print('管理员登录失败!')

测试:
在这里插入图片描述

练习3:
栈的实现(栈类似于杯子一样的容器,先进后出,后进先出)
1.入栈 2.出栈 3.栈顶元素 4.栈的长度 5.栈是否为空

	zhan = ['2']
	print('栈的实现'.center(60,'#'))
	while True:
		    print("""
				        菜单
				    1.入栈
				    2.出栈
				    3.栈顶元素
				    4.栈的长度
				    5.退出    
					    """)
		    choose = input('请输入你要进行的内容:')
		    if choose == '1':
			        print('入栈的数据'.center(60,'#'))
			        date = input('请输入需要入栈的数据:')
			        zhan.append(date)
		    elif choose == '2':
			        print('出栈'.center(60,'#'))
			        a = len(zhan)
			        if a == 0:
		     	       print('栈为空,不可以进行出栈操作')
			        else:
			            a = zhan.pop()
			            print('出栈的数据为%s' %(a))
		    elif choose == '3':
			        print('栈顶元素'.center(60,'#'))
			        a = len(zhan)
			        if a == 0:
			            print("栈中没有数据")
			        else:
			            c = zhan[a-1]
			            print('栈顶元素为%s' %(c))
			elif choose == '4':
				       print('栈的长度'.center(60,'#'))
			 		   d = len(zhan)
				       print('栈的长度为%d' %(d))
		    elif choose == '5':
				       exit()
		    else:
			        print('请输入正确的内容')	

测试:
在这里插入图片描述

三、python中常用的内置方法

		min(2,3,4,5)			##显示最小的值
		max(2,3,4,5) 		##显示最大的值

在这里插入图片描述
sum(range(1,101)) ## 一百以内的整数和
sum(range(1,101,2)) ## 一百以内奇数和
sum(range(2,101,2)) ##一百以内偶数和
sum 可以配合range进行求和。
在这里插入图片描述

枚举:返回索引值和对应的value值

	for i,v in enumerate('westos'):
	print(i,v)

在这里插入图片描述

zip

可以把俩个list变成一个list
s1 = ‘abc’
s2 = ‘123’

	for i in zip(s1,s2):
	    print(i)
	    print(' '.join(i))

在这里插入图片描述

四、元组

元组:元组本身是不可变数据类型,没有增删改查
元组可以存储任意数据类型

	t = (1,2.3,'westos',‘redhat’)
	print(t,type(t))

在这里插入图片描述

元组里包含可变数据类型,可以间接修改元组内容

		t1 = ([1,2,3],4)
		t1[0].append(5)
		print(t1)

在这里插入图片描述

只有一个元素的元组

		t2 = ('hello')
		print(t2,type(t2))
		t2 = ('hello',)				##只有一个元素的元组,需要在元素后面加 , 
		print(t2,type(t2))

在这里插入图片描述

元组的特性

元组没有增删改查,但支持索引切片等

索引 & 切片:

		users = ('root','westos','redhat')
		passwds = ('123','456','789')

		print(users[0])		##显示第一个元素
		print(users[-1])		##显示最后一个元素
		print(passwds[::-1])	##到叙
		print(passwds[:2])	##显示前俩个元素

在这里插入图片描述

重复:

	print(users * n)			## 重复显示n次

在这里插入图片描述
连接:

	print(passwds + ('http','https'))

在这里插入图片描述

成员操作符:
判断元素 ‘westos’ 是否在 users 中

		print('westos' in users)
		print('westos' not in users)

在这里插入图片描述

元组可以使用for循环遍历

		for user in users:
	    print(user)						## for循环遍历 users 

在这里插入图片描述

		for index,user in enumerate(users):
	    print(index,'-->',user)		## index 循环遍历索引,user 循环遍历 users

在这里插入图片描述

		for user,passwd in zip(users,passwds):
	    print(user,':',passwd)	## user 和 passwd 分别循环遍历users 和 passwds

在这里插入图片描述

			t = (1,1.2,True,'westos')
			print(t.count('westos'))			##显示元素westos 的个数
			print(t.index('westos'))			## 显示元素westos的索引

在这里插入图片描述

排序

	scores = (100,89,45,77,65)

第一种方式
scoreli = list(scores)
scoreli.sort()
print(scoreli)

第二种方式
scores = sorted(scores)
print(scores)

在这里插入图片描述

例:

	scores = (100,89,45,77,65)

去掉最大的数和最小的数,求剩下三个数的平均值

	minscore,*middlescore,maxscore = scores
				^ *mid 表示所有的中间数
	print(minscore)		## minscore 默认为最小的数
	print(middlescore)	## middlescore 默认为居中间的数
	print(maxscore)		##maxscore 默认为最大的数
	print('最终成绩为: %.2f' %(sum(middlescore) / len(middlescore)))

在这里插入图片描述

五、集合

集合里的元素是不可重复的

		s={1,3,5,7,9,3,2,1,}
		print(s,type(s))

在这里插入图片描述

定义一个空的集合

	s1 = {}
	print(type(s1))			## 直接定义空显示的是 dict 类型
	s2 = set([])				## 利用set转化类型定义
	print(s2,type(s2))

在这里插入图片描述

集合的特性

集合只支持成员操作符和for循环

		s = {1,2,3,4}

对集合进行索引切片等操作会报错。

成员操作符:

		print(1 in s)
		print(1 not in s)

在这里插入图片描述

for 循环

		s={1,3,5,7}
		for i in s;
			print(s)

在这里插入图片描述

集合的常用方法

增加元素

	s = {6,7,8,9}
	s.add(1)			## 增加一个元素
	print(s)

在这里插入图片描述

	s.update({5,3,2})			## 增加多个元素
	print(s)

在这里插入图片描述

删除:

	s = {6,7,8,9}
	s.pop()			## 删除并返回集合中的任意元素
	print(s)
	s.remove(6)		##删除指定元素
	print(s)

在这里插入图片描述

交集 并集 差集

		s1 = {1,2,3}
		s2 = {2,3,4}

并集

		print('并集:',s1.union(s2))			
		print('并集:',s1 | s2)			## 俩种方式都可以完成并集

在这里插入图片描述

交集:

	print('交集:',s1.intersection(s2))
	print('交集:',s1 & s2)

在这里插入图片描述

差集:

		print('差集:',s1.difference(s2)) 	 ##s1 - (s1 & s2)
		print('差集:',s2.difference(s1))

在这里插入图片描述

		s3 = {1,2}
		s4 = {1,2,3}
		print(s4.issuperset(s3))			##s4是否包含s3
		print(s3.issubset(s4))				##s3是否被s4包含
		print(s3.isdisjoint(s4))				##s3是否不在s4内

在这里插入图片描述

集合练习:

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性
他先用计算机生成了N个1~1000之间的随机整数(N<=1000),N是用户输入的,
对于其中重复的数字,只保留一个,把其余相同的数字去掉,不同的数对应
着不同的学生的学号,然后再把这些
数从小到大排序,按照排好的顺序去找同学做调查,请你协助明明完成
“去重”与排序工作

	import random
	s = set([])
	for i in range(int(input('N: '))):
			s.add(random.randint(1,1000))
	print(sorted(s))

在这里插入图片描述

六、字典

字典是一个无序的数据集合
通常输出顺序和定义顺序不一样
字典有 key 值和value值 {‘key’:‘value’}

	users = ['user1','user2']
	passwds = ['123','456']

	print(list(zip(users,passwds)))
	print(dict(zip(users,passwds)))			## 以列表 来与dict字典比较更为直观

在这里插入图片描述

#字典中value值可以是任意数据类型

s = {
	 'westos':[100,99,88],
 	'redhat':[50,60,70]
	}
print(s,type(s))

在这里插入图片描述

字典的嵌套

在字典里面可以嵌套字典

	students = {
			'03113009':{
    					'name':'wsp',
    					'age':18,
  					 	'score':90
							 },
			'12345678':{
    					'name':'Tom',
    					'age':22,
    					'score':80
							}
				}
	print(students['12345678']['name'])			## 可以精准的查看想要查看的元素

在这里插入图片描述

所有的key的value值一样

	print({}.fromkeys({'1','2'},'hahaha'))

在这里插入图片描述

字典的特性

不支持索引切片

		d = dict(a=1,b=2)
		print(d[0])

在这里插入图片描述

字典的key值唯一,所以字典的重复显示没有意义。

成员操作符:

			print('a' in d)
			print('a' not in d)

在这里插入图片描述

for 循环:

			for i in d :
				print(i)				##循环key值
				print(i,d[i])		##循环key值和索引

在这里插入图片描述

字典的增加

	services = {
			'http':80,
			'ftp':21,
			'mysql':3306
			}

增加一个元素
如果key值存在,则更新对应的value值
如果key值不存在,添加key-value值

	services['ssh'] = 22			##添加key-value值
	print(services)
	services['http'] = 443			##更新value值
	print(services)

在这里插入图片描述

添加多个key-value值

		services_backup = {
						'https':443,
						'tomcat':8080,
						'ssh':22
							}

		services.update(services_backup)	##在services内添加 serice_backup
		print(services)

在这里插入图片描述

		services.update(flask=9000,http=8000)	
				 ##在serices内更新http的value值和添加key值flask及value值9000
		print(services)

在这里插入图片描述

字典的删除

			services = {
					    'http':80,
					    'ftp':21,
					    'mysql':3306
						}

		del services['http']			##指定删除 ‘http’元素
		print(services)

在这里插入图片描述

pop删除指定的key的key-value
如果key存在,删除,并返回删除key对应的value
如果key不存在,报错

	item = services.pop('mysql')
	print(servie)
	print(item)

在这里插入图片描述

没有的元素会报错
在这里插入图片描述

popitem默认删除最后一个key-value

	item = services.popitem()
	print(item)
	print(services)

在这里插入图片描述

清空字典内容

		services.clear()
		print(services)

在这里插入图片描述

字典的查看

	services = {
				'http':80,
				'ftp':21,
				'mysql':3306
				}

查看字典的key值

		print(services.keys())

在这里插入图片描述

查看字典的value值

		print(services.values())

在这里插入图片描述

查看字典对应的key-value值

		print(services.items())

在这里插入图片描述

查看指定key的value值
key不存在,默认返回None
key不存在,有default,则返回default

	print(services.get('http'))

在这里插入图片描述

指定key不存在时,输出none
在这里插入图片描述

get方法获取指定key值对应的value值
如果key值存在,返回对应的value值
如果key值不存在,默认返回None,如果需要指定返回值,传值即可

	print(services.get('https','key not exist'))
										^  指定的返回值

在这里插入图片描述

字典练习

数字统计:
1)随机生成1000个整数
2)范围[20,100]
3)升序输出所有不同的数字及每个数字重复的次数

		import random

		nums = []
		for i in range(1000):
				nums.append(random.randint(20,100)
				sorted_nums = sorted(nums)			##排序添加到字典中
				num_dict = {}
				for num in sorted_nums:
						if num in num_dict:
    							num_dict[num] += 1
						else:
    							num_dict[num] = 1
		print(num_dict)

测试:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值