0

此代码输出一串随机生成的字符。例如:V86Ijgh(!y7l0+x

import string
import random

password = ''.join([random.choice(string.printable) for i in range(15)])

print(password)

在出现 \n 之类的转义字符的情况下

V86Ijg\n!y7l0+x

并创建输出:

V86Ijg 
!y7l0+x

因为它初始化了一个新行而不是打印出来:

V86Ij\n(!y7l0+x

就像之前一样。

避免解释转义字符的预期输出(例如创建新行、制表符等)的最佳方法是什么?我对输入别无选择,因为它是随机的。我想知道如何在不从原始字符串中删除字符的情况下以原始形式输出字符串。我希望密码在生成时显示。

4

2 回答 2

2

如果您想让特殊字符保持转义,您应该使用转义字符对字符串进行编码,即:

print(password.encode("unicode_escape").decode("utf-8")) 
# on Python 2.x: print(password.encode("string_escape"))

使用repr()将在您的字符串周围添加单引号。

于 2018-05-21T14:40:46.003 回答
0

string.printable您可以通过使用集合运算符从 中取出所有空白字符来制作自己的字符集以从中选择:

chars = ''.join(set(string.printable) - set(string.whitespace))

password = random.choice(chars)

key_length = 1
while(key_length < 15):
        password += random.choice(chars)
        key_length = key_length + 1

print(password)

请注意,整个循环可以用列表推导替换:

password = ''.join([random.choice(chars) for _ in range(15)])

编辑如果要保留转义字符和空格字符,但只想将密码打印到控制台,请使用以下repr()功能:

print(repr(password))
于 2018-05-21T02:50:56.450 回答