元组与字典

for循环

  • for循环,遍历容器内的数据
list1 =[1,2,3,4,5,6,7]
for i in list1:
   print(i)
else:
    print('循环正常结束')
  • 注意: for循环的代码块会执行多次,序列中有几个元素就会执行几次。每执行一次就会将序列中的一个元素赋值给变量,所以我们可以通过变量来获取列表中的元素

range函数

  • range(start, stop[, step])
  • 语法:range(开始数据,结束数据,步长) 左闭右开区间,可以省略开始数据,步长,与切片类似
range(9) #range(0,9,1)相当于[0,1,2,3,4,5,6,7,8]
for i in range(9):
   print(i)
print(list(range(9)))

元组

  • 元组表现形式tuple
  • 元组是一个不可变序列(一般当我们希望数据不改变时,我们使用元组,其他情况下基本都用列表)
  • 使用()创建元素
  • 元组不是空元组至少有一个 逗号(,) 当元组不是空元组时括号可以省略
  • 元组解包指将元组当中的每一个元素都赋值给一个变量
tuple1 =(1,2,3,True)#不可变的数据,我们通常称之为常量
print(tuple,type(tuple1))
print(tuple1[1:3])#可以切片,但是不改变元组
#空元组的创建
tuple3 =()
#如果你创建的不是一个空元组,那么它至少需要一个括号,当你只做了一个变量赋值的时候,元组的括号可以省略
tuple2 = (10,)
print(type(tuple2))
  • 元组的拆包
tuple5 = (1,2,3,4)
a,b,c,d = tuple5
print(a,b,c,d)
a,*b,c = tuple5# *号表示匹配所有,但不能存在两个或及以上的*
print(a)
print(b)#b变成了列表
print(c)

字典

字典的介绍

  • 字典属于一种新的数据结构称为映射(mapping)
  • 字典的对应关系:名称:数据 mappingng映射关系 key:value {key : value} dict表示
  • 字典的作用和列表类似,都是用来存储对象的容器
  • 列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反
  • 在字典中每一个元素都有唯一的名字,通过这个唯一的名字可以找到指定的元素
  • 这个唯一的名字我们称之为key 通过key可以快速查询value 也可以称之为值
  • 字典我们也称之为键值对(key-value)结构
  • 每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item)
  • 创建一个有数据的字典 语法 {key:value}
  • 字典的值可以是任意对象 字典的键可以是任意的不可变对象(int str bool tuple…)
  • 字典的键是不能重复的,如果出现重复的后面的会替换前面的

字典的使用

  • dict()函数来创建字典
  • get(key[,default]) 根据键来获取字典的值。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值
  • update() 将其他字典的key-value添加到当前的字典当中
  • del 删除字典中的key-value
  • popitem() 删除字典最后的一个key-value 这个方法是有返回值的。删除之后它会将删除的key-value作为返回值返回
  • pop(key[,default]) 根据key删除自定中的value。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值
dict1 = {}
# 一个key-value数据我们称之为一组数据,也叫一项,还叫键对,用item来表示
dict2 = {'name':'切尔西','birth':1905,'类别':'football club'}
dict3 =dict(name='切尔西',birth=1905,类别='football club')#字典2与字典3是一样的 但是方法不一样
dict5 = dict([('name','切尔西'),('age','18'),('类别','football club')])#方法3
dict6 ={
   'name':'切尔西',
   'birth':1905,
   '类别':'football club'}#方法4

字典特性当有相同的key名称时,后面的键值对会把前面的覆盖掉

dict4 = {'name':'切尔西','birth':1905,'类别':'football club','name':'CHELSEA'}#以为name有重名所以第一个name存储的切尔西被替换了

字典的增删改查

  • 查询:
print(dict1['name'])#方法1
#dict.get() 当使用get查询不存在的key的时候,不会报错,会返回一个none
print(dict1.get('sex'))#不会报错返回none
print(dict1['sex'])#会报错
  • 修改
dict6['name']='CHELSEA'#方法一 直接修改
# dict.setdefault(key,value)  向字典中添加一个key-value,如果存在不做任何改变,如过没有直接添加
dict6.setdefault('rival','阿森纳')

在python2中,字典分为有序字典和无需字典,python3都是有序字典

  • 更新
dict7 = {'1':1}
dict6.update(dict7)#对dict6加入了一个新的key-value,方法1
# dict[key]=value,当key存在时是修改,不存在时就是添加key-value
  • 关键字删除
del dict1['1']#方法1

#dict.popitem()
res = dict6.popitem()#方法2

#dict.pop()
res2 =dict6.pop('2','当前数据不存在')#方法3

# dict.clear()
dict6.clear()#直接清空字典

copye()

copy() 方法用来对字典进行潜复制
注意:潜复制只会复制字典本身,如果字典中还有个字典是不会进行复制的

遍历字典

我们主要可以通过3种方式对字典进行遍历

  • keys() 该方法返回字典所有的key
  • values() 该方法返回一个序列 序列中保存有字典的值
  • items() 该方法会返回字典中所有的项 它返回一个序列,序列中包含有双值子序列 双值分别是 字典中的key和value

作业

要求从键盘输入用户名和密码,校验格式是否符合规则,如果不符合,打印出不符合的原因,并提示重新输入
• 用户名长度6-20,用户名必须以字母开头
• 密码长度至少6位,不能为纯数字,不能有空格

user_name = input('请输入用户名:')
user_password = input('请输入密码:')
if user_name[0].isalpha():
    if len(user_name) >=6 and len(user_name)<=20:
        print('用户名输入成功')

    else:
        print('用户名长度为6-20请重新输入')

else:
       print('用户名必须以字母开头请重新输入')

if ' '  in user_password:
    print('密码不能有空格')
elif len(user_password) >= 6:
       if user_password.isdigit():
          print('密码不能由纯数字组成')
       else:
           print('密码输入成功')
else:
    print('密码小于6位,请重新输入')

给用户9次机会 猜1 - 10 个数字随机来猜数字。如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误。最终结果要求用户怎么也猜不对
思路:给一个1-10的列表,你每输入1个数字,你输入的数字就从列表中删除,这样10个数字你猜了9次,怎么菜也猜不对

list_com = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
import random
i= 0
while i<9:
    i=i+1
    num=int(input('请输入1-10的整数'))
    if 1<=num<=10:
        if num not in list_com :
            print(f'你这个数字已经猜过了,还有{9-i}次机会')
        else:
            list_com.remove(num)
        print(f'你猜错了,还有{9-i}次机会')
    else:
        print(f'你猜的数字有问题,还有{9-i}次机会')
print(f'正确的数字是{random.choice(list_com)}')

现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中

import random
office = [[],[],[]]
teacher = ['老王',2,3,4,5,6,7,8]
for i in range (1,9):
    s = random.randint(0, 2)
    office[s].append(teacher[i-1])
print(office)

a = {“name”:“123”,“data”:{“result”:[{“src”:“python1”},{“src”:“python2”},{“src”:“python3”}]}} 找到python1/python2/python3

a = {"name":"123","data":{"result":[{"src":"python1"},{"src":"python2"},{"src":"python3"}]}}
b = a.get('data')
c = b.get('result')
for i in c:
    print(i.get('src'))

有如下值列表[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key的值中,将小于66值保存至第二个key的值中。

under_66 = []
above_66 = []
list1 = [11,22,33,44,55,66,77,88,99,90]
for i in list1:
    if i == 66:
        continue
    if i < 66:
         under_66.append(i)
    else:
        above_66.append(i)
dict_66 = {'小于66':under_66,'大于66':above_66}
print(dict_66)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值