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



提示符是:

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

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

您可以将数字转换为字符串,将它们组合成一个带有join的字符串,然后与字母连接:

password = ('nigc', (5, 4, 9, 6))
password[0] + ''.join([str(x) for x in password[1]])
# 'nigc5496'

我认为您可以简化代码并使用字符串格式来格式化密码。例如:

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}")

您可以使用格式化打印并解压缩passwordnumber元组

print('{}{}{}{}{}'.format(passwordletter, *passwordnumber)
# nigc5496

这一切都在朝着正确的方向发展,只是需要澄清一些关于字符串和元组的混乱。答案中有括号的原因是

(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. 将 4 元组连接在一起以构成字符串
  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)

最新更新