📜  n 个问题的不同可能评分和否定评分(1)

📅  最后修改于: 2023-12-03 14:44:32.314000             🧑  作者: Mango

n 个问题的不同可能评分和否定评分

在编写程序时,我们有时需要让用户评价一些东西,比如一个商品、一个应用程序、一个服务等等。在这个过程中,我们可以为用户提供两个选项:好评和差评。

针对这个问题,我们可以使用一个评分系统来让用户做出选择,其中每个问题都可以得到不同的分数。这种评分系统被广泛应用于电子商务中的商品评价、App Store 中的应用程序评分等场景中。

接下来,我们将介绍如何实现一个简单的评分系统,并向您展示如何利用它实现不同的可能评分和否定评分。

数据结构

为了实现一个评分系统,我们需要使用两个数据结构:一个数组和一个记录总分的计数器。

数组中的元素表示每个问题的分数,计数器记录总分。具体实现可以考虑以下结构:

scores = [0] * n
total_score = 0

这里,n 表示问题的数量,scores 数组存储每个问题的分数,total_score 记录总分。

计算评分

在将用户的响应转换为分数之前,我们需要定义一个所映射的值域,通常是 [-1, 1] 或 [0, 1]。针对不同类型的应用场景,我们可以根据需要对值域进行适当调整。

比如,对于一个 5 星制的评分系统,我们可以选择将值域限制在 [1, 5]。

接下来,我们可以设计一个函数 score(response),用于将用户的响应转换为分数。它的具体实现可以如下所示:

def score(response):
    if response == "yes":
        return 1
    elif response == "no":
        return -1
    else:
        return 0

在这里,我们假设用户的响应只有 "yes"、"no" 两种,并将分别分配为 1 和 -1。如果用户没有给出响应,则返回 0。

计算总分

我们可以在调用 score(response) 函数时,将返回值累加到总分计数器中,如下所示:

for i in range(n):
    response = input("Question {}: ".format(i))
    s = score(response)
    scores[i] = s
    total_score += s

这里,我们使用 input() 函数从标准输入读取问题的回答,并将评分存储在 scores[i] 中。然后,我们将评分累加到总分计数器中。

计算平均分

最后,我们可以计算出每个问题的平均分,如下所示:

avg_scores = [0] * n
for i in range(n):
    avg_scores[i] = scores[i] / total_score if total_score != 0 else 0

如果 total_score != 0,则计算 scores[i] / total_score,否则将平均分设为 0。这里,我们将平均分存储在一个名为 avg_scores 的数组中,它与 scores 数组的长度相同。

返回结果

在计算出每个问题的平均分之后,我们可以将结果以 markdown 格式返回:

result = ""
for i in range(n):
    result += "## Question {}\n\n".format(i+1)
    result += "* Score: {}\n".format(scores[i])
    result += "* Average: {:.2f}\n\n".format(avg_scores[i])
return result

这里,我们使用了 string.format() 方法来格式化字符串,并将其添加到一个名为 result 的字符串中。最后,将 result 返回。

完整代码片段如下所示:

def score(response):
    if response == "yes":
        return 1
    elif response == "no":
        return -1
    else:
        return 0

def calculate_scores(n):
    scores = [0] * n
    total_score = 0

    for i in range(n):
        response = input("Question {}: ".format(i))
        s = score(response)
        scores[i] = s
        total_score += s

    avg_scores = [0] * n
    for i in range(n):
        avg_scores[i] = scores[i] / total_score if total_score != 0 else 0

    result = ""
    for i in range(n):
        result += "## Question {}\n\n".format(i+1)
        result += "* Score: {}\n".format(scores[i])
        result += "* Average: {:.2f}\n\n".format(avg_scores[i])
    return result

使用示例:

n = 3
result = calculate_scores(n)
print(result)

返回结果:

## Question 1

* Score: 1
* Average: 0.33

## Question 2

* Score: -1
* Average: -0.33

## Question 3

* Score: 0
* Average: 0.00

以上就是一个简单的评分系统的实现方法,它可以用于对 n 个问题进行评分和统计。在实际应用中,我们可以根据需要对其进行适当的调整和扩展。