将元组元素连接为字符串,其中一个元素为字符串,另一个为整数元组

时间:2018-10-03 21:22:19

标签: python random passwords

提示是:

编写一个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))

我想知道的是如何使输出将字母数字放在一起,而不会像这样将它们分开并加上括号。任何帮助都非常感谢!

4 个答案:

答案 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元组。

现在需要发生的是:

  1. 将四元组连接在一起以创建字符串
  2. 相互添加字符串以获取完整密码

在将数字连接到字符串之前,您需要将数字本身转换为字符串,否则当您尝试将整数添加到字符串时会得到TypeErrorstr(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)