提示是:
编写一个Python程序,提示用户输入他或她的名字,然后创建一个秘密密码,该密码由从他或她的名字中随机抽取的三个字母(小写)和一个随机的四位数组成。例如,如果用户输入“ Vassilis Bouras”,则秘密密码可能是“ sar1359”或“ vbs7281”或“ bor1459”之一。密码中不允许使用空格字符。您将必须使用字符串切片,随机,低级和446670串联。
我的代码是:
import random
name = input("Enter your name all lowercase ")
name2 = name.replace(" ", "")
letter1 = random.choice(name2)
letter2 = random.choice(name2)
letter3 = random.choice(name2)
letter4 = random.choice(name2)
passwordnumber = (random.randint(0, 9),
random.randint(0, 9),
random.randint(0, 9),
random.randint(0, 9))
passwordletter = (letter1 + letter2 + letter3 + letter4)
password = passwordletter, passwordnumber
print(password)
现在我在程序中输入名称“ nick g”并得到:
('nigc',(5,4,9,6))
我想知道的是如何使输出将字母数字放在一起,而不会像这样将它们分开并加上括号。任何帮助都非常感谢!
答案 0 :(得分:0)
您可以将数字转换为字符串,使用public void Update<T>(T entity) where T : IIdentity
{
if(entity.Id == ObjectId.Empty)
{
entity.Id = ObjectId.GenerateNewId();
}
collection.ReplaceOne(x => x.Id == entity.Id, entity, new UpdateOptions() { IsUpsert = true } );
}
将它们放在一起作为一个字符串,然后将其与字母连接:
join
答案 1 :(得分:0)
我认为您可以简化代码并使用string format 来设置密码格式。例如:
import random
name = "Guido van Rossum"
name2 = name.replace(" ", "")
letter1 = random.choice(name2)
letter2 = random.choice(name2)
letter3 = random.choice(name2)
letter4 = random.choice(name2)
num1 = random.randint(0, 9)
num2 = random.randint(0, 9)
num3 = random.randint(0, 9)
num4 = random.randint(0, 9)
print(f"{letter1}{letter2}{letter3}{letter4}{num1}{num2}{num3}{num4}")
答案 2 :(得分:0)
您可以使用格式化打印并打开passwordnumber
tuple
print('{}{}{}{}{}'.format(passwordletter, *passwordnumber)
# nigc5496
答案 3 :(得分:0)
这一切都朝着正确的方向发展,只是为了消除字符串和元组的混乱。答案中包含方括号的原因是
(random.randint(0, 9),
random.randint(0, 9),
random.randint(0, 9),
random.randint(0, 9))
(数字用逗号分隔,用括号括起来)和
passwordletter, passwordnumber
是元组。您最终在2元组中包含4元组(数字)。 Python将它们括起来以让您知道:
('nigc', (5, 4, 9, 6))
表示一个2元组,其中第一个字符串,第二个中嵌入式4元组。
现在需要发生的是:
在将数字连接到字符串之前,您需要将数字本身转换为字符串,否则当您尝试将整数添加到字符串时会得到TypeError
。 str(5)
产生字符串'5'
,因此我们在每个数字上使用str()
:
passwordnumber = (str(random.randint(0, 9)),
str(random.randint(0, 9)),
str(random.randint(0, 9)),
str(random.randint(0, 9)))
但这变得重复且复杂。如果安全性越来越严格,而您想要一个12位数的密码,该怎么办? Python有一个称为列表理解的有用工具,它对于构建任何大小的列表非常有用。我们可以使用它来构建数字列表,而无需重复代码:
numbers_list = [str(randint(0, 9)) for _ in range(4)]
这是一个完整的答案,比起您的答案要短得多,它使用了理解和Python的其他一些有用功能。请注意,如上所述,在连接之前使用str()
将数字转换为字符串。
from random import choice, randint
name = 'Sherlock Holmes'
name_as_word_list = name.lower().split()
name_no_spaces = ''.join(name_as_word_list)
letters_list = [choice(name_no_spaces) for _ in range(3)]
numbers_list = [str(randint(0, 9)) for _ in range(4)]
password = ''.join(letters_list + numbers_list)
print(password)