Je dois attribuer un nom unique qui contient le mot «utilisateur» et un certain nombre aléatoire à un utilisateur. Quelque chose comme user32944, user80890 etc. J'écris donc un programme quelque chose comme ça

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)

Mais si j'ai délibérément défini le user_name sur quelque chose qui existe déjà dans la liste, mon programme ne quitte pas la boucle et le programme se bloque.

Qu'est-ce que je fais mal?

-1
Souvik Ray 19 mars 2019 à 13:51

2 réponses

Meilleure réponse

Vous effectuez uniquement une action lorsque le nom d'utilisateur généré n'est pas dans la liste, mais vous ne faites rien lorsque le nom d'utilisateur est dans la liste. Et par conséquent, vous ne quittez pas la boucle while et le programme se bloquera.

L'exemple de code suivant fait ce que vous voulez. Bien que je vous recommande d'explorer le paquet uuid en python.

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()
1
marc_s 26 juil. 2020 à 15:59

Cela ne quittera jamais la boucle car vous ne remplissez jamais la condition IF et il n'y a pas d'expression conditionnelle sur while aussi, vous avez donné la condition True in while -> ce qui signifie qu'il boucle indéfiniment.

Donc, si vous ne satisez pas la condition IF, écrivez une logique ce que vous voudriez faire car IF ne sera pas statisifié, puis sortira de la boucle.

Et si vous voulez guid avec juste des identifiants alphanumériques aléatoires, utilisez le package uuid en python.

0
jagadish 19 mars 2019 à 16:54