列表以及字典的练习

1.列表List

1.1 列表 VS 字符串

  1. 列表和字符串都是序列,元素之间有先后顺序关系。
  2. 字符串是不可变的序列,列表是可变的序列。
  3. 字符串中每个元素只能存储字符,而列表可以存储任意类型。
  4. 列表和字符串都是可迭代对象。
  5. 函数:
    将多个字符串拼接为一个。
    result = “连接符”.join(列表)

将一个字符串拆分为多个。
列表 = “a-b-c-d”.split(“分隔符”)

1.2 列表推导式

  1. 定义:
    使用简易方法,将可迭代对象转换为列表。
  2. 语法:
    变量 = [表达式 for 变量 in 可迭代对象]
    变量 = [表达式 for 变量 in 可迭代对象 if 条件]
  3. 说明:
    如果if真值表达式的布尔值为False,则可迭代对象生成的数据将被丢弃。

1.3 列表推导式嵌套

  1. 语法:
    变量 = [表达式 for 变量1 in 可迭代对象1 for 变量2 in可迭代对象2]
  2. 传统写法:
    result = []
    for r in [“a”, “b”, “c”]:
    for c in [“A”, “B”, “C”]:
    result.append(r + c)
  3. 推导式写法:
    result = [r + c for r in list01 for c in list02]

2.tuple

2.1 定义

  1. 由一系列变量组成的不可变序列容器。
  2. 不可变是指一但创建,不可以再添加/删除/修改元素。

2.2 基础操作

  1. 创建空元组:
    元组名 = ()
    元组名 = tuple()
  2. 创建非空元组:
    元组名 = (20,)
    元组名 = (1, 2, 3)
    元组名 = 100,200,300
    元组名 = tuple(可迭代对象)
  3. 获取元素:
    索引、切片
  4. 遍历元组:
    正向:
    for 变量名 in 元组名:
    变量名就是元素
    反向:
    for 索引名 in range(len(列表名)-1,-1,-1):
    元祖名[索引名]就是元素

2.3 作用

  1. 元组与列表都可以存储一系列变量,由于列表会预留内存空间,所以可以增加元素。
  2. 元组会按需分配内存,所以如果变量数量固定,建议使用元组,因为占用空间更小。
  3. 应用:
    变量交换的本质就是创建元组:x, y = y, x
    格式化字符串的本质就是创建元祖:“姓名:%s, 年龄:%d” % (“tarena”, 15)

3.字典dict

3.1 定义

  1. 由一系列键值对组成的可变映射容器。
  2. 映射:一对一的对应关系,且每条记录无序。
  3. 键必须惟一且不可变(字符串/数字/元组),值没有限制。

3.2 基础操作

  1. 创建字典:
    字典名 = {键1:值1,键2:值2}
    字典名 = dict (可迭代对象)
  2. 添加/修改元素:
    语法:
    字典名[键] = 数据
    说明:
    键不存在,创建记录。
    键存在,修改映射关系。
  3. 获取元素:
    变量 = 字典名[键] # 没有键则错误
  4. 遍历字典:
    for 键名 in 字典名:
    字典名[键名]
    for 键名,值名 in 字典名.items():
    语句
  5. 删除元素:
    del 字典名[键]

3.3 字典推导式

  1. 定义:
    使用简易方法,将可迭代对象转换为字典。
  2. 语法:
    {键:值 for 变量 in 可迭代对象}
    {键:值 for 变量 in 可迭代对象 if 条件}

3.4 字典 VS 列表

  1. 都是可变容器。
  2. 获取元素方式不同,列表用索引,字典用键。
  3. 字典的插入,删除,修改的速度快于列表。
  4. 列表的存储是有序的,字典的存储是无序的。

4.今日份实验

4.1 列表的语法练习

4.1.1 求给定列表中的最小值

"""
    计算列表中最小值(不使用min)
"""
list01 = [43, 54, 5]
min_value = list01[0]
for i in range(1, len(list01)):
    if min_value > list01[i]:
        min_value = list01[i]
print(min_value)

运行结果如下所示:
运行结果

4.1.2 按照指定要求随机产生一注彩票

需求1:彩票 双色球:
红球:6个,1 – 33 之间的整数 不能重复
蓝球:1个,1 – 16 之间的整数
(1) 随机产生一注彩票[6个红球1个蓝球].

"""
    彩票 双色球:
    红球:6个,1 -- 33 之间的整数   不能重复
    蓝球:1个,1 -- 16 之间的整数
    (1) 随机产生一注彩票[6个红球1个蓝球].
"""
import random

list_ticket = []

# 6个不重复的红球
while len(list_ticket) < 6:
    random_number = random.randrange(1, 33)
    # 如果随机数不存在,则存储。
    if random_number not in list_ticket:
        list_ticket.append(random_number)
# 1个蓝球
list_ticket.append(random.randrange(1, 16))

print(list_ticket)

运行结果如下所示:
运行结果 需求2:在控制台中购买一注彩票
提示:
“请输入第1个红球号码:”
“请输入第2个红球号码:”
“号码不在范围内”
“号码已经重复”
“请输入蓝球号码:”

"""
在控制台中购买一注彩票
提示:
    "请输入第1个红球号码:"
    "请输入第2个红球号码:"
    "号码不在范围内"
    "号码已经重复"
    "请输入蓝球号码:"
"""
# 6个1--33范围内的不重复红球号码
list_ticket = []
while len(list_ticket) < 6:
    number = int(input("请输入第%d个红球号码:" % (len(list_ticket) + 1)))
    if number < 1 or number > 33:
        print("号码不在范围内")
    elif number in list_ticket:
        print("号码已经重复")
    else:
        list_ticket.append(number)

# 1个1--16范围内的蓝球号码
while len(list_ticket) < 7:
    number = int(input("请输入蓝球号码:"))
    if 1 <= number <= 16:
        list_ticket.append(number)
    else:
        print("号码不在范围内")

print(list_ticket)

运行结果如下所示:
运行结果

4.1.3 列表推导式

"""
    列表推导式
"""

# 将list01中所有元素,增加1以后存入list02中.
list01 = [5, 56, 6, 7, 7, 8, 19]
# list02 = []
# for item in list01:
#     list02.append(item + 1)
list02 = [item + 1 for item in list01]
print(list02)

# 将list01中大于10元素,增加1以后存入list02中.
# list02 = []
# for item in list01:
#     if item >10:
#         list02.append(item + 1)
list02 = [item + 1 for item in list01 if item > 10]

运行结果如下所示:
运行结果

4.1.4 元组基础操作

"""
   元组
        基础操作
"""
# 1. 创建元组
# 空
tuple01 = ()

#  具有默认值
tuple01 = (1, 2, 3)

# 列表 --> 元组
tuple01 = tuple(["a", "b"])
print(tuple01)
# 元组 --> 列表
list01 = list(tuple01)
print(list01)

# 如果元组只有一个元素
# tuple02 = (100)
# print(type(tuple02))# int

tuple02 = (100,)
print(type(tuple02))  # tuple

# 不能变化
# tuple02[0] = 10

# 2. 获取元素(索引  切片)
tuple03 = ("a", "b", "c", "d")
e01 = tuple03[1]
print(type(e01))  # str

e02 = tuple03[-2:]
print(type(e02))  # tuple

# 可以直接将元组赋值给多个变量
tuper04 = (100, 200)
a, b = tuper04
print(a)
print(b)

# 3. 遍历元素
# 正向
for item in tuper04:
    print(item)

# 反向
# 1  0
for i in range(len(tuper04) - 1, -1, -1):
    print(tuper04[i])

运行结果如下所示:
运行结果

4.1.5 列表推导式的练习

# 练习:使用range生成1--10之间的数字,将数字的平方存入list01中
# list01 = []
# for item in range(1, 11):
#     list01.append(item ** 2)

list01 = [item ** 2 for item in range(1, 11)]

#练习:将list01中所有奇数存入list02
# list02 = []
# for item in list01:
#     if item % 2 == 1:
#         list02.append(item)
list02 = [item for item in list01 if item % 2 == 1]

#练习:将list01中所有偶数存入list03
list03 = [item for item in list01 if item % 2 == 0]

#练习:将list01中所有偶数大于5的数字增加1后存入list04
# list04 = []
# for item in list01:
#     if item % 2 == 0 and item > 5:
#         list04.append(item + 1)
print(list01)
list04 = [item + 1 for item in list01 if item % 2 == 0 and item > 5]
print(list04)

运行结果如下所示:
运行结果

4.1.6 利用元组求每月天数

"""
    练习:借助元组完成下列功能.
"""
# month = int(input("请输入月份:"))
#
# if month < 1 or month > 12:
#     print("输入有误")
# elif month == 2:
#     print("28天")
# elif month == 4 or month == 6 or month == 9 or month == 11:
#     print("30天")
# else:
#     print("31天")

# 方式1:
# month = int(input("请输入月份:"))
#
# if month < 1 or month > 12:
#     print("输入有误")
# elif month == 2:
#     print("28天")
# elif month in (4,6,9,11):
#     print("30天")
# else:
#     print("31天")

# 方式2:
month = int(input("请输入月份:"))
if month < 1 or month > 12:
    print("输入有误")
else:
    # 将每月天数存入元组
    day_of_month = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    print(day_of_month[month - 1])

运行结果如下所示:
运行结果

4.1.7 求已给日期是这一年中第几天

"""
    练习:在控制台中录入日期(月日),计算这是这一年的第几天.
    例如:3月5日
         1月天数 + 2月天数 + 5

         5月8日
         1月天数 + 2月天数 +3月天数 + 4月天数+ 8
"""
day_of_month = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
month = int(input("请输入月份:"))
day = int(input("请输入日:"))
# 方法一:
# # 累加前几个月天数
total_day = 0
for i in range(month - 1):
    total_day += day_of_month[i]
# 累加当月天数
total_day += day
print("%d月%d日是这年的第%d天." % (month,day,total_day))

# 方法二:
# 累加前几个月天数
total_day = sum(day_of_month[:month - 1])
total_day += day
print("%d月%d日是这年的第%d天." % (month,day,total_day))

运行结果如下所示:
运行结果

4.2 字典的语法练习

4.2.1 创建、修改以及遍历字典

"""
    字典
"""
# 1. 创建
# 空
dict01 = {}
dict01 = dict()
# 默认值
dict01 = {"wj":100,"zm":80,"zr":90}
dict01 = dict([("a","b"),("c","d")])
print(dict01)

# 2. 查找元素(根据key查找value)
print(dict01["a"])
# 如果key不存在,查找时会错误.
if "qtx" in dict01:# 如果存在key
    print(dict01["qtx"])

# 3. 修改元素(之前存在key)
dict01["a"] = "BB"

# 4. 添加(之前不存在key)
dict01["e"] = "f"

# 5. 删除
del dict01["a"]

print(dict01)
# 6. 遍历(获取字典中所有元素)

# 遍历字典,获取key
for key in dict01:
    print(key)
    print(dict01[key])

# 遍历字典,获取value
for value in dict01.values():
    print(value)

# 遍历字典,获取键值对key value(元组).
# for item in dict01.items():
#     print(item[0])
#     print(item[1])

for k,v in dict01.items():
    print(k)
    print(v)

运行结果如下所示:
运行结果

4.2.2 在控制台录入商品名称和单价,并打印

"""
在控制台中循环录入商品信息(名称,单价),如果名称输入空字符,则停止录入,将所有信息逐行打印出来.
"""
dict_commodity_info = {}
while True:
    name = input("请输入商品名称:")
    if name == "":
        break
    price = int(input("请输入商品单价:"))
    dict_commodity_info[name] = price

for key,value in dict_commodity_info.items():
    print("%s商品单价是%d"%(key,value))

运行结果如下所示:
运行结果

4.2.3 字典内嵌列表的练习

# 练习2: 在控制台中循环录入学生信息(姓名,年龄,成绩,性别),如果名称输入空字符, 则停止录入,将信息逐行打印出来.
# 字典内嵌列表:
{
    "张无忌":[28,100,"男"]
}
"""
dict_student_info = {}
while True:
    name = input("请输入姓名:")
    if name == "":
        break
    age = int(input("请输入年龄:"))
    score = int(input("请输入成绩:"))
    sex = input("请输入性别:")
    dict_student_info[name] = [age, score, sex]

# 打印所有学生信息
for name,list_info in dict_student_info.items():
    print("%s的年龄是%d,成绩是%d,性别是%s"%(name,list_info[0],list_info[1],list_info[2]))

运行结果如下所示:
运行结果

4.2.4 字典内嵌字典的练习

"""
# 字典内嵌字典:
{
    "张无忌":{"age":28,"score":100,"sex":"男"},
}
"""
dict_student_info = {}
while True:
    name = input("请输入姓名:")
    if name == "":
        break
    age = int(input("请输入年龄:"))
    score = int(input("请输入成绩:"))
    sex = input("请输入性别:")
    dict_student_info[name] = {"age": age, "score": score, "sex": sex}

for name, dict_info in dict_student_info.items():
    print("%s的年龄是%d,成绩是%d,性别是%s" %(name, dict_info["age"],dict_info["score"], dict_info["sex"]))

运行结果

4.2.5

4.2.6

4.2.7

4.2.8

4.2.9

4.2.10

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌上花开,静待绽放!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值