简体   繁体   English

在 python 中制作随机字符串的问题

[英]Problem with making random string in python

I'm semi-new to python, and i'm trying to make a random username and password generator, but nothing that I've been having trouble setting up a random username我是 python 的半新手,我正在尝试制作一个随机用户名和密码生成器,但没有什么我在设置随机用户名时遇到问题

I've tried just generating a random string of ten characters, but it ends up being way too long, and quite repetitive.我试过只生成一个由十个字符组成的随机字符串,但它最终太长了,而且非常重复。 Here's the code I tried这是我尝试过的代码

class CreateAcc:
    def passwordGenerator(self):
        import random, string
        password = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(8))
        return password
    def usernameGenerator(self):
        import random, string
        nameExtra = ''.join(str(random.randint(0, 9) for i in range(2)))
        username = ''.join(random.choice(string.ascii_letters) for i in range(10))
        username = username.join(nameExtra)
        return username
    def main():
        print("Username: %s. Password: %s" %(self.usernameGenerator(), self.passwordGenerator()))
ca = CreateAcc()
ca.main()                

The password works just fine, but I get a huge username, when I only want ten characters.密码工作得很好,但是当我只想要十个字符时,我得到了一个巨大的用户名。 It looks like this:它看起来像这样:

Username: xMxzISsYSg.xMxzISsYSgxMxzISsYSg xMxzISsYSgaxMxzISsYSgtxMxzISsYSg xMxzISsYSg0xMxzISsYSgxxMxzISsYSg0xMxzISsYSg0xMxzISsYSg0xMxzISsYSg0xMxzISsYSg0xMxzISsYSg2xMxzISsYSg0xMxzISsYSgBxMxzISsYSg0xMxzISsYSg9xMxzISsYSgAxMxzISsYSg5xMxzISsYSgDxMxzISsYSgExMxzISsYSg4xMxzISsYSg8xMxzISsYSg>. Username: xMxzISsYSg.xMxzISsYSgxMxzISsYSg xMxzISsYSgaxMxzISsYSgtxMxzISsYSg xMxzISsYSg0xMxzISsYSgxxMxzISsYSg0xMxzISsYSg0xMxzISsYSg0xMxzISsYSg0xMxzISsYSg0xMxzISsYSg2xMxzISsYSg0xMxzISsYSgBxMxzISsYSg0xMxzISsYSg9xMxzISsYSgAxMxzISsYSg5xMxzISsYSgDxMxzISsYSgExMxzISsYSg4xMxzISsYSg8xMxzISsYSg>. Password: mvomUHH6密码:mvomUHH6

username.join(nameExtra) means "take each of the characters in nameExtra , and put the full value of username between each of them". username.join(nameExtra)的意思是“取nameExtra中的每个字符,并将username的完整值放在每个字符之间”。 This is why it's appearing several times.这就是它多次出现的原因。 To fix this problem, do username + nameExtra instead of username.join(nameExtra) .要解决此问题,请执行username + nameExtra而不是username.join(nameExtra)

Also, you're not building a string correctly, so it's using <generator object CreateAcc.usernameGenerator.<locals>.<genexpr> at 0x0000020B09A5DE48> as the string, instead of the text you wanted it to use.此外,您没有正确构建字符串,因此它使用<generator object CreateAcc.usernameGenerator.<locals>.<genexpr> at 0x0000020B09A5DE48>作为字符串,而不是您希望它使用的文本。 To fix this problem, do ''.join(str(random.randint(0, 9)) for i in range(2)) instead of ''.join(str(random.randint(0, 9) for i in range(2))) .要解决此问题,请执行''.join(str(random.randint(0, 9)) for i in range(2))而不是''.join(str(random.randint(0, 9) for i in range(2))) Note the subtle difference in the closing parentheses.请注意右括号中的细微差别。

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

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