首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取RecursionError:运行flask应用程序时调用Python对象时超出了最大递归深度

获取RecursionError:运行flask应用程序时调用Python对象时超出了最大递归深度
EN

Stack Overflow用户
提问于 2019-06-06 09:44:32
回答 2查看 682关注 0票数 0

我正在尝试遍历从数据库中获得的值列表

我尝试使用while循环遍历它,但次数少于用户给出的次数。

代码语言:javascript
复制
def winner(x):
    winner = random.choice(x)
    return winner_list(x, winner)

winner_lists = []
def winner_list(y, x):
    if x not in winner_lists:
        winner_lists.append(x)
    else:
        winner(y)

i = 0
competitors = User.query.all() #gotten from database
main_competitors = []
for competitor in competitors:
    competitor_raffles = competitor.raffles.split(',')
    if uuid in competitor_raffles:
        main_competitors.append(competitor.uuid.strip(' '))
while (i < form.number.data) and (main_competitors != []):
    winner(main_competitors)
    i+=1

我希望看到从参赛者名单中随机选择的名字

EN

回答 2

Stack Overflow用户

发布于 2019-06-06 10:08:28

看起来问题出在while循环中。当winner_lists中包含了所有的main_competitors时,函数winnerwinner_lists会不断地相互调用,因为无法选择新的获胜者。

也许您在每次运行winner时都忘记从main_competitors中删除竞争对手。

票数 1
EN

Stack Overflow用户

发布于 2019-06-06 10:27:46

winner_list不向调用者返回值。这里有一些需要解包的地方,包括你使用的变量名隐藏了你的函数名,以及其他我想要改变的东西,但最终这不是一个需要递归的问题。

为什么不行?您知道(从form.number.data中)最大限度地选择胜利者的次数,并且您有一个特定长度的竞争者列表。

此示例仅选择唯一的获胜者。如果竞争对手可以不止一次“获胜”,那么只需删除最后一行。

代码语言:javascript
复制
results = []
how_many_winners = form.number_data
contestants = main_competitors[:]
while main_competitors and len(results) < how_many_winners:
    this_winner = random.choice(contestants)
    results.append(this_winner)
    contestants.remove(this_winner)   # Remove this line if a contestant can 'win' more than once
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56469974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档