Python零基础学习6.1—Python组合数据类型(一)

组合数据类型可以将多个数据组织起来,根据数据组织方式的不同,Python的组合数据类型可分成三类:序列类型、集合类型和映射类型,如图所示。

本章先来讲解元组和列表,我们应至少掌握以下几点:

掌握列表的创建、访问、增加与删除等基本操作

掌握元组的创建、访问等基本操作

掌握列表的应用

掌握元组的应用

下面我们通过几道题来了解和巩固:

第1关:列表的创建与访问

任务描述

本关任务:

(1)创建一个计算机语言列表langlist,包含4个成员,分别为”python”、”java”、”c”、”c++”。

(2)利用函数法创建列表strlist,列表成员为字符串”python”中的每个字符。

(3)利用函数法创建一个[1,10]范围内的偶数列表evenlist

(4)输出列表langlist最后一个元素

(5)输出列表langlist第2个元素中的第1个字符

(6)输出列表strlist第3个元素

(7)输出列表evenlist中的每一个元素,同一行输出,元素之间以空格分隔。

代码解析

langlist = ["python","java","c","c++"]
strlist = list(langlist[0])
evenlist = [i for i in range(2,11,2)]
print(langlist[-1])
str_langlist = str(langlist[1])
print(str_langlist[0])
print(strlist[2])
for x in evenlist:
    print(x,end = " ")

第2关:列表的切片

任务描述

本关任务: 键盘输入长度大于5的字符串,将它转换成列表。对该列表依次进行以下切片操作:

(1)切片取列表前三个元素

(2)切片取列表后三个元素

(3)切片逆序输出

(4)切片在列表头部增加元素”head”

(5)计算列表的元素个数 逐行输出以上五个操作的结果。

测试说明

平台会对你编写的代码进行测试:

测试输入: 请输入长度大于5的字符串:abcdef

预期输出:

['a', 'b', 'c']

['d', 'e', 'f']

['f', 'e', 'd', 'c', 'b', 'a']

['head', 'a', 'b', 'c', 'd', 'e', 'f']

7

代码解析

string = input("请输入长度大于5的字符串:")
string = list(string)
print(string[:3])
print(string[-3:])
print(string[::-1])
string.insert(0,'head')
print(string)
print(len(string))

第3关:列表元素的增加与删除

任务描述

本关任务:从键盘输入一列表,进行以下操作:

(1)在该列表尾部添加元素“best”

(2)同时添加三个元素“3”、“2”、“1”

(3)在第2个元素之前插入新的元素“grade”

(4)删除第3个元素 逐行依次输出以上每个操作后的列表

测试说明

平台会对你编写的代码进行测试:

测试输入: 请输入一个列表:[12,34,56]

预期输出:

[12, 34, 56, 'best']

[12, 34, 56, 'best', '3', '2', '1']

[12, 'grade', 34, 56, 'best', '3', '2', '1']

[12, 'grade', 56, 'best', '3', '2', '1']

代码解析

lst = eval(input("请输入一个列表:"))
lst.append('best')
print(lst)
lst.extend(['3','2','1'])
print(lst)
lst.insert(1,'grade')
print(lst)
lst.pop(2)
print(lst)

第4关:等比数列

任务描述

本关任务:产生等比数列 用户输入以逗号分隔的三个数字,记为a、q、n,以a为起始数值,q为前后相邻数的比值,n为数列长度,产生一个等比数列。

输入:1,3,5

输出:1,3, 9 ,27, 81

测试说明

平台会对你编写的代码进行测试:

测试输入: 请输入三个数字,英文逗号分隔:1,3,5

预期输出: 1,3,9,27,81

代码解析

num = input("请输入三个数字,英文逗号分隔:")
num = num.split(",")
a = eval(num[0])
q = eval(num[1])
n = eval(num[2])
lst = [str(a*q**(i-1))for i in range(1,n+1)]
print(",".join(lst))

第5关:等差数列

任务描述

本关任务:等差数列 用户输入以空格分隔的3个整数,分别记为a、b、c,以a为起始数值,b为前后相邻数的差,c为数列长度,产生一个递增的等差数列。输出数列、数列元素之和、数列元素索引与值、数列元素平方

测试说明

平台会对你编写的代码进行测试:

测试输入:

请输入三个数,以空格分隔:1 2 5

预期输出:

等差数列为[1, 3, 5, 7, 9]

数列之和为25 数列元素索引与值为[(0, 1), (1, 3), (2, 5), (3, 7), (4, 9)]

数列元素的平方为[1, 9, 25, 49, 81]

代码解析

num = input("请输入三个数,以空格分隔:")
num = num.split()
a = eval(num[0])
b = eval(num[1])
c = eval(num[2])
lst = [a+b*i for i in range(c)]
print(f"等差数列为{lst}")
s = 0
for x in lst:
    s += x
print(f"数列之和为{s}")
lst1 = []
for i in range(c):
    lst1.append((i,lst[i]))
print(f"数列元素索引与值为{lst1}")
lst2 = [lst[i]**2 for i in range(c)]
print(f"数列元素的平方为{lst2}")

第6关:数字转换

任务描述

本关任务: 输入一个数,将其转换成中文数字输出。

例如, 输入:123.45

输出:壹贰叁点肆伍

测试说明

平台会对你编写的代码进行测试:

测试输入: 请输入一个数:123.4

预期输出: 壹贰叁点肆

代码解析

num = input("请输入一个数:")
num_dict = {".":"点","0":"零","1":"壹","2":"贰","3":"叁","4":"肆","5":"伍","6":"陆","7":"柒","8":"捌","9":"玖"}
num_list = list(num)
for x in num_list:
    print(num_dict[x],end = "")

第7关:数列排序

任务描述

本关任务:生成包含 10 个1到100的随机整数的列表,将前5个数按升序排列,后5个数按降序排列。

测试说明

平台会对你编写的代码进行测试:

测试输入:

随机数种子:4

预期输出:

随机生成列表[31, 39, 14, 93, 51, 62, 20, 12, 9, 3]

排序后列表[14, 31, 39, 51, 93, 62, 20, 12, 9, 3]

代码解析

import random
n=eval(input("随机数种子:"))
random.seed(n)
#**************Begin***************#
#从此外开始添加代码
x = list(random.randint(1,100) for i in range(10))
print(f"随机生成列表{x}")
lst1 = x[:5]
lst2 = x[5:]
lst1.sort()
lst2.sort()
print(f"排序后列表{lst1+lst2[::-1]}")
#***************End****************#

第8关:计算歌手成绩

任务描述

本关任务: 在歌星大赛中,有若干个评委为某歌手打分。歌手的最后成绩为:去掉一个最高分和一个最低分后的平均值,保留2位小数。 请输出歌手的最后成绩、去掉的最高分和去掉的最低分,并将歌手的最后得分从高到低输出在同一行上。

测试说明

平台会对你编写的代码进行测试:

测试输入:

请输入评委成绩,以英文逗号分隔82,94,89,90,97,88,97,81,86,82,90,83

预期输出:

歌手最后成绩88.10

去掉一个最高分97

去掉一个最低分81

歌手的最后分数从高到低依次为97 94 90 90 89 88 86 83 82 82

代码解析

grand = input("请输入评委成绩,以英文逗号分隔")
lst = grand.split(",")
lst = [int(x) for x in lst] 
best = max(lst)
worst = min(lst)
s = sum(lst)-best-worst
ave = s/(len(lst)-2)
print("歌手最后成绩{:.2f}".format(ave))
print(f"去掉一个最高分{best}")
print(f"去掉一个最低分{worst}")
print("歌手的最后分数从高到低依次为",end = "")
lst.sort()
lst = lst[::-1]
lst.remove(best)
lst.remove(worst)
for x in lst:
    print(f"{x}",end = " ")

第9关:随机密码

任务描述

本关任务:编写程序,在26个字母大小写(AaBbCc……Zz)、10个数字字符(0123456789)和10个特殊字符“~!@#$%^&*?”组成的列表中随机生成 1个8位数密码。

测试说明

平台会对你编写的代码进行测试:

测试输入: 随机种子:9

预期输出: 随机密码:7xRilAv@

代码解析

#根据注释在相应位置添加代码
#导入随机库
import random
#给列表赋初值
lst=[]
#给列表分别添加26个大写字母和26个小写字母
for i in range(65,91):
    lst.append(chr(i))
    lst.append(chr(i+32))
#给列表添加10个数字
for i in range(10):
    lst.append(str(i))
#给列表添加特殊字符
spe = "~!@#$%^&*?"
lst.extend(list(spe))
#定义随机数的种子,不删除下面两行代码
n=eval(input("随机种子:"))
random.seed(n)
#从列表中随机抽样8个字符,并输出
password = ""
for i in range(8):
    password += random.choice(lst)
print(f"随机密码:{password}")

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年12月6日
下一篇 2023年12月6日

相关推荐