【问题标题】:Generating random characters in Python在 Python 中生成随机字符
【发布时间】:2021-11-29 00:20:22
【问题描述】:

我想生成一个 16 字符的代码

代码有 5 个已知字符 代码有 3 位数字 代码必须是随机的

我做了什么:

result1 = "NAA3U" + ''.join((random.choice(string.ascii_uppercase + string.digits) for codenum in range(11)))

【问题讨论】:

  • 请告诉我们您发现了哪些错误/错误,以便我们为您提供帮助。
  • 我没有错误,但代码不包含 3 位数字

标签: python python-3.x random


【解决方案1】:

如果你喜欢这样的话,你可以在末尾添加剩余的 2 位

import random
import string

result1 = "NAA3U" + ''.join((random.choice(string.ascii_uppercase) for codenum in range(8))) + str(random.randint(10,99))

print(result1)

NAA3URYWMGIHG45

【讨论】:

  • 我希望我的代码里面只包含 3 位数字
  • 如果我的编辑解决了您的问题,请告诉我
  • 代码必须是完全随机的,所以不,你不解决它,但非常感谢你的时间
  • @Beluga:您的代码有十分之一的时间会生成 14 个字符的字符串。我对此进行了测试,并得到了一个示例:NAA3UXGEUFWZX4
  • 是的,我的错,应该是 random.randint(10,99) 而不是 random.randint(1,99)。错过了额外的零
【解决方案2】:

一种方法:

import random
import string

# select 2 digits at random
digits = random.choices(string.digits, k=2)

# select 9 uppercase letters at random
letters = random.choices(string.ascii_uppercase, k=9)

# shuffle both letters + digits
sample = random.sample(digits + letters, 11)

result = "NAA3U" + ''.join(sample)
print(result)

输出 来自样本运行

NAA3U6MUGYRZ3DEX

如果代码需要包含至少3位数字,但不限于此阈值,只需更改此行:

# select 11 uppercase letters and digits at random
letters = random.choices(string.ascii_uppercase + string.digits, k=11)

这将从大写字母和数字中随机选择。

【讨论】:

    【解决方案3】:

    您可以使用random.choicesrandom.shuffle,然后使用''.join,如下所示:

    >>> import random
    >>> import string
    
    >>> def generate_rndm():
    ...    digit_char = random.choices(string.ascii_uppercase, k=9) + random.choices(string.digits, k=2)
    ...    random.shuffle(digit_char)
    ...    return "NAA3U" + ''.join(digit_char)
    

    输出:

    >>> generate_rndm()
    'NAA3UTVQG8DT8NRM'
    
    >>> generate_rndm()
    'NAA3UCYBWCNQ45HR'
    
    >>> generate_rndm()
    'NAA3UIJP7W7DLOCQ'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多