【问题标题】:Separate Words in Random Word Generator随机词生成器中的单独词
【发布时间】:2018-02-25 13:56:06
【问题描述】:

我写了一个小单词生成器。我目前有生成器提供不同的单词,但不知道如何使用 split 功能在打印密码时在每个随机生成的单词之间插入连字符

当前输出:thisisapassword

期望的输出:this-is-a-password

answer = urllib.request.urlopen('http://svnweb.freebsd.org/csrg/share/dict/words?view=co&content-type=text/plain')
txt = answer.read()
words = txt.splitlines()

password = ''
 for c in range(3):
password += random.choice(words)
print(password)

【问题讨论】:

  • 你想要join,而不是split - 将这三个词列成一个列表,然后用连字符将它们连接起来。

标签: python random generator hyphen


【解决方案1】:

你可以做两件事:

  1. 当您添加每个新单词时,也要添加一个连字符。循环结束后,使用password = password[:-1] 删除尾随连字符:

    password = ''
    
    for c in range(3):
        password += random.choice(words)
        password += '-'
    
    password = password[:-1]
    print(password)
    
  2. 另一方面,您可以将所有三个单词存储为一个列表,然后使用.join 添加连字符并转换为字符串。例如:

    password = []
    
    for c in range(3):
        password.append(random.choice(words))
    
    print('-'.join(password))
    

    如果您希望将其压缩为一个单行,那么您有以下列表理解,正如@JonClements 指出的那样:

    password = '-'join(random.choice(words) for _ in range(3))
    

    或者在 Python 3.6 中:

    password = '-'join(random.choices(words, k=3))
    

【讨论】:

  • 或者你已经走了这么远 - 只是:password = '-'join(random.choice(words) for _ in range(3))
  • @JonClements 这可能行得通,但缩短已经很短的一个班轮不会带来太多好处。因此,我将把这个答案保持在当前状态。
  • 由于random.choices 设计用于多个选择 - 它更加隐含并针对这些情况进行了优化 - 这不是“短小”问题 - 这是目的问题。
  • @JonClements 为了完整起见对其进行了编辑。
  • choices 带有 s :)
猜你喜欢
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多