使用循环在python中为连续结果添加更高的分数/罚分

xiaoxingxing python 242

原文标题Add higher score/penalty for consecutive result in python using loop

我正在尝试编写使用python计算最终分数的代码。我使用的初始代码是:

initial_score = 50
result = ['T','F','T','T','T','F']
final_score = initial_score
for i in (result):
  if i == 'T':
    final_score += 10
  else:
    final_score += -5
print(final_score)

结果是:

80

现在,如果列表中的结果是连续的,我想让分数/罚分增加。如果结果连续为真 (T),则添加到 initial_point 的点将在每个结果后增加(10、20、30 等)。例子:

initial_score = 50

result = ['T','T','T','T','T']

因此,列表中每个值的得分将为 [10,20,30,40,50],最终得分为 200。对于 False (F) 也是如此,除了惩罚为 (-5,-10, -15 等)。我也想做出限制,如果连续结果结束,它将从最新的得分/点球开始。例子:

initial_score = 10

result = ['T','T','F','F','T','T','F','F','F','F','T','T','T']

列表中的值为 [10,20,-5,-10,20,30,-10,-15,-20,-25,30,40,50],最终得分为 125。

我该怎么做?

原文链接:https://stackoverflow.com//questions/71962319/add-higher-score-penalty-for-consecutive-result-in-python-using-loop

回复

我来回复
  • Samwise的头像
    Samwise 评论

    跟踪奖励和惩罚,在每个正确/错误答案上更新它,如果它与之前的答案相同。

    def score(initial, result):
        total = initial
        award = 10
        penalty = 5
        for i, prev in zip(result, [None] + result):
            if i == 'T':
                if i == prev:
                    award += 10
                total += award
            else:
                if i == prev:
                    penalty += 5
                total -= penalty
        return total
    
    >>> score(50, ['T','T','T','T','T'])
    200
    >>> score(10, ['T','T','F','F','T','T','F','F','F','F','T','T','T'])
    125
    
    2年前 0条评论
  • BrokenBenchmark的头像
    BrokenBenchmark 评论

    您可以使用itertools.groupby()和一点数学来计算每个真/假条纹的点值:

    from itertools import groupby
    
    t_score = 10
    t_increment = 10
    f_score = -5
    f_increment = -5
    
    total_score = initial_score
    for key, items in groupby(result):
        length = sum(1 for item in items)
        if key == 'T':
            total_score += t_score * length + (length * (length - 1)) // 2 * t_increment
            t_score += t_increment * (length - 1)
        else:
            total_score += f_score * length + (length * (length - 1)) // 2 * f_increment
            f_score += f_increment * (length - 1)
    
    print(total_score)
    

    这输出:

    125
    
    2年前 0条评论
  • mrVerma的头像
    mrVerma 评论

    使用字典跟踪积分、奖励和惩罚。并遍历您的result列表以达到最终得分。

    initial_score = 10
    result = ['T','T','F','F','T','T','F','F','F','F','T','T','T']
    
    point_dict = {'T':10, 'F':-5}
    increment_dict = {'T':10, 'F':-5}
    cycle_num = 0
    
    
    for i in range(len(result)):
    
        if not cycle_num:
            initial_score += point_dict[result[i]]
        else:
            if result[i] == result[i-1]:
                point_dict[result[i]] += increment_dict[result[i]]
                initial_score += point_dict[result[i]]
            else:
                initial_score += point_dict[result[i]]
    
        cycle_num += 1
    
    print(point_dict)
    print(initial_score)
    
    2年前 0条评论