ホームページ バックエンド開発 PHPチュートリアル Pythonのrandomモジュールを詳しく解説

Pythonのrandomモジュールを詳しく解説

Dec 13, 2017 am 09:04 AM
python random 詳しい説明

この記事は主にPythonのrandomモジュールの関連内容を紹介していますので、困っている方は参考にしていただければ幸いです。

randomモジュール

は、疑似乱数を生成するために使用されます

実際の乱数(またはランダムイベント)は、実験プロセスで示された分布確率に従って、特定の生成プロセスでランダムに生成されます。結果は予測不可能で目に見えません。コンピュータ内のランダム関数は特定のアルゴリズムに従ってシミュレートされ、結果は確実で目に見えます。この予見可能な結果の確率は 100% であると仮定できます。したがって、コンピュータのランダム関数によって生成される「乱数」はランダムではなく、疑似乱数です。

コンピュータの擬似乱数とは、一定の計算方法に従ってランダムシードによって計算された値です。したがって、計算方法と乱数の種が確かであれば、生成される乱数は固定されます。

ユーザーまたはサードパーティがランダム シードを設定しない限り、デフォルトでは、ランダム シードはシステム クロックから取得されます。

この Python ライブラリは、長期にわたるテストの結果、下部に共通のアルゴリズムを使用していますが、その信頼性は言えませんが、パスワード関連の機能には使用しないでください。

1. 基本的なメソッド

random.seed(a=None, version=2)<code>random.seed(a=None, version=2)<br>初始化伪随机数生成器。如果未提供a或者a=None,则使用系统时间为种子。如果a是一个整数,则作为种子。

random.getstate()
返回一个当前生成器的内部状态的对象

random.setstate(state)<br>传入一个先前利用getstate方法获得的状态对象,使得生成器恢复到这个状态。

random.getrandbits(k)
返回一个不大于K位的Python整数(十进制),比如k=10,则结果在0~2^10之间的整数。

二、针对整数的方法

random.randrange(stop)<br>

random.randrange(start, stop[, step])
等同于choice(range(start, stop, step)),但并不实际创建range对象。

random.randint(a, b)
返回一个a <= N <= b的随机整数N。等同于 randrange(a, b+1)

三、针对序列类结构的方法

random.choice(seq)
从非空序列seq中随机选取一个元素。如果seq为空则弹出 IndexError异常。

random.choices(population, weights=None, *, cum_weights=None, k=1)
3.6版本新增。从population集群中随机抽取K个元素。weights是相对权重列表,cum_weights是累计权重,两个参数不能同时存在。

random.shuffle(x[, random])
随机打乱序列x内元素的排列顺序。只能针对可变的序列,对于不可变序列,请使用下面的sample()方法。

random.sample(population, k)
从population样本或集合中随机抽取K个不重复的元素形成新的序列。常用于不重复的随机抽样。返回的是一个新的序列,不会破坏原有序列。要从一个整数区间随机抽取一定数量的整数,请使用sample(range(10000000), k=60)类似的方法,这非常有效和节省空间。如果k大于population的长度,则弹出ValueError异常。

四、真值分布

random模块最高端的功能其实在这里。

random.random()
返回一个介于左闭右开[0.0, 1.0)区间的浮点数

random.uniform(a, b)
返回一个介于a和b之间的浮点数。如果a>b,则是b到a之间的浮点数。这里的a和b都有可能出现在结果中。

random.triangular(low, high, mode)
返回一个low <= N <=high的三角形分布的随机数。参数mode指明众数出现位置。

random.betavariate(alpha, beta)
β分布。返回的结果在0~1之间

random.expovariate(lambd)
指数分布

random.gammavariate(alpha, beta)
伽马分布

random.gauss(mu, sigma)<br>高斯分布

random.lognormvariate(mu, sigma)
对数正态分布

random.normalvariate(mu, sigma)
正态分布

random.vonmisesvariate(mu, kappa)
卡帕分布

random.paretovariate(alpha)<br>帕累托分布

random.weibullvariate(alpha, beta)

五、可选择的生成器

class random.SystemRandom([seed])擬似乱数生成器を初期化します。 a が指定されていないか、a=None の場合、システム時刻がシードとして使用されます。 a が整数の場合、それがシードとして使用されます。

random.getstate()

現在のジェネレーターの内部状態のオブジェクトを返しますrandom.setstate(state)を使用して以前に取得したオブジェクトを渡します。 getstate メソッド ジェネレーターをこの状態に復元する状態オブジェクト。

random.getrandbits(k)

K ビット以下の Python 整数 (10 進数) を返します。たとえば、k=10 の場合、結果は 0~2^10 の整数になります。

🎜🎜🎜2. 整数のメソッド🎜🎜🎜🎜🎜random.randrange(stop)🎜🎜🎜random.randrange(start, stop[, step]) 🎜 Choice(range(start, stop, step)) と同等ですが、実際には range オブジェクトを作成しません。 🎜🎜random.randint(a, b)🎜 a random.choice(seq)🎜 空でないシーケンス seq からランダムに 1 つを選択します要素。 seq が空の場合、IndexError 例外がポップアップします。 🎜🎜random.choices(population,weights=None, *,cum_weights=None, k=1)🎜バージョン 3.6 の新機能。 K 個の要素が母集団クラスターからランダムに選択されます。 Weights は相対的な重みリスト、cum_weights は累積的な重みであり、2 つのパラメータは同時に存在することはできません。 🎜🎜random.shuffle(x[, random])🎜シーケンス x 内の要素の順序をランダムにシャッフルします。可変シーケンスにのみ使用できます。不変シーケンスの場合は、以下のsample()メソッドを使用してください。 🎜🎜random.sample(population, k)🎜 母集団サンプルから K 個の一意の要素をランダムに抽出するか、新しいシーケンスを形成するように設定します。繰り返しのないランダムなサンプリングによく使用されます。返されるのは、元のシーケンスを破壊しない新しいシーケンスです。整数範囲から特定の数の整数をランダムに抽出するには、sample(range(10000000), k=60) のようなメソッドを使用します。これは非常に効率的でスペースを節約できます。 k が母集団の長さより大きい場合、ValueError 例外がポップアップします。 🎜🎜🎜🎜4. True Value Distribution🎜🎜🎜🎜🎜 ランダムモジュールの最もハイエンドな関数は実際にはここにあります。 🎜🎜random.random()🎜左閉じと右開きの間の浮動小数点数を返します [0.0, 1.0) 🎜🎜random.uniform(a, b)🎜 戻り値a と b の間の浮動小数点数。 a>b の場合、b と a の間の浮動小数点数になります。ここでの a と b の両方が結果に表示される場合があります。 🎜🎜random.triangular(low, high, mode)🎜 low random.betavariate(alpha, beta)🎜β ディストリビューション。返される結果は 0 ~ 1 です🎜🎜random.expovariate(lambd)🎜指数分布🎜🎜random.gammavariate(alpha, beta)🎜ガンマ分布🎜🎜 random.gauss(mu, sigma)🎜ガウス分布🎜🎜random.lognormvariate(mu, sigma)🎜対数正規分布🎜🎜random.normalvariate(mu, sigma)🎜正規分布🎜🎜<code>random.vonmisesvariate(mu, kappa)🎜Kappa分布🎜🎜random.paretovariate(alpha)🎜パレト分布🎜🎜 random.weibullvariate(alpha, beta)🎜🎜🎜🎜5. オプションのジェネレーター🎜🎜🎜🎜🎜class random.SystemRandom([seed]) code>🎜 os.urandom を使用するクラス() 乱数を生成するメソッド。ソース コードは、すべてのシステムでサポートされているわけではありません🎜🎜🎜🎜6。<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>&gt;&gt;&gt; random() # 随机浮点数: 0.0 &lt;= x &lt; 1.0 0.37444887175646646 &gt;&gt;&gt; uniform(2.5, 10.0) # 随机浮点数: 2.5 &lt;= x &lt; 10.0 3.1800146073117523 &gt;&gt;&gt; randrange(10) # 0-9的整数: 7 &gt;&gt;&gt; randrange(0, 101, 2) # 0-100的偶数 26 &gt;&gt;&gt; choice([&amp;#39;win&amp;#39;, &amp;#39;lose&amp;#39;, &amp;#39;draw&amp;#39;]) # 从序列随机选择一个元素 &amp;#39;draw&amp;#39; &gt;&gt;&gt; deck = &amp;#39;ace two three four&amp;#39;.split() &gt;&gt;&gt; shuffle(deck) # 对序列进行洗牌,改变原序列 &gt;&gt;&gt; deck [&amp;#39;four&amp;#39;, &amp;#39;two&amp;#39;, &amp;#39;ace&amp;#39;, &amp;#39;three&amp;#39;] &gt;&gt;&gt; sample([10, 20, 30, 40, 50], k=4) # 不改变原序列的抽取指定数目样本,并生成新序列 [40, 10, 50, 30] &gt;&gt;&gt; # 6次旋转红黑绿*(带权重可重复的取样),不破坏原序列 &gt;&gt;&gt; choices([&amp;#39;red&amp;#39;, &amp;#39;black&amp;#39;, &amp;#39;green&amp;#39;], [18, 18, 2], k=6) [&amp;#39;red&amp;#39;, &amp;#39;green&amp;#39;, &amp;#39;black&amp;#39;, &amp;#39;black&amp;#39;, &amp;#39;red&amp;#39;, &amp;#39;black&amp;#39;] &gt;&gt;&gt; # 德州扑克计算概率Deal 20 cards without replacement from a deck of 52 playing cards &gt;&gt;&gt; # and determine the proportion of cards with a ten-value &gt;&gt;&gt; # (a ten, jack, queen, or king). &gt;&gt;&gt; deck = collections.Counter(tens=16, low_cards=36) &gt;&gt;&gt; seen = sample(list(deck.elements()), k=20) &gt;&gt;&gt; seen.count(&amp;#39;tens&amp;#39;) / 20 0.15 &gt;&gt;&gt; # 模拟概率Estimate the probability of getting 5 or more heads from 7 spins &gt;&gt;&gt; # of a biased coin that settles on heads 60% of the time. &gt;&gt;&gt; trial = lambda: choices(&amp;#39;HT&amp;#39;, cum_weights=(0.60, 1.00), k=7).count(&amp;#39;H&amp;#39;) &gt;= 5 &gt;&gt;&gt; sum(trial() for i in range(10000)) / 10000 0.4169 &gt;&gt;&gt; # Probability of the median of 5 samples being in middle two quartiles &gt;&gt;&gt; trial = lambda : 2500 &lt;= sorted(choices(range(10000), k=5))[2] &lt; 7500 &gt;&gt;&gt; sum(trial() for i in range(10000)) / 10000 0.7958</pre><div class="contentsignin">ログイン後にコピー</div></div><p></p><p>これは、大文字の A ~ Z と 0 ~ 9 の数字を含むランダムな 4 桁の確認コードを生成するプログラムです</p><p class="jb51code"></p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>import random checkcode = &amp;#39;&amp;#39; for i in range(4): current = random.randrange(0,4) if current != i: temp = chr(random.randint(65,90)) else: temp = random.randint(0,9) checkcode += str(temp) print(checkcode)</pre><div class="contentsignin">ログイン後にコピー</div></div><p></p><p>これは、指定された英数字のランダムなシーケンスを生成するコードです長さ: </p><p class="jb51code"></p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>#!/usr/bin/env python # -*- coding:utf-8 -*- import random, string def gen_random_string(length): # 数字的个数随机产生 num_of_numeric = random.randint(1,length-1) # 剩下的都是字母 num_of_letter = length - num_of_numeric # 随机生成数字 numerics = [random.choice(string.digits) for i in range(num_of_numeric)] # 随机生成字母 letters = [random.choice(string.ascii_letters) for i in range(num_of_letter)] # 结合两者 all_chars = numerics + letters # 洗牌 random.shuffle(all_chars) # 生成最终字符串 result = &amp;#39;&amp;#39;.join([i for i in all_chars]) return result if __name__ == &amp;#39;__main__&amp;#39;: print(gen_random_string(64))</pre><div class="contentsignin">ログイン後にコピー</div></div><p></p> <p>関連する推奨事項: <br></p> <p><a href="http://www.php.cn/php-weizijiaocheng-382149.html" target="_self">文字列マッチングアルゴリズムのサンプルコードのPython実装</a></p> <p><a href="http://www.php.cn/php-weizijiaocheng-381987.html" target="_self"> PythonとRubyの類似点と相違点の比較</a></p> <p><a href="http://www.php.cn/python-tutorials-380401.html" target="_self"> ロギングライブラリの使用の概要Pythonで</a></p>

以上がPythonのrandomモジュールを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

mysqlは支払う必要がありますか mysqlは支払う必要がありますか Apr 08, 2025 pm 05:36 PM

MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

インストール後にMySQLの使用方法 インストール後にMySQLの使用方法 Apr 08, 2025 am 11:48 AM

この記事では、MySQLデータベースの操作を紹介します。まず、MySQLWorkBenchやコマンドラインクライアントなど、MySQLクライアントをインストールする必要があります。 1. mysql-uroot-pコマンドを使用してサーバーに接続し、ルートアカウントパスワードでログインします。 2。CreatedAtaBaseを使用してデータベースを作成し、データベースを選択します。 3. createTableを使用してテーブルを作成し、フィールドとデータ型を定義します。 4. INSERTINTOを使用してデータを挿入し、データをクエリし、更新することでデータを更新し、削除してデータを削除します。これらの手順を習得することによってのみ、一般的な問題に対処することを学び、データベースのパフォーマンスを最適化することでMySQLを効率的に使用できます。

MySQLダウンロードファイルが破損しており、インストールできません。修復ソリューション MySQLダウンロードファイルが破損しており、インストールできません。修復ソリューション Apr 08, 2025 am 11:21 AM

mysqlダウンロードファイルは破損していますが、どうすればよいですか?残念ながら、MySQLをダウンロードすると、ファイルの破損に遭遇できます。最近は本当に簡単ではありません!この記事では、誰もが迂回を避けることができるように、この問題を解決する方法について説明します。それを読んだ後、損傷したMySQLインストールパッケージを修復するだけでなく、将来の行き詰まりを避けるために、ダウンロードとインストールプロセスをより深く理解することもできます。最初に、ファイルのダウンロードが破損した理由について話しましょう。これには多くの理由があります。ネットワークの問題は犯人です。ダウンロードプロセスの中断とネットワーク内の不安定性は、ファイル腐敗につながる可能性があります。ダウンロードソース自体にも問題があります。サーバーファイル自体が壊れており、もちろんダウンロードすると壊れています。さらに、いくつかのウイルス対策ソフトウェアの過度の「情熱的な」スキャンもファイルの破損を引き起こす可能性があります。診断問題:ファイルが本当に破損しているかどうかを判断します

MySQLはダウンロード後にインストールできません MySQLはダウンロード後にインストールできません Apr 08, 2025 am 11:24 AM

MySQLのインストール障害の主な理由は次のとおりです。1。許可の問題、管理者として実行するか、SUDOコマンドを使用する必要があります。 2。依存関係が欠落しており、関連する開発パッケージをインストールする必要があります。 3.ポート競合では、ポート3306を占めるプログラムを閉じるか、構成ファイルを変更する必要があります。 4.インストールパッケージが破損しているため、整合性をダウンロードして検証する必要があります。 5.環境変数は誤って構成されており、環境変数はオペレーティングシステムに従って正しく構成する必要があります。これらの問題を解決し、各ステップを慎重に確認して、MySQLを正常にインストールします。

MySQLインストール後に開始できないサービスのソリューション MySQLインストール後に開始できないサービスのソリューション Apr 08, 2025 am 11:18 AM

MySQLは開始を拒否しましたか?パニックにならないでください、チェックしてみましょう!多くの友人は、MySQLのインストール後にサービスを開始できないことを発見し、彼らはとても不安でした!心配しないでください、この記事はあなたがそれを落ち着いて対処し、その背後にある首謀者を見つけるためにあなたを連れて行きます!それを読んだ後、あなたはこの問題を解決するだけでなく、MySQLサービスの理解と問題のトラブルシューティングのためのあなたのアイデアを改善し、より強力なデータベース管理者になることができます! MySQLサービスは開始に失敗し、単純な構成エラーから複雑なシステムの問題に至るまで、多くの理由があります。最も一般的な側面から始めましょう。基本知識:サービススタートアッププロセスMYSQLサービススタートアップの簡単な説明。簡単に言えば、オペレーティングシステムはMySQL関連のファイルをロードし、MySQLデーモンを起動します。これには構成が含まれます

高負荷アプリケーションのMySQLパフォーマンスを最適化する方法は? 高負荷アプリケーションのMySQLパフォーマンスを最適化する方法は? Apr 08, 2025 pm 06:03 PM

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。

MySQLインストール後にデータベースのパフォーマンスを最適化する方法 MySQLインストール後にデータベースのパフォーマンスを最適化する方法 Apr 08, 2025 am 11:36 AM

MySQLパフォーマンスの最適化は、インストール構成、インデックス作成、クエリの最適化、監視、チューニングの3つの側面から開始する必要があります。 1。インストール後、INNODB_BUFFER_POOL_SIZEパラメーターやclose query_cache_sizeなど、サーバーの構成に従ってmy.cnfファイルを調整する必要があります。 2。過度のインデックスを回避するための適切なインデックスを作成し、説明コマンドを使用して実行計画を分析するなど、クエリステートメントを最適化します。 3. MySQL独自の監視ツール(ShowProcessList、ShowStatus)を使用して、データベースの健康を監視し、定期的にデータベースをバックアップして整理します。これらの手順を継続的に最適化することによってのみ、MySQLデータベースのパフォーマンスを改善できます。

mysqlはインターネットが必要ですか? mysqlはインターネットが必要ですか? Apr 08, 2025 pm 02:18 PM

MySQLは、基本的なデータストレージと管理のためにネットワーク接続なしで実行できます。ただし、他のシステムとのやり取り、リモートアクセス、または複製やクラスタリングなどの高度な機能を使用するには、ネットワーク接続が必要です。さらに、セキュリティ対策(ファイアウォールなど)、パフォーマンスの最適化(適切なネットワーク接続を選択)、およびデータバックアップは、インターネットに接続するために重要です。

See all articles