100日でPythonをマスターする(基本)-30日目:標準ライブラリランダム

序文

  • 著者について:Pythonの分野における高品質のクリエーターとデータ開発エンジニア
  • Pythonフルスタックエンジニアになるためのインスピレーション、もっとエキサイティングなものを見つけるために私に従ってください〜
  • この記事はPythonフルスタックシリーズに含まれています:入社から就職までPythonをマスターするための100日
  • サブスクライブへようこそ。コラムをサブスクライブした後、100人のPythonフルスタックコミュニケーショングループ(直接の教育、質問への回答)にプライベートチャットでき ます。また、80GPythonフルスタックチュートリアル+300のコンピューターブックを受け取ることもできます。 :基本、Web、クローラー、データ分析、視覚化、機械学習、深層学習、人工知能、アルゴリズム、インタビューの質問など。
  • 私と一緒に学び、一緒に進歩してください。人は速く進むことができ、人々のグループはさらに進むことができます!

ここに画像の説明を挿入
ここに画像の説明を挿入

1.ランダムライブラリの紹介

ランダムモジュールは、さまざまな分布伪随机数のジェネレーターを実装します。疑似乱数と呼ばれるのはなぜですか。つまり、人間はアルゴリズムやその他の方法を使用して、ベンチマーク(シードとも呼ばれ、最も一般的に使用されるのはタイムスタンプ)に基づいて一連の数値を作成し、これらの数値の特性は一致します。人々が乱数として理解するものに。ただし、アルゴリズムによって取得されるため、アルゴリズムとシードが決定されると、生成される乱数のシーケンスも決定されるため、疑似乱数と呼ばれます。

import random

2.共通機能

random.seed(a)

同じ乱数シーケンスを出力できる最初の乱数シードを設定します。aは整数または浮動小数点数です。設定されていない場合、システム時刻がデフォルトでシードとして使用されます。

import random

print("没有设定种子时")
for i in range(5):
    ret = random.randint(1, 10)
    print(ret, end=" ")
print()

print("设定种子时")
random.seed(1)
for i in range(5):
    ret = random.randint(1, 10)
    print(ret, end=" ")

出力結果:
ここに画像の説明を挿入
上図からわかるように、シードが明示的に設定されていない場合、毎回出力される乱数が異なります。シードが明示的に設定されている場合、毎回出力される乱数は同じです。

random.random()

0.0から1.0までのランダムな浮動小数点数を生成するために使用されます

>>> import random
>>> random.random()
0.9279749775408933
>>> random.random()
0.12720379394341363
>>> random.random()
0.9391670189485866

random.uniform(a、b)

[a,b]aとbの間にランダムな小数を生成します;整数または浮動小数点

>>> import random
>>> random.uniform(10.0, 20.0)
10.839441969258752
>>> random.uniform(10.0, 20.0)
12.233491150445115
>>> random.uniform(10, 20)
11.290566243261305

random.randint(a、b)

[a,b]間のランダムな整数を生成します

>>> import random
>>> random.randint(10,100)
100
>>> random.randint(10,100)
83
>>> random.randint(10,100)
66

random.randrange(start、stop、[step])

[start,stop)ステップ数としてstepを使用してランダムな整数を生成します。start、stop、stepは整数であり、stepが設定されていない場合のデフォルト値は1です。

1〜100の整数をランダムに生成します。

>>> import random
>>> random.randrange(1,100)
54
>>> random.randrange(1,100)
21
>>> random.randrange(1,100)
71

1〜100の奇数をランダムに生成します。

>>> import random
>>> random.randrange(1,100,2)
37
>>> random.randrange(1,100,2)
63
>>> random.randrange(1,100,2)
29

1〜100の偶数をランダムに生成します。

>>> import random
>>> random.randrange(2,100,2)
62
>>> random.randrange(2,100,2)
6
>>> random.randrange(2,100,2)
46

random.getrandbits(k)

1以内にランダムな整数を生成し占内存k位ます。kは長さの整数値を取ります

>>> import random
>>> random.getrandbits(10)
29
>>> random.getrandbits(10)
540
>>> random.getrandbits(10)
227

random.choice(seq)

シーケンスタイプseqからランダムに要素を返します。seqは、文字列、リスト、タプルなどのシーケンスタイプを取ります。

>>> import random
>>> list = ['a', 'b', 'c', 'd', 'f', 'g']
>>> random.choice(list)
'b'
>>> random.choice(list)
'f'
>>> random.choice(list)
'g'

random.shuffle(seq)

シーケンスタイプの要素をランダムに並べ替え、スクランブルされたシーケンスを返し、seqが変更され(改变原列表)、shuffleはシャッフルを意味します。seqはシーケンスタイプ(文字列、リスト、タプルなど)を取ります。

>>> import random
>>> list = ['a', 'b', 'c', 'd', 'f', 'g']
>>> random.shuffle(list)
>>> list
['c', 'a', 'f', 'd', 'g', 'b']
>>> random.shuffle(list)
>>> list
['f', 'a', 'b', 'c', 'g', 'd']
>>> random.shuffle(list)
>>> list
['a', 'd', 'g', 'c', 'b', 'f']

random.sample(pop、k)

popからk個の要素を選択し、リスト型として返します(不改变原列表); popはシーケンス型、kは整数です。選択した項目の数を表します。

>>> import random
>>> list = ['a', 'b', 'c', 'd', 'f', 'g']
>>> random.sample(list, 4)
['b', 'f', 'c', 'a']
>>> random.sample(list, 4)
['g', 'f', 'b', 'd']
>>> random.sample(list, 4)
['g', 'f', 'c', 'b']

3.珍しい機能

random.getstate()

ジェネレーターの現在の内部状態をキャプチャして返すオブジェクト。これをsetstate()関数に渡して、ジェネレーターの内部状態をgetstate()関数が呼び出される前の状態に復元できます。バックアップに相当します。

random.setstate(state)

状態は、ジェネレータの現在の内部状態を状態に復元するために使用されるgetstate()関数の結果である必要があります。

random.betavariate(alpha、beta)

ベータ分布:パラメーターはアルファ>0およびベータ>0を条件とし、戻り値の範囲は0から1です。

random.expovariate(lambd)

インデックス分布

random.gammavariate(alpha、beta)

ガンマ分布:パラメータはアルファ>0およびベータ>0を条件とします

random.gauss(mu、sigma)

ガウス分布:muは平均で、sigmaは標準偏差です。

random.normalvariate(mu、sigma)

正規分布:muは平均で、sigmaは標準偏差です。

random.paretovariate(alpha)

パレート分布:アルファは形状パラメーターです。

random.weibullvariate(alpha、beta)

ワイブル分布:アルファはスケールパラメーターであり、ベータは形状パラメーターです。

4.実際のケース

ランダムパスワード文字列

文字列には数字と文字が含まれ、パスワードの桁数を指定できます

import random
import string


def get_random_string(length):
    # 随机生成字母和数字的位数
    num_count = random.randint(1, length - 1)
    letter_count = length - num_count

    # 随机抽样生成数字序列
    num_list = [random.choice(string.digits) for _ in range(num_count)]

    # 随机抽样生成字母序列
    letter_list = [random.choice(string.ascii_letters) for _ in range(letter_count)]

    # 合并字母和数字
    all_list = num_list + letter_list

    # 乱序
    random.shuffle(all_list)

    result = "".join([i for i in all_list])
    return result


# 生成10位的密码
password1 = get_random_string(10)
print(password1)
# 生成15位的密码
password2 = get_random_string(15)
print(password2)
# 生成20位的密码
password3 = get_random_string(20)
print(password3)

出力結果:

41eD76F3e1
915087432k8443z
002L5292840A07284755

円周率を計算する

1)円周率を計算するための近似式:
ここに画像の説明を挿入

pi = 0
N = 100
for k in range(N):
    pi += 1 / pow(16, k) * (4 / (8 * k + 1) - 2 / (8 * k + 4) - 1 / (8 * k + 5) - 1 / (8 * k + 6))
print("圆周率值是:%s" % pi)

出力結果:

圆周率值是: 3.141592653589793

2)モンテカルロアルゴリズム:
ここに画像の説明を挿入

import random

DARTS = 1000 * 1000 * 10
hits = 0.0

for i in range(1, DARTS + 1):
    x, y = random.random(), random.random()
    dist = pow(x ** 2 + y ** 2, 0.5)
    if dist <= 1.0:
        hits = hits + 1
pi = 4 * (hits / DARTS)
print("圆周率值是:%s" % pi)

出力結果:

圆周率值是:3.14205

おすすめ

転載: blog.csdn.net/yuan2019035055/article/details/123497160