python--列表类型翻转教学

第1关:输入数据创建列表

任务描述

本关任务:编写一个能将用户输入的数据加入到列表中的小程序。

相关知识

为了完成本关任务,你需要掌握: 1.创建空列表 2.向列表中增加数据

创建空列表

1.list()函数可以创建一个空列表

 
  
  1. score_ls = list() # 创建一个空列表,命名为score_ls,_ls表示对象为列表类型

1.[]一对空的方括号可以表示一个空列表

 
  
  1. score_ls = [] # 创建一个空列表,命名为score_ls,_ls表示对象为列表类型
向列表中增加数据
  1. ls.append(x)方法可以向列表ls末尾增加一个数据 x,原地操作,无返回值 此方法最方便,本关任务推荐使用此方法。

示例如下:

 
  
  1. score_ls = [] # 创建一个空列表
  2. score_ls.append(99) # 只修改原列表对象,无需赋值操作,参数是要加入的元素
  3. print(score_ls)

输出:[99] 2. ls.extend([x])方法可以向列表ls末尾增加一个列表 [x],当列表只有一个元素时,结果与append()相同,原地操作,无返回值

示例如下:

 
  
  1. score_ls = [] # 创建一个空列表
  2. score_ls.extend([99]) # 只修改原列表对象,无需赋值操作,注意参数是列表
  3. print(score_ls)

输出:[99] 3. ls + [x]方法可以向列表ls末尾增加一个数据 x,返回一个新的列表对象

示例如下:

 
  
  1. score_ls = [] # 创建一个空列表
  2. score_ls = score_ls + [99] # 两个列表拼接,结果是新对象,需要赋值
  3. print(score_ls)

输出:[99]

10位评委为参加程序设计创意赛的选手打分,评分规则是不允许弃权,评分在0-10分之间,包含0和10。 每位评委打出分数后,记录员将该分数输入计算机中,所有分数都以浮点数类型存放在同一个列表中。输出包含全部成绩的列表。

编程要求

根据提示,在右侧编辑器补充代码,使程序能依次接收用户输入的10个成绩,将成绩置于列表中输出。

测试说明

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

测试输入:

 
  
  1. 8.9
  2. 10
  3. 9.3
  4. 9.6
  5. 8.4
  6. 9.8
  7. 9.9
  8. 8.9
  9. 8.2
  10. 10

预期输出: [8.9, 10.0, 9.3, 9.6, 8.4, 9.8, 9.9, 8.9, 8.2, 10.0]

提示: 加入列表时数据要转浮点数,要求用float()函数,以保持所有数据一致性表示为浮点类型,不可用eval()

代码

ll=[]
for x in range(10):
    a=float(input())
    ll.append(a)
print(ll)

第2关:计算每位选手的成绩

编程要求

根据提示,在右侧编辑器补充代码,使程序能依次接收用户输入的10个成绩,将成绩置于列表中输出;再计算并输出成绩中的最高分、最低分和的平均分(输出时严格保留小数点后3位数字)。

测试说明

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

测试输入: 8.9 10 9.3 9.6 8.4 9.8 9.9 8.9 8.2 10

预期输出: [8.9, 10.0, 9.3, 9.6, 8.4, 9.8, 9.9, 8.9, 8.2, 10.0] 最高分10.000,最低分8.200,平均分9.300

list1 = []
for i in range(10):
    a = float(input())
    list1.append(a)
print(list1)
print(f'最高分{max(list1):.3f},最低分{min(list1):.3f},平均分{sum(list1)/len(list1):.3f}')

第3关:去除一个最高分和一个最低分

编程要求

根据提示,在右侧编辑器补充代码,使程序能依次接收用户输入的10个成绩,将成绩置于列表中输出;再根据规则对成绩进行修正,输出修正后成绩列表,计算并输出成绩中的最高分、最低分和的平均分(输出时严格保留小数点后3位数字)。

测试说明

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

测试输入: 8.9 10 9.3 9.6 8.4 9.8 9.9 8.9 8.2 10

预期输出: [8.9, 10.0, 9.3, 9.6, 8.4, 9.8, 9.9, 8.9, 8.2, 10.0] [8.9, 9.3, 9.6, 8.4, 9.8, 9.9, 8.9, 10.0] 最高分10.000,最低分8.400,平均分9.350

提示: 1.当最高分或最低分有多个时,各只删除一个 2.删除元素后列表长度变短

al = []
for i in range(10):
    al.append(float(input()))
print(al)
al.remove(max(al))
al.remove(min(al))
print(al)
print(f'最高分{max(al):.3f},最低分{min(al):.3f},平均分{sum(al)/len(al):.3f}')

第4关:计算中位数成绩

编程要求

根据提示,在右侧编辑器补充代码,使程序能依次接收用户输入的10个成绩,将成绩置于列表中输出;再根据规则去掉一个最高分和一个最低分升序排序输出,计算并输出成绩中位数(输出时严格保留小数点后3位数字)。

测试说明

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

测试输入: 8.9 10 9.3 9.6 8.4 9.8 9.9 8.9 8.2 10

预期输出: [8.9, 10.0, 9.3, 9.6, 8.4, 9.8, 9.9, 8.9, 8.2, 10.0] [8.4, 8.9, 8.9, 9.3, 9.6, 9.8, 9.9, 10.0] 去掉最高分和最低分后,中位数成绩为:9.450

提示: 1.此题中成绩数量为偶数

list1 = []
for i in range(10):
    list1.append(float(input()))
print(list1)
list1.remove(max(list1))
list1.remove(min(list1))
n = len(list1)
list1.sort()
print(list1)
if n % 2==0:
    s = (list1[n//2-1] + list1[n//2])/2
else:
    s = list1[n//2]

print(f'去掉最高分和最低分后,中位数成绩为:{s:.3f}')

第5关:去除弃权评委成绩 

编程要求

根据提示,在右侧编辑器补充代码,使程序能依次接收用户输入的10个成绩,将成绩以字符串类型置于列表中;去除列表中的空字符串元素后,将其他成绩转数值类型,再根据规则对列表中的成绩进行修正,输出修正后成绩列表,计算并输出成绩中的最高分、最低分和的平均分(输出时严格保留小数点后3位数字)。

测试说明

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

测试输入: (测试程序时请删除第3、4、5行的空格)

 
  
  1. 8.9
  2. 10
  3. 9.8
  4. 9.9
  5. 8.9
  6. 8.2
  7. 10

预期输出:

 
  
  1. [8.9, 9.8, 9.9, 8.9, 10.0]
  2. 10.000, 8.900, 9.500

提示: 1.当最高分或最低分有多个时,各只删除一个 2.删除元素后列表长度变短

list1 = []
for x in range(10):
    list1.append(input())

while '' in list1:
    list1.remove('')
list1 = list(map(float,list1))
list1.remove(max(list1))
list1.remove(min(list1))
print(list1)
print(f'{max(list1):.3f}, {min(list1):.3f}, {sum(list1)/len(list1):.3f}')

第6关:将平均成绩附加到列表末尾

根据提示,在右侧编辑器补充代码,使程序能依次接收用户输入的10个成绩,将成绩以字符串类型置于列表中输出;去除弃权成绩,再去除一个最高分和一个最低分,然后计算平均成绩(最多保留小数点后2位)并附加到列表末尾。 输出末尾附加了平均成绩、元素为字符串的成绩列表。

测试说明

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

测试输入:

 
  
  1. 8.9
  2. 10
  3. 9.8
  4. 9.9
  5. 8.9
  6. 8.2
  7. 10

预期输出(数据仅供做为输出格式参考,并非答案): ['8.9', '10', '', '', '', '9.8', '9.9', '8.9', '8.2', '10'] ['8.9', '10', '9.8', '9.9', '8.9', '8.2', '10', '9.39']

提示: 1.计算时转数值类型,输出时转字符串

list1 = []
for x in range(10):
    list1.append(input())
print(list1)
while '' in list1:
    list1.remove('')
s = (sum(map(float,list1))-max(float(x) for x in list1)-min(float(x) for x in list1))/(len(list1)-2)
list1.append(str(round(s,2)))
print(list1)

 第7关:读文件到二维列表

编程要求

根据提示,在右侧编辑器补充代码,使程序能将文件中的数据转为二维列表,输入一个整数n,以列表形式输出前n位选手的成绩。

测试说明

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

测试输入: 3

预期输出: [['7.1', '8.6', '8.5', '7.5', '7.3', '7.9', '7.9', '8.5', '8.0', '7.6'], ['9.1', '', '', '', '9.4', '', '8.9', '9.5', '9.1', '8.7'], ['7.3', '7.5', '', '', '8.4', '', '', '8.0', '7.7', '7.9']]

def test(file,n):
    with open(file) as fr:
        score = [line.strip().split(',') for line in fr]
    return [score[x] for x in range(n)]








if __name__ == '__main__':
    filename = '/data/bigfiles/mark_score.csv'
    n = int(input())
    s = test(filename,n)
    print(s)

第8关:二维列表数据分析

编程要求

根据提示,在右侧编辑器补充代码,使程序能将文件中的数据转为子列表元素是浮点数的二维列表,先去掉弃权评委的成绩(空字符串),再去掉每位选手的一个最高分和一个最低分,计算每位选手的平均分并附加到子列表末尾(平均分保留小数点后2位)。输入一个整数n,以列表形式输出前n位选手的成绩。

测试说明

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

测试输入: 4

预期输出: [[8.5, 7.5, 7.3, 7.9, 7.9, 8.5, 8.0, 7.6, 7.9], [9.1, 9.4, 8.9, 9.1, 9.12], [7.5, 8.0, 7.7, 7.9, 7.78], [7.2, 7.1, 6.8, 7.1, 6.2, 6.4, 6.9, 6.81]]

def test(file,n):
    with open(file) as fr:
        score = [line.strip().split(',') for line in fr]
    a = (score[x] for x in range(n))
    list1 = []
    for x in a:
        while '' in x:
            x.remove('')
        x = list(map(float,x))
        x.remove(max(x))
        x.remove(min(x))
        avg = sum(x)/len(x)
        x.append(round(avg,2))
        list1.append(x)
    return list1








if __name__ == '__main__':
    filename = '/data/bigfiles/mark_score.csv'
    n = int(input())
    s = test(filename,n)
    print(s)
   
      
  

第9关:成绩排序

编程要求

根据提示,在右侧编辑器补充代码,使程序能将文件中的数据转为子列表元素是浮点数的二维列表,去掉每位选手的一个最高分和一个最低分,计算每位选手的平均分并附加到子列表末尾(平均分保留小数点后2位)。 将二维列表根据平均成绩降序排序,当平均成绩相同时,根据仲裁成绩升序排序 输入一个整数n,以列表形式输出排序后前n位选手的成绩。

测试说明

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

测试输入: 10

预期输出: [[8.8, 9.7, 8.9, 9.8, 9.5, 9.7, 8.9, 9.5, 9.35], [8.6, 9.7, 9.2, 9.6, 9.2, 9.7, 9.5, 8.8, 9.29], [9.0, 9.4, 9.6, 9.6, 9.0, 9.6, 9.1, 8.9, 9.28], [9.0, 9.0, 9.2, 8.8, 9.6, 9.3, 9.1, 9.9, 9.24], [9.8, 9.8, 8.6, 9.6, 9.1, 8.6, 9.6, 8.7, 9.23], [9.6, 9.4, 8.8, 9.4, 8.5, 9.1, 9.8, 8.7, 9.16], [9.1, 9.4, 8.9, 9.1, 9.12], [9.3, 9.4, 9.6, 9.6, 8.4, 9.4, 8.8, 8.2, 9.09], [8.8, 9.2, 9.4, 8.6, 9.5, 9.3, 9.0, 8.7, 9.06], [9.1, 9.5, 8.4, 9.3, 8.7, 9.5, 9.1, 8.9, 9.06]]

def file_to_lst(file):
    with open(file) as fr:
        score_ls = [line.strip().split(',') for line in fr]
    return score_ls
def del_null_string(score_ls):
    score_ls_float = []
    for lst in score_ls:
        while '' in lst:
            lst.remove('')
        lst = list(map(float,lst))
        score_ls_float.append(lst)
    return score_ls_float
def add_avg(score_ls_float):
    for i in range(len(score_ls_float)):
        score_ls_float[i].remove(max(score_ls_float[i]))
        score_ls_float[i].remove(min(score_ls_float[i]))
        avg = sum(score_ls_float[i]) / len(score_ls_float[i])
        score_ls_float[i].append(round(avg,2))
    return score_ls_float
if __name__ == '__main__':
    filename = '/data/bigfiles/mark_score.csv'
    n = int(input())
    score_lst = file_to_lst(filename)
    score_lst_f = del_null_string(score_lst)
    score_avg = add_avg(score_lst_f)
    print(sorted(score_avg, key=lambda x: (x[-1],-x[-2]),reverse=True)[:n])

 

 

你可能感兴趣的:(python,开发语言)