Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで大文字と数字を組み合わせたランダム文字列を生成する方法

Pythonでは、random.choice() を使うことで候補リストの中からランダムに1文字を取得できます。これを指定した回数だけ繰り返してリストに格納し、最後に join() で連結すれば、ランダムな文字列が完成します。

ここでの「候補」となるのは、大文字のアルファベット(string.ascii_uppercase)と数字(string.digits)です。以下に関数化した例を示します。

関数を使って生成する基本形

import string
import random

def get_random_string(length):
    random_list = []
    for _ in range(length):
        random_list.append(random.choice(string.ascii_uppercase + string.digits))
    return ''.join(random_list)

print(get_random_string(10))

実行すると、次のような10文字のランダム文字列が出力されます(実行ごとに結果は変わります)。

'35WO8ZYKFV'

1行で書く方法

リスト内包表記(ジェネレータ式)を使えば、同じ処理を1行で簡潔に書けます。

>>> ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10))
'35WO8ZYKFV'

Python 3.6以降なら random.choices() が便利

Python 3.6以降では、random.choices() メソッドが使えます。第2引数 k に生成したい文字数を指定するだけでよいため、さらに短く書けます。

>>> ''.join(random.choices(string.ascii_uppercase + string.digits, k=10))
'35WO8ZYKFV'

補足:セキュリティ目的の場合は secrets モジュールを推奨

パスワードやトークンなど、予測されては困る用途でランダム文字列を生成する場合は、擬似乱数モジュールの random ではなく、暗号学的に安全な secrets モジュールの使用が推奨されています。

>>> import secrets, string
>>> ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(10))
'K7PQ2XW9RT'

用途に応じて使い分けることで、より安全で信頼性の高いプログラムになります。

  1. Pythonで文字列が大文字のみで構成されているか確認する方法

    Pythonでは、文字列が大文字のみで構成されているかどうかを確認する方法は主に2つあります。1つ目は組み込みメソッド isupper() を使う方法、2つ目は正規表現(regex)を使う方法です。 方法1:isupper() メソッドを使う isupper() は、文字列内のすべての英字が大文字であり、かつ少なくとも1つの英字が含まれている場合に True を返します。数字や記号が混在していても、英字がすべて大文字であれば True になります。 例 print(Hello world.isupper()) print(HELLO.isupper()) 出力 False True 最

  2. Pythonで文字列が小文字のみで構成されているか判定する2つの方法

    Pythonでは、文字列がすべて小文字で構成されているかどうかを簡単に判定できます。主な方法は2つあり、1つ目は文字列メソッドの islower() を使う方法、2つ目は正規表現を使う方法です。それぞれの特徴と違いを見ていきましょう。 方法1:islower() メソッドを使う islower() は、文字列内の英字がすべて小文字である場合に True を返します。数字やスペースなどの英字以外の文字は判定の対象外となる点に注意してください。 print(Hello world.islower()) print(hello world.islower()) 出力: False True