确定价值最高的变量并使用python random打印变量名称

确定价值最高的变量并使用python random打印变量名称,python,Python,我在做一个项目时遇到了这个问题,我得到了3个随机生成的数字,想要确定最大的数字,然后使用它的变量名,打印出如下内容: print("the winner is:", winner, "with", winners_score, "points") 胜利者是球队的名字,分数是球队的分数。我尝试了多种方法来解决这个问题,包括列出一个列表和确定最高分数,等等。但是我无法打印获胜者的名字,只能打印获胜者的分数。然后我试着用名字作为键,分数作为值,然后反过来。它们都不起作用,然后我尝试了。值和。键,但也

我在做一个项目时遇到了这个问题,我得到了3个随机生成的数字,想要确定最大的数字,然后使用它的变量名,打印出如下内容:

print("the winner is:", winner, "with", winners_score, "points")
胜利者是球队的名字,分数是球队的分数。我尝试了多种方法来解决这个问题,包括列出一个列表和确定最高分数,等等。但是我无法打印获胜者的名字,只能打印获胜者的分数。然后我试着用名字作为键,分数作为值,然后反过来。它们都不起作用,然后我尝试了。值和。键,但也不起作用。我最终创建了一段代码来解决它,但是太复杂了,无法在一个包含10个以上变量的程序中使用。以下是该测试的代码:

from random import *
score1 = randint(0, 51)
score2 = randint(0, 51)
score3 = randint(0, 51)

print(score1)
print(score2)
print(score3)
lister = [score1, score2, score3]
highest_score = max(lister)
winner = " "
if score1 > score2 and score1 > score3:
    winner = "score1"
elif score2 > score1 and score2 > score3:
    winner = "score2"
elif score3 > score1 and score3 > score2:
    winner = "score3"
else:
    winner = "nobody"
print("the highest score is", highest_score, "by", winner)
但如果我在前两名之间有平局,这就行不通了。那么,我如何用一行较短的代码获得最高分数和分数的获胜者呢 另外,我还检查了本网站上的其他问题,但这两个问题都没有给我想要的答案,请阅读: 和 .
谢谢你的帮助

您可以根据每个分数创建一个所有获奖者的名单,然后创建得分最高的所有指数的名单,然后创建一个所有获奖者的名单

lister = [score1, score2, score3]
list_of_according_winner = ["score1", "score2", "score3"]

# list of highscore indices (if two are equal, you can have several elements)
highscore_index = [i for i, x in enumerate(lister) if x == max(lister)]

# create list of winners
winners = [list_of_according_winner[i] for i in highscore_index]

#printing
print("the highest score is", max(lister), "by", ", ".join(winners))

我省略了nobody选项,因为maxlister总是有一个值,因此总会有一个赢家,至少在您实现它的方式上是这样的。

您可以使用字典来存储名称和分数,这会将这两位相关数据保持在一起。使用内置的排序函数首先获得最高分数,比较前两个分数以检查是否有抽屉

from random import randint

l = []

def addTeam(name):
    l.append(
    {"name": name, "score": randint(0, 51)}
    )

def sortScores():
    return sorted(l, key=lambda t: t["score"], reverse=True)

def isDraw():
    if l[0]["score"] == l[1]["score"]:
        return True
    return False

if __name__ == '__main__':
    addTeam("Team1")
    addTeam("Team2")
    addTeam("Team3")
    l = sortScores()

    if isDraw():
        winner = "nobody"
    else:
        winner = l[0]["name"]

    print("The highest score is {} by: {}".format(l[0]["score"], winner))

尽量避免执行*导入,因为这可能会导致冲突。

如果出现平局,您希望发生什么?我没有时间创建该函数@JoeIddon,我只是想创建一个简短的程序,展示我可以为我的问题创建什么。如果有一场平局的话,我想在这两个人之间进行点球大战,如果他们都平局的话,甚至更多。对于介于0和10之间的随机数或其他一些东西,您确实需要使用列表或dict来正确执行此操作。尝试使用一组编号的变量来执行此操作是混乱、混乱和容易出现错误的。我应该将代码添加到完整的项目中吗?因为我刚刚发布的代码只是一个示例,它工作得很好,但是如果变量和团队名称与我在主程序中的不同,该怎么办:团队名称为蓝色,变量为蓝色?这并不重要。重要的是,您的列表者的顺序与根据获胜者列出的列表顺序相同。如果lister=[蓝色、红色、绿色],那么在这种情况下,根据赢家列表必须是根据赢家的列表=[蓝色选民、红色选民、绿色选民]。请注意,根据获胜者的列表是一个字符串列表,与变量名没有任何关系。我现在创建一个从最高分数到最低分数的列表,出于某种原因,它会给出一个错误,即:ValueError:list.removex:x不在列表中。这与你制作的程序或我自己的编码有关吗?我想这与你的代码有关。如果对已删除的项目使用.remove命令,将出现此错误。我不知道你为什么在没有看到代码的情况下使用remove。我建议您这样做您的排序列表=sortedy您的列表,reverse=True,然后您将其从最高到最低排序。对不起,我刚刚发现我的问题措辞错误!我应该说我正在创造一个前10名的排行榜打印出来。很抱歉给你带来了困惑