(python3)1058.选择题(20分)及1061.判断题(15分)

这篇两道题都是给题目判分的,放在一起,都比较简单~

1058 选择题

批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多。

输入格式:

输入在第一行给出两个正整数N(<=1000)和M(<=100),分别是学生人数和多选题的个数。随后M行,每行顺次给出一道题的满分值(不超过5的正整数)、选项个数(不少于2且不超过5的正整数)、正确选项个数(不超过选项个数的正整数)、所有正确选项。注意每题的选项从小写英文字母a开始顺次排列。各项间以1个空格分隔。最后N行,每行给出一个学生的答题情况,其每题答案格式为“(选中的选项个数 选项1 ……)”,按题目顺序给出。注意:题目保证学生的答题情况是合法的,即不存在选中的选项数超过实际选项数的情况。

输出格式:

按照输入的顺序给出每个学生的得分,每个分数占一行。注意判题时只有选择全部正确才能得到该题的分数。最后一行输出错得最多的题目的错误次数和编号(题目按照输入的顺序从1开始编号)。如果有并列,则按编号递增顺序输出。数字间用空格分隔,行首尾不得有多余空格。如果所有题目都没有人错,则在最后一行输出“Too simple”。

输入样例:

3 4 
3 4 2 a c
2 5 1 b
5 3 2 b c
1 5 4 a b d e
(2 a c) (2 b d) (2 a c) (3 a b e)
(2 a c) (1 b) (2 a b) (4 a b d e)
(2 b d) (1 e) (2 b c) (4 a b c d)

输出样例:

3
6
5
2 2 3 4
题目解析

先是记录正确答案的信息,主要是分数及正确的选项(其实用不到选项的个数和正确选项的个数,因为直接看是否  相等);然后输入一条数据,同时进行一次判分及错误的题目(在error_list中),最后控制输出内容。

需要注意的也就是对于学生的答案字符串的split操作。

N, M = map(int,input().split())
answer_list = []
error_list = [0 for i in range(M)]
for i in range(M):
    inp = input().split()
    score = int(inp[0])
    choice_num = int(inp[2])
    choice_lst = inp[3:]

    answer_list.append([score, choice_num, choice_lst])
# print(answer_list)
# 下面开始接受学生答案的输入 并统计分数和错误题目
score_list = [0 for i in range(N)]
for i in range(N):
    answers = input()         # M道题
    answers = answers.replace("(","")
    answers = answers.split(")")
    for j in range(M):
        answer = answers[j].strip().split()   # 1道题的情况
        # print(answer)
        num = int(answer[0])
        correct = answer_list[j]
        ans = answer[1:]
        if ans == correct[2]:
            # 对了
            score_list[i] += correct[0]
        else:
            error_list[j] += 1

for score in score_list:
    print(score)
max_error = max(error_list)
if max_error == 0:
    print("Too simple")
else:
    ret = []
    for ix, error_count in enumerate(error_list,1):
        if error_count == max_error:
            ret.append(str(ix))
    ret = [str(max_error)] + ret
    print(" ".join(ret))

1061 判断题

判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。

输入格式:

输入在第一行给出两个不超过100的正整数N和M,分别是学生人数和判断题数量。第二行给出M个不超过5的正整数,是每道题的满分值。第三行给出每道题对应的正确答案,0代表“非”,1代表“是”。随后N行,每行给出一个学生的解答。数字间均以空格分隔。

输出格式:

按照输入的顺序输出每个学生的得分,每个分数占一行。

输入样例:

3 6
2 1 3 3 4 5
0 0 1 0 1 1
0 1 1 0 0 1
1 0 1 0 1 0
1 1 0 0 1 1

输出样例:

13
11
12
题目解析

此题就更简单了,主要是统计第二行各题的分数和第三行正确答案;然后从下一行开始,每位同学的答案拆成列表,挨个遍历,对了就加分。

n ,m = map(int,input().split())

score = list(map(int, input().split()))
ans = input().split()

for i in range(n):
    ans_i = input().split()
    grade = 0
    for j in range(m):
        if ans[j] == ans_i[j]:
            grade += score[j]
    print(grade)


猜你喜欢

转载自blog.csdn.net/xutiantian1412/article/details/80709128