0

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

何が起こっているのかわかりません...誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

8

コインを 19 回投げます。50% の確率で文字を選び、残りの 50% で数字を選びますが、最大 5 回までです。number オプションをより頻繁にヒットする場合は、何も追加しません

したがって、最大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)

デモ:

>>> 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
于 2014-06-19T22:01:33.670 に答える
0
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)
于 2014-06-19T22:04:26.923 に答える