Python 3.x 随机字符串生成器python

Python 3.x 随机字符串生成器python,python-3.x,random,rpython,Python 3.x,Random,Rpython,我用Python编写了一个简单的程序来生成一个随机字符串,其中包含5个数字: import random numcount = 5 fstring = "" for num in range(19): #strings are 19 characters long if random.randint(0, 1) == 1: x = random.randint(1, 26) x += 96 fstring += (chr(x).uppe

我用Python编写了一个简单的程序来生成一个随机字符串,其中包含5个数字:

import random

numcount = 5
fstring = ""

for num in range(19): #strings are 19 characters long
    if random.randint(0, 1) == 1:
        x = random.randint(1, 26)
        x += 96
        fstring += (chr(x).upper())
    elif not numcount == 0:
        x = random.randint(0, 9)
        fstring += str(x)
        numcount -= 1

print(fstring)
不太难吧?除了一件不可思议的事情:它返回的字符串是随机长度的。我已多次运行该代码,以下是我的一些结果:

>>> ================================ RESTART ================================
>>> 
VQZ99HA5DER0CES4
>>> ================================ RESTART ================================
>>> 
05PS0T86LOZS
>>> ================================ RESTART ================================
>>> 
E2QX8296XK
>>> ================================ RESTART ================================
>>> 
M5X9K457QDNBPX

我不知道发生了什么。。。谁能给我指出正确的方向吗?

你掷硬币19次;50%的时候你会选择一个字母,另外50%的时候你会选择一个数字,但最多只能选择5次。如果您更频繁地点击数字选项,则不会添加任何内容

因此,您可以构建一个最多19个字符的字符串,但它可以更短。平均是9.5个字母和5个数字

仅在仍有数字可供选择时选择数字:

import string
import random

numcount = 5
chars = []

for num in range(19): #strings are 19 characters long
    if numcount and random.random() < 0.5:
        chars.append(str(random.randint(0, 9)))
        numcount -= 1
    else:
        chars.append(random.choice(string.ascii_uppercase))

fchars = ''.join(chars)
导入字符串
随机输入
numcount=5
字符=[]
对于范围(19)中的num:#字符串长度为19个字符
如果numcount和random.random()小于0.5:
附加字符(str(random.randint(0,9)))
numcount-=1
其他:
chars.append(random.choice(string.ascii_大写))
fchars=''.join(字符)
演示:

导入字符串 >>>随机输入 >>>string.ascii_大写 “ABCDEFGHIJKLMNOPQRSTUVWXYZ” >>>numcount=5 >>>字符=[] >>>对于范围(19)中的num:#字符串长度为19个字符 ... 如果numcount和random.random()小于0.5: ... 附加字符(str(random.randint(0,9))) ... numcount-=1 ... 其他: ... chars.append(random.choice(string.ascii_大写)) ... >>>''加入(chars) “3M6G97OEHP6TGRONPV” >>>莱恩(查尔斯) 19
如果不进行任何深层次分析,您可以看到,有时两个ifs都会失败(导致较短的F字符串),有时,随机地,它们不会。有时,很少,它们不会。平均而言,在数值分支中,您将得到9.5次迭代,而只有5次会做任何事情。你不太可能只得到5次或更少的迭代。这可以生成短至5个字符的字符串,我想他不希望这样只生成5个字符。
>>> import string
>>> import random
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> numcount = 5
>>> chars = []
>>> for num in range(19): #strings are 19 characters long
...     if numcount and random.random() < 0.5:
...         chars.append(str(random.randint(0, 9)))
...         numcount -= 1
...     else:
...         chars.append(random.choice(string.ascii_uppercase))
... 
>>> ''.join(chars)
'3M6G97OEHP6TGYRONPV'
>>> len(chars)
19
import random

numcount = 5
fstring = ""


while numcount > 0:
    if random.randint(0, 1) == 1:
        x = random.randint(1, 26)
        x += 96
        fstring += (chr(x).upper())
    elif not numcount == 0:
        x = random.randint(0, 9)
        fstring += str(x)
    numcount -= 1

print(fstring)