从c++到python自学篇列表/元组/字典及练习题

前言

通过学习python,会发现python的语法真的很强大,如果用c++的思维写python会变的很复杂,在python中有很多方法可以直接使用,不必再去写好几行代码去实现,这就是python的智能之处吧。
这篇帖子呢

列表

python中的列表和c++的数组很像,同样是存储多个数据。
和c++的不同之处,c++必须是规定类型,如int a[10];在python中可以保存n个数据,并且每个数据类型可以不一样。

1.列表的定义

names=["小红",小李]

int a[10] 等价于names=[“小红”,“小李”]。

和c++一样,下标值在python中叫做索引值,索引值从0开始。

2.循环遍历方法一:for循环

for  temp in infos: #infos是列表名字print(temp)  #打印每次得到的列表元素

3.循环遍历列表方法二:while循环

 while  i< len(infos): #len函数获取到infos列表的长度(元素个数)
	 print(infos[i])
	 i++

在列表中添加数据

append向列表的末尾追加数据
insert将数据插入列表中
extend 把另一个列表中存在的内容扩展到当前列表中
name_list.append(“王小二”)#将王小二数据放到name_list列表的末尾
name.list.insert(1,“小妹妹”)  在name_list列表的索引位置1插入小妹妹数据
name.list.extend(temp_list)将temp_list 列表的完整数据放到name_list列表的末尾

在列表中修改元素

name_list[1]="李四“
列表指定的索引超出范围,程序会报错。

在列表中删除指定的数据

remove 删除方法
clear 清空方法
pop方法 默认情况下可以删除列表中最后一个元素
del 列表名列表索引 用del关键字删除指定数据
name_list.remove(“wangwu”)#将wangwu元素从列表中删除指定的数据
name_list.pop() !#删除列表中最后一个元素
name_list.pop(3)#参数指定索引位置
name_list.clear() #清空列表中所有元素
del name_list[1] 用关键字删除数据
del关键字本质上是把一个变量从内存中删除
注意:如果使用del关键字将变量从内存中删除,后续的代码就不能再使用这个变量了。

列表的排序操作

升序 由小到大的方法
name_list.sort()
降序 由大到小的方法
name_list.sort(reverse=True)
逆序(反转) 将原来的顺序反转过来
name_list.reverse()

列表的嵌套

列表中的元素也是一个列表,就是嵌套
应用: 一个学校,有三个办公室,有八个老师,实现随机分配。

import  random #使用随机工具 random
#定义一个列表用来保存3个办公室
offices=[[],[],[]]
#定义一个列表用来存储八位老师的名字
names=['A','B','C','D','E','F','G','H']
i=0 
for name in names:
    index =random.randint(0,2)#0 1 2 随机生成一个数,用来作为办公室的索引
    offices[index].append(name) #将老师的名字放到随机办公室内
for temNames in offices:
    print("办公室%d的人数为:%d"%(i,len(temNames)))
    print("这间办公室老师的姓名是")
    for  name in offices[i]:
        print(name,end=" ")
    print()
    i=i+1

元组

有多个元素组成的序列,每个数据直接用逗号隔开。和列表非常相似
元组用()定义 索引从0开始 元组一旦定义不可进行增删查改
虽然列表可以存储不同数据类型的元素,但是我们在使用列表时还是喜欢把相同类型的数据放到一个列表中,便于进行遍历操作。而元组有自己的应用场景

定义元组

info_tuple =(“zhangsan”,18,1.75)
empty_tuple=() 空元组
single_tuple =(5,) 定义一个只有一个元素的元组,如果不加逗号,解释器会把第一个数据类型作为元组的数据类型
元组的常用操作
info=()

#取值和取索引

print(info[0])#元组和列表取值都是用[]
print(info.index(“张三”))
#统计计数
print(info.count(“zhangsna”))#统计数据在元组中出现的次数
#统计元组中包含的元素的个数
print(len(info))

#元组的循环遍历

for my_info in info
​ #因为元组中通常保存的数据类型是不一样的,所以在输出的不是很方便
​ print()
应用场景:
1.函数的参数和返回值 ,一个函数可以接收 任意多个参数 或者一次返回多个数据
2.格式字符串 格式化字符串后面的()本质上就是一个元组 输出元组可以用格式化字符串的格式
3.让列表不可以被修改,以保护数据安全。
tuple ()函数就可以将可以修改的列表转化为元组
list()函数就可以将可以元组转化为成可修改的元组

字典

类似于c语言中的结构体数据
列表是有序的对象集合
字典是无序的对象集合
字典用{}定义
字典使用键值对存储数据,键值对之间使用逗号分隔
key 用来获取数据 value用来保存数据 两者合在一起叫键值对。
键key是索引 值value是数据 键和值之间使用;分隔 。 键必须是唯一的;
值可以取任何数据类型,但是键key只能使用字符串、数字、或者元组(元组不可修改)
字典变量的应用场景:描述物体的详细信息

定义一个字典变量
 xiaoming={"name": 小明,
	       "age":18}

print(xiaoming)#直接将字典名字写上即可

字典的常见操作

1.取值

print(xiaoming[“name”])

#在取值的时候,如果指定的key不存在,程序会保存

2.增加/修改

如果key不存在,会新增键值对,如果key存在,会修改已经存在的键值对

xiaoming["age"] =20
xiaoming["name"]="xiaoxiaoming"

3.删除

和列表的pop一样,加入key可以删除指定的键值对,如果不加参数,则会删除最后一个键值对

xiaoming.pop("name")
print(xiaoming)

4.统计键值对的数量

print(len(xiaoming))#len函数列表元组字典都有用

5.合并字典

temp={“hegiht”:1.75}
xiaoming.update(temp)#使用update方法将两个字典合并

#如果被合并的字典中包含已经存在的键值对,会覆盖原有的键值对。

6.清空字典

xiaoming.clear()

字典的循环遍历

实际开发中需求对字典的循环遍历并不多

#变量k是每次循环中,获取到的键值对的key

for k  in xiaoming:
print(“%s-%s”%(k,xiaoming[k])#xiaoming[k]使用key定位获取到键值对的value

练习题

编写一段程序,模拟自动柜员机验证身份的过程。
假设银行共有5个用户,每个都有自己的卡号和密码,存放在字典userInfo中。userInfo = {’ 622311156781’:’123456’,’ 622311156782’ :’000000’,622311156783’ :’111111’,622311156784’ :’555555’,
622311156785’ :’999999’ }
首先提示用户输入卡号和密码,当用户输入卡号和密码后,柜员机要验证身份信
息是否正确,如果正确显示欢迎信息,否则提示密码错误,如果连续错误达到3
次,则显示账号被锁定。

userInfo={
"622311156781":"123456",
"622311156782":"000000",
"622311156783" :"111111",
"622311156784" :"555555",
"622311156785" :"999999" }
user_list=list(userInfo.keys())#将字典的key转化为列表
count_list=[0,0,0,0,0]#作为输入密码错误次数的列表
flag =0
while flag==0:
    id=input("请输入您的卡号")
    #判断用户名是否存在
    if id not in userInfo.keys():
        print("您输入的用户不存在。请重新输入")
        continue
    else:
        passwd = input("请输入您的密码")
        for user in user_list:#获取到user_list 列表的索引值 作为count_list列表的索引值
            if user==id:
                user_index=user_list.index(user)
        if  count_list[user_index]==2:
            print("您输入密码错误的次数达到三次,账号被锁,请联系工作人员")
            break
        passwd1=userInfo.get(id)#获取到存在的用户名的对应的密码
        if  passwd==passwd1:
            print("欢迎使用自助柜台!")
            count_list[user_index]=0 #清空错误次数
        else:
            print("您输入的密码有误,请重新输入")
            count_list[user_index]=count_list[user_index]+1
发布了18 篇原创文章 · 获赞 29 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/JIANGYINGH/article/details/105359999