python - 代码 Python 3 的问题

标签 python arrays sorting arraylist

我是 python 的新手,我还在学习,我在尝试将它放入我的数组中时遇到了问题:

  • 每项赛事的获胜者
  • 平均分最高的房子
  • 获胜次数最多的房子

使用这段代码:

获取事件名称:

Flag = True
while Flag:
    try:
        e = str(input("Enter Event names [Type XXX to stop]: "))
        if e == 'XXX' or e == 'xxx':
            Flag = False
        else:
            event.append(e)
    except ValueError:
        print("Please enter a word, Thanks")
print()

获取房屋名称:

Flag = True
while Flag:
    try:
        h = str(input("Eneter House names [Type XXX to stop]: "))
        if h == 'XXX' or h == 'xxx':
            Flag = False
        else:
            total = total + 1
            house.append(h)
    except ValueError:
        print("Please enter a word, Thanks")
print()

获取事件点数和房屋点数

for i in (event):
    for j in (house):
        Flag = True
        while Flag:
            try:
                sevent = int(input("Enter %s's house for %s score: "%(j, i)))
                if sevent < 0:
                    print("Enter a number above 0, Thanks")
                else:
                    Flag = False
            except ValueError:
                print("Please enter a number above, Thanks")

        if j not in scores:
            scores[j] = []
        scores[j].append(sevent)
        score.append(sevent)

我也得到了打印总冠军和每项赛事的总分,但我不知道如何获得每项赛事的冠军,平均分最高的房子和获胜次数最多的房子。

要获得每个项目的总冠军和总分:

for house, score in sorted(scores.items(), key=lambda x: sum(x[1]),reverse=True):
    print ("House %s's Total Score: %i"%(house, sum(score)))
print(scores)
print("The Overall Winner is", max(scores, key=lambda h: sum(scores[h])))
print()

输出示例如下:

House House 1's Total Score: 80House House 3's Total Score: 70
House House 2's Total Score: 40
The Overall Winner is House 1

示例数组如下:

{'House 1': [20, 60], 'House 2': [30, 10], 'House 3': [40, 30]}

感谢您的帮助,我真的很感激。

最佳答案

首先,考虑一下您构建字典 score 的方式:

  • event[0] 的得分在 score[house_name][0] 中,
  • event[1] 的得分在 score[house_name][1] 中,
  • ...
  • event[last_event_index] 的得分在 score[house_name][last_event_index] 中。

因此,要获得每个事件的获胜者,您首先必须枚举所有事件:

for event_index, event_name in enumerate(event):
    ...

如果您不熟悉 enumerate() :它将为每个事件名称关联一个从零开始的索引。因此,如果您有 event = ['A', 'B', 'C', 'D']enumerate(event) 将产生以下对:

  • (0, 'A')
  • (1, 'B')
  • (2, 'C')
  • (3, 'D')

现在您可以遍历所有房屋并为特定事件提取他们的分数:

for event_index, event_name in enumerate(event):
    for house_name, house_scores in scores.items():
        print('House %s scored %d in event %s' % (
            house_name,
            house_scores[event_index],
            event_name,
        ))

为了得到最好的评分房子,我们可以把每个分数放在一个列表中并排序:

for event_index, event_name in enumerate(event):
    event_scores = []
    for house_name, house_scores in scores.items():
        house_event_score = house_scores[event_index]
        event_scores.append((house_event_score, house_name))
    # This will sort 'event_scores' from the lowest score
    # to the highest.
    event_scores.sort()
    # The winner (with the highest score) is the last element
    # of the list, i.e. the element with index -1.
    winner_score, winner_name = event_Scores[-1]
    print('%s has won %s with score %d' % ((
        winner_name,
        event_name,
        winner_score,
    ))

关于python - 代码 Python 3 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32245815/

相关文章:

python - 使用 matplotlib 将小图像放在绘图的一角

javascript - 复杂分组 : Array Reduce

java - 使用三个 for 循环比较两个数组

excel - 使用VBA对Excel表格进行排序时如何引用列中的当前周单元格?

java - 如何从值中获取java.util.map的键

javascript - 计算常用字符出现频率

python - Qmessagebox背景和文字颜色

python - python 3 中的 np.genfromtxt 错误

使用较大整数的 Python 2.7 数组范围无法正常工作

python - matplotlib 2 个级别中多个重叠的 xlabel