如何使用python每次创建一个唯一的字母数字id并确保它不存在于我现有的列表中?

2024-10-03 04:30:18 发布

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

我需要分配一个唯一的名称,其中包含单词'用户'和一个特定的随机数给一个用户。比如user32944user80890等等,所以我写了一个这样的程序

import random

user_list = ["user32944", "user60690"] # essentially this list is what I retireve from some database
user_name = ""
while(True):
    if user_name not in user_list:
        user_name = "user" + str(random.random() * 100000).split(".")[0]
        break

print(user_name)

但是如果我故意将user_name设置为列表中已经存在的某个对象,那么我的程序不会退出循环,程序将挂起

我做错什么了


Tags: 用户nameimport程序名称israndomthis
2条回答

它永远不会退出循环,因为您永远不会满足IF条件,而且while上也没有条件表达式,您在while条件中给出了True->;这意味着它无限循环

所以,如果你不满足if条件,那么写一个逻辑,如果没有得到统计,你想做什么,然后打破循环

如果您希望guid只包含随机的字母数字id,那么使用python中的uuid包

仅当生成的用户名不在列表中时才执行操作,但当用户名在列表中时不执行任何操作。因此,如果不退出while循环,程序将挂起

下面的代码示例满足您的要求。尽管我建议您探索python中的uuid package

import random
user_list = ["user32944", "user60690"] # essentially this list is what I retireve from some database

def generateRandomUsername():
    randomNr = random.randint(1,3)
    if randomNr == 1:
        return "user32944"
    else:
        return "user" + str(random.random() * 100000).split(".")[0]

def getRandomUniqueUsername():
    while(True): 
        username = generateRandomUsername() 
        if username not in user_list:
            print('Created user \'%s\'' % username) 
            return username
        else:
            print("Username \'%s\'already exists, generating new one" % username)

def printUsernameList():
    for username in user_list:
        print('Username: %s' % username)

#Create 4 random usernames
for i in range(4):
    username = getRandomUniqueUsername()
    user_list.append(username)
    print('Printing user_list...')
    printUsernameList()

相关问题 更多 >