我想从我的名字中删除上次随机生成中使用的名字,这样它总是唯一的&不会在下一次生成中重复

2024-05-15 21:18:40 发布

您现在位置:Python中文网/ 问答频道 /正文

import random

names = ["raja","laxman","jay","ajay","lopo", "tost","lola","manish", "Vishal"]

idx = random.randint(0, len(names)-1)
    My_lable.config(text = (f"Thief: {names[idx]}") )

#例如,如果我在1 generate中得到raja,则应将其从下一个#generate中删除。一旦使用了所有名称,则应再次开始使用所有名称


Tags: import名称namesrandomgeneratelolaidxraja
2条回答

这里有一个解决方案,使用一个有副作用的函数。我更喜欢使用纯函数,但这应该符合您的目的,而且可能更简单

import random

names = ["raja","laxman","jay","ajay","lopo", "tost","lola","manish", "Vishal"]
excluding = []

def get_rand():
    name = names[random.randint(0, len(names)-1)]
    if len(excluding) == len(names):
        print("No more names to pick from")
        exit()
    if name in excluding:
        return get_rand()
    excluding.append(name)
    return name
    
for i in range(10):
    print(get_rand())

另一种方法是在删除已从列表中选择的名称的情况下对名称列表进行变异,但这只有在列表未在其他地方使用时才可能

随机输入

names = ["raja","laxman","jay","ajay","lopo", "tost","lola","manish", "Vishal"]

def get_rand():
    if not len(names):
        print("No more names to pick from")
        exit()
    idx = random.randint(0, len(names)-1)
    name = names[idx]
    del names[idx]
    return name
    
for i in range(10):
    print(get_rand())

如果您想保留原始名称列表,可以制作一个重复的列表并进行处理。否则,只需修改代码以使用pop()

import random
names = ["raja", "laxman", "jay", "ajay", "lopo", "tost", "lola", "manish", "Vishal"]
idx = random.randint(0, len(names) - 1)
My_lable.config(text = (f"Thief: {names.pop(idx)}"))

pop()返回给定索引中的条目,并将其从列表中删除

相关问题 更多 >