我正在尝试遍历从数据库中获得的值列表
我尝试使用while循环遍历它,但次数少于用户给出的次数。
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我希望看到从参赛者名单中随机选择的名字
发布于 2019-06-06 10:08:28
看起来问题出在while循环中。当winner_lists中包含了所有的main_competitors时,函数winner和winner_lists会不断地相互调用,因为无法选择新的获胜者。
也许您在每次运行winner时都忘记从main_competitors中删除竞争对手。
发布于 2019-06-06 10:27:46
winner_list不向调用者返回值。这里有一些需要解包的地方,包括你使用的变量名隐藏了你的函数名,以及其他我想要改变的东西,但最终这不是一个需要递归的问题。
为什么不行?您知道(从form.number.data中)最大限度地选择胜利者的次数,并且您有一个特定长度的竞争者列表。
此示例仅选择唯一的获胜者。如果竞争对手可以不止一次“获胜”,那么只需删除最后一行。
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 oncehttps://stackoverflow.com/questions/56469974
复制相似问题