湖北师范大学-Python程序设计-列表类型翻转教学

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

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

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

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

测试输入:
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]

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

score_ls=[]
i=0
for i in range(0,10):
    i=i+1
    x=float(input())
    score_ls.append(x)

print(score_ls)

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

任务描述
本关任务:编写一个能对列表中的数据进行统计分析的小程序。

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

测试输入:
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

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

score_ls=[]
i=0
for i in range(0,10):
    i=i+1
    x=float(input())
    score_ls.append(x)

print(score_ls)
print("最高分""{:.3f}".format(max(score_ls)),end='')
print(",最低分""{:.3f}".format(min(score_ls)),end='')
print(",平均分""{:.3f}".format(sum(score_ls)/len(score_ls)),end='')

第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.删除元素后列表长度变短

score=[]
i=0
for i in range(0,10):
   x=float(input())
   score.append(x)
   i=i+1
print(score)
score.remove(max(score))
score.remove(min(score))
print(score)
print("最高分""{:.3f}".format(max(score)),end='')
print(",最低分""{:.3f}".format(min(score)),end='')
print(",平均分""{:.3f}".format(sum(score)/len(score)))

第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.此题中成绩数量为偶数

score=[]
i=0
for i in range(0,10):
   x=float(input())
   score.append(x)
   i=i+1
print(score)
score.remove(max(score))
score.remove(min(score))
score.sort()
print(score)
print("去掉最高分和最低分后,中位数成绩为:""{:.3f}".format((score[3]+score[4])/2))

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

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

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

测试输入:
(测试程序时请复制公开的测试用例中的输入)

8.9
10
 
 
 
9.8
9.9
8.9
8.2
10
预期输出:

[8.9, 9.8, 9.9, 8.9, 10.0]
10.000, 8.900, 9.500
提示:
1.当最高分或最低分有多个时,各只删除一个
2.删除元素后列表长度变短

score=[]
i=0
for i in range(0,10):
   x=input()
   score.append(x)
while '' in score:
    score.remove('')

score=list(map(float,score))
score.remove(max(score))
score.remove(min(score))
print(score)
print("{:.3f}".format(max(score)),end='')
print(",","{:.3f}".format(min(score)),end='')
print(",","{:.3f}".format(sum(score)/len(score)))

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

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

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

测试输入:
(测试程序时请复制公开的测试用例中的输入)
8.9
10
 
 
 
9.8
9.9
8.9
8.2
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.计算时转数值类型,输出时转字符串
2.计算平均成绩时去除弃权数据、一个最大值和一个最小值,输出时仍保留原始数据

scoreList = []
scoreListTmp = []
i = 0
while i < 10:
    a = input()
    scoreList.append(a) 
    i = i + 1
scoreList = list(map(str, scoreList)) # 元素类型为字符串-原列表
print(scoreList)

scoreList = [str(x)for x in scoreList if x != '' ] # 元素类型为字符串-去掉空字符的列表
scoreListTmp = list(map(float, scoreList)) # 元素类型为浮点数型-去掉空字符的列表

scoreListTmp.remove(max(scoreListTmp))
scoreListTmp.remove(min(scoreListTmp)) # 元素类型为浮点数型-去掉空字符-去掉一个最高分和最低分的列表

avr = str(round(sum(scoreListTmp) / len(scoreListTmp), 2))
scoreList.append(avr) # 元素类型为字符串-去掉空字符-去掉一个最高分和最低分的列表-末尾追加平均成绩的列表

print(scoreList)

第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 file_to_lst(file,n):
    """将文件名变量file指向的文件中的用逗号分隔的数据转为二维列表"""
    list1=[]
    with open(file) as fr:  # 创建文件对象
        for i in range(n):
            score=fr.readline().strip()
            score=score.split(',')
            list1.append(score)
    return (list1)


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

第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 file_to_lst(file, n):
    """将文件名变量file指向的文件中的用逗号分隔的数据转为二维列表"""
    list1 = []
    with open(file) as fr:  # 创建文件对象
        for i in range(n):
            score_ls = fr.readline().strip()
            score_ls = score_ls.split(',')
            list1.append(score_ls)
        return list1    
 
if __name__ == '__main__':
    filename = '/data/bigfiles/mark_score.csv'
    n = int(input())
    list2=[]
    for lst in file_to_lst(filename, n):  # 遍历二维列表,lst为子列表
        while '' in lst:  # 循环判定子列表中是否还有空字符串
            lst.remove('')  # 移除子列表中的空字符串
        lst = list(map(float, lst))  # 当前子列表转浮点数
        lst.remove(max(lst))
        lst.remove(min(lst))
        avg_score = sum(map(float, lst))/len(lst) 
        lst.append(float(round(avg_score, 2)))
        list2.append(lst)
    print(list2)

 第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])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值