繁体   English   中英

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

[英]How to create a unique alphanumeric id each time and ensure it doesn't exist in my existing list using python?

我需要为用户分配一个包含单词“用户”和某个随机数的唯一名称。 user32944user80890等。 所以我写了一个这样的程序

import random

user_list = ["user32944", "user60690"] # essentially this list is what I retrieve 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设置为列表中已经存在的内容,我的程序不会退出循环并且程序挂起。

我究竟做错了什么?

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

以下代码示例执行您想要的操作。 尽管我建议您在 python 中探索uuid 包

import random
user_list = ["user32944", "user60690"] # essentially this list is what I retrieve 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()

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

因此,如果您不满足 IF 条件,请编写一个逻辑,以防万一 IF 没有得到 statisified 然后跳出循环。

如果你只想要带有随机字母数字 ID 的 guid,那么在 python 中使用 uuid 包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM