Python 基于分数的水平系统

Python 基于分数的水平系统,python,Python,我试图建立一个基于分数的等级体系,但是代码太长了。如果你能帮我把它弄小一点,我真的很感激。描述一下它应该做什么,就是得到分数,看看他们处于什么水平,如果他们达到了水平,它会告诉你他们达到了多少水平,现在达到了什么水平。我希望它上升到100,当它上升到更高的时候,它会变得更难升级。。以下是我目前掌握的情况: def pointLevel(name): point = Point.dPoint[name] points, lvl = int(point), int(lvl)

我试图建立一个基于分数的等级体系,但是代码太长了。如果你能帮我把它弄小一点,我真的很感激。描述一下它应该做什么,就是得到分数,看看他们处于什么水平,如果他们达到了水平,它会告诉你他们达到了多少水平,现在达到了什么水平。我希望它上升到100,当它上升到更高的时候,它会变得更难升级。。以下是我目前掌握的情况:

 def pointLevel(name):
    point = Point.dPoint[name]
    points, lvl = int(point), int(lvl)
    if points < 500:
      lvl = 1
    elif points < 1500:
      lvl = 2
    elif points < 2500:
      lvl = 3
    elif points < 5000:
      lvl = 4
    elif points < 10000:
      lvl = 5
    elif points < 15000:
      lvl = 6
    elif points < 20000:
      lvl = 7
    elif points < 30000:
      lvl = 8
    elif points < 50000:
      lvl = 9
    elif points < 100000:
      lvl = 10
    elif points < 250000:
      lvl = 11
    notes.store("levels", user.name, "You have leveled up. You are now level "+str(lvl)+"!", int(time.time()))

为了缩短代码,您可以将级别保存为列表,然后通过将点与级别拆分进行比较来计算用户通过的级别数:

levels = [100, 200, 300, 400, 500]
lvl = len([x for x in levels if points > x])
我不担心这里的速度,但使用发电机可以被认为是更好的做法,在这种情况下,这是一个品味问题:

lvl = sum(1 for x in levels if points > x)

为了缩短代码,您可以将级别保存为列表,然后通过将点与级别拆分进行比较来计算用户通过的级别数:

levels = [100, 200, 300, 400, 500]
lvl = len([x for x in levels if points > x])
我不担心这里的速度,但使用发电机可以被认为是更好的做法,在这种情况下,这是一个品味问题:

lvl = sum(1 for x in levels if points > x)

如果您发现自己反复重复相同/相似的代码超过两次,这是一个好迹象,表明您需要使用循环:


如果您发现自己反复重复相同/相似的代码超过两次,这是一个好迹象,表明您需要使用循环:


为了详细说明@sashkello,这里有一个函数,它将点作为整数输入,并输出级别:

def getLevel(points):
    levels=[500,1500,2500,5000,10000,15000,20000,30000,50000,100000,250000]
    lvl = len([x for x in levels if points > x])
    return lvl

为了详细说明@sashkello,这里有一个函数,它将点作为整数输入,并输出级别:

def getLevel(points):
    levels=[500,1500,2500,5000,10000,15000,20000,30000,50000,100000,250000]
    lvl = len([x for x in levels if points > x])
    return lvl

对分模块有助于查找“此列表中的哪个项目在正确的范围内”。它返回值所属范围上限的索引号。比如说

import bisect

exp_level = [100,200,300,400,500]  # bisect lists need to be sorted
level = bisect.bisect(exp_level, 127)   # = 1

在该示例中,bisect.bisect将返回1,因为索引1即200是列表中的下一项

对分模块适用于查找“此列表中的哪个项目在正确的范围内”。它返回值所属范围上限的索引号。比如说

import bisect

exp_level = [100,200,300,400,500]  # bisect lists need to be sorted
level = bisect.bisect(exp_level, 127)   # = 1

在该示例中,bisect.bisect将返回1,因为索引1即200是列表中的下一项

你可以考虑的第一件事是制作一个函数——首先是数学函数,然后是代码函数——来表示你的等级进步。类似于lvl=点数/500,并从那里开始工作。这应该可以减少你需要的ELIF的数量。你可以考虑的第一件事是制作一个函数——首先是数学函数,然后是代码函数——来表示你的等级进步。类似于lvl=点数/500,并从那里开始工作。这会减少你需要的ELIF的数量。这太棒了。这应该对我有很大帮助。非常感谢。请给出一个关于lvl=sum部分的示例。@user3230748您的意思是什么?上面的代码可以正常工作,您只需定义级别并将特定用户的点数传递给points变量……如果您指的是generator expression,它通过求和1来计算小于点的级别。如果点数大于特定的等级,它会增加1,和计数一样,对吗?是的。没错。我只是想弄清楚那部分是怎么工作的,太棒了。这应该对我有很大帮助。非常感谢。请给出一个关于lvl=sum部分的示例。@user3230748您的意思是什么?上面的代码可以正常工作,您只需定义级别并将特定用户的点数传递给points变量……如果您指的是generator expression,它通过求和1来计算小于点的级别。如果点数大于特定的等级,它会增加1,和计数一样,对吗?是的。没错。我只是想在你回答之前弄清楚那部分是怎么工作的。。。不明白为什么整数在这里很重要。在回答之前编辑它。。。我不明白为什么整型在这里很重要。bisect是在下载python时随附的还是我必须得到它?bisect是在下载python时随附的还是我必须得到它?