gpt4 book ai didi

python - 如何解决这个复杂的递归问题,金字塔点系统

转载 作者:行者123 更新时间:2023-12-01 06:19:36 25 4
gpt4 key购买 nike

我正在尝试为 ARG 游戏编写一个类似金字塔的评分系统,但遇到了一个问题。当用户进入游戏时,他们会开始一个新的“金字塔”,但如果一个人使用另一位玩家的推荐代码开始游戏,他们就会成为该用户的 child ,然后在阶梯上踢分。

这里的问题不是积分计算,在你们的帮助下我已经得到了正确的结果,但是如果用户获得比其父级更多的积分,他们应该在阶梯中切换位置。这样用户的父级就成为其子级,依此类推。

我现在的Python代码不能正常工作,我真的不知道为什么。

def verify_parents(user):
"""
This is a recursive function that checks to see if any of the parents
should bump up because they got more points than its parent.

"""
from rottenetter.accounts.models import get_score

try:
parent = user.parent
except:
return False
else:
# If this players score is greater than its parent
if get_score(user) > get_score(parent):
# change parent
user.parent = parent.parent
user.save()

# change parent's parent to current profile
parent.parent = user
parent.save()
verify_parents(parent)

在我看来,这应该可行,如果用户有 parent ,请检查用户是否比其 parent 获得更多积分,如果是,则将用户的 parent 设置为 parent 的 parent ,并将 parent 的 parent 设置为用户,然后他们交换了位置。之后,以父级为目标调用相同的函数,以便它可以 self 检查,然后继续向上爬。

但这并不总是有效,在某些情况下,人们由于某种原因没有被安排到正确的位置。

编辑:

当一个用户在梯子上爬上或爬下台阶时, child 会与他一起移动,因此他们仍然与同一个 parent 相关,除非他们为了获得更多积分并向上爬。所以和 parent 在一起应该没什么必要吧?

最佳答案

我认为你的问题可能是你没有将profile的 child 设置为现在有parent作为它/他们的 parent ,除非 child 有 parent 不可能也是你系统中的 parent (我不认为是这种情况)。

或者(或者可能与前一个一起),您可能只想执行 parent = profile.parent 而不是 parent = profile.parent.get_profile()

编辑:我发现您确实切换到了第二种形式,尽管使用 user 而不是 profile

无论如何,由于每个用户可以有多个 child (正如您在另一个答案的评论中所述),您可能希望从该用户的对象中跟踪每个用户的 child 。类似...

parent = user.parent
user.parent = parent.parent
parent.parent = user

children = user.children

for child in children:
child.parent = parent

user.children = parent.children

for child in user.children:
if child is user:
child = parent

child.parent = user

parent.children = children

for child in user.parent.children:
if child is parent:
child = user

不过,这可能需要重构,而且我可能错过了一些东西。

关于python - 如何解决这个复杂的递归问题,金字塔点系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1171926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com