10位评委为参加程序设计创意赛的选手打分,评分规则是允许弃权,弃权的成绩户数空字符串,其他评分在0-10分之间,包含0和10。 文件'mark_score.csv'中保存多位选手的成绩,每行为一位选手的成绩,各成绩之间用半角逗号分隔,编程读取各选手成绩。
时间: 2024-05-09 17:21:13 浏览: 133
```python
import csv
scores = []
with open('mark_score.csv', 'r', newline='') as file:
reader = csv.reader(file)
for row in reader:
# 将每个成绩转换为整数,如果是空字符串则添加None
score = [int(s) if s else None for s in row]
scores.append(score)
print(scores)
```
假设'mark_score.csv'文件内容如下:
```
10,9,8,7,6,5,4,3,2,1
9,8,7,6,5,4,3,2,1,0
8,7,6,5,4,3,2,1,0,
7,6,5,4,3,2,1,0,,
6,5,4,3,2,1,0,,,
```
则运行上述代码,输出结果为:
```
[[10, 9, 8, 7, 6, 5, 4, 3, 2, 1], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [8, 7, 6, 5, 4, 3, 2, 1, 0, None], [7, 6, 5, 4, 3, 2, 1, 0, None, None], [6, 5, 4, 3, 2, 1, 0, None, None, None]]
```
相关问题
写一个python代码 10位评委为参加程序设计创意赛的选手打分,评分规则是不允许弃权,评分在0-10分之间,包含0和10。每位评委打出分数后,记录员将该分数输入计算机中,所有分数都以浮点数类型存放在同一个列表中。输出包含全部成绩的列表。
### 回答1:
以下是代码:
```
grades = []
for i in range(10):
score = float(input("请评委%d输入分数(0-10):" % (i+1)))
while score < 0 or score > 10:
score = float(input("请输入0-10之间的分数:"))
grades.append(score)
print("全部成绩为:", grades)
```
### 回答2:
以下是一个Python代码示例,可以实现上述需求:
```python
scores = [] # 创建空列表存放评分
for i in range(10):
while True:
score = float(input("请输入第{}位评委的分数(0-10之间):".format(i+1)))
if score >= 0 and score <= 10: # 判断分数是否在合法范围内
break
else:
print("请输入合法的分数!")
scores.append(score) # 将分数加入列表
print("所有选手的分数列表:", scores)
```
运行代码后,程序会依次提示你输入每位评委的分数(要求在0-10之间),然后将分数依次存入列表中。最后,程序会输出包含全部成绩的列表。
请注意,将代码复制到Python环境中执行时,可能会有一些输入提示消息和格式问题。这是因为在此AI平台上无法直接获取用户的输入,仅仅提供了代码执行的环境。在实际运行时,可以按照代码中的提示输入分数。
使程序能将文件中的数据转为子列表元素是浮点数的二维列表,先去掉弃权评委的成绩(空字符串),再去掉每位选手的一个最高分和一个最低分,计算每位选手的平均分并附加到子列表末尾(平均分保留小数点后2位)。输入一个整数n,以列表形式输出前n位选手的成绩。python
以下是一个实现上述功能的程序:
```python
def read_scores(file_name):
with open(file_name, 'r') as f:
lines = f.readlines()
# 去除换行符
lines = [line.strip() for line in lines]
# 按逗号分隔,生成二维列表
data = [line.split(',') for line in lines]
# 去除弃权评委的成绩
data = [[float(score) if score != '' else 0 for score in line[1:]] for line in data]
# 去除最高分和最低分
data = [sorted(line)[1:-1] for line in data]
# 计算平均分
data = [[round(sum(line) / len(line), 2)] + line for line in data]
return data
def print_n_top_scores(scores, n):
# 按平均分排序
scores.sort(reverse=True)
# 输出前n位选手的成绩
for i in range(n):
print('No.{}: {}'.format(i+1, scores[i]))
file_name = 'scores.txt'
scores = read_scores(file_name)
n = 5
print_n_top_scores(scores, n)
```
该程序首先定义了一个`read_scores`函数,可以从文件中读取数据,并按要求进行处理,生成二维列表。然后,定义了一个`print_n_top_scores`函数,可以按平均分从高到低排序,并输出前n位选手的成绩。
最后,调用`read_scores`函数读取数据,调用`print_n_top_scores`函数输出前n位选手的成绩。你需要将程序中的`scores.txt`替换为实际的文件名,根据文件中的数据格式进行修改。
阅读全文