【Python】導入方法から基本操作について

プログラム
スポンサーリンク

はじめに

今回は、Pythonの導入方法~基本操作について解説します。

Pythonという名前の由来について

Pythonという名前は「ニシキヘビ」の英名表記では無いです。
開発者がコメディ好きだったようで…
イギリスのコメディーグループ「モンティ・パイソン」から取ったようです。

どうでもいい事ですが…
Pythonの用語には、ちょくちょくコメディ関係の要素が出ます。
なので「はじめに」の段階で軽く紹介。

なぜ、このグループ名から取ったのかは不明。(たぶんその場のノリ)

ただ、この元ネタはあまり理解されてないです。
なので、多くの場所では Python = 「ニシキヘビ」と勘違いされてます。
↓そして、本の表紙や挿絵などに “ヘビ” が出てきます。

蛇嫌いの人涙目。

Pythonの導入

パソコンを使って、こちらのページにアクセス。
(スマホはNG)

Download Python
The official home of the Python Programming Language

最新版のダウンロードを選択。

.zipを展開。
中にある.exeを実行。

画面下部のAdd Python.exe to PAHTを有効化。
その後、Install Nowを選択。

しばらく待つと、successfulと表示されます。
これでインストールが成功したことが分かります。
「Close」を押して閉じます。

以上で、Pythonの導入が完了です。

Pythonを動かす + 基本操作(1)

Pythonは「IDLE」という画面で動かせます。

ちなみに、このIDLE(アイドル)の名前もコメディ由来のようです。
モンティ・パイソンのメンバー「エリック・アイドル」から取ったようです。
なぜ、この人から取ったまでは不明。(たぶん適当)

あと、稼働していないという意味でも「IDLE」という英単語があります。
何かの入力があるまで稼働しない画面という意味も入ってると思います。

…開発者氏、どんなけコメディ好きやねん( ˘ω˘ )

Pythonの “IDLE” を起動。

すると、初期状態ではPythonやパソコンの状態が表示されます。
右下の「Ln:」で現在表示されてる行数が分かります。

画面を縮小すると、表示枠が足りないので行数が増えます。
これは “改行処理” によって行数が増えた分けではないです。
なので「Ln:」の数は増えません。

そしたら、このIDLE画面でできる基本操作(1)を見ていきます。

文字を表示する(print() / 文字演算子)

print()の文章を使うと、任意のテキストを表示できます。

print("任意のテキスト")
print('任意のテキスト')

文字は「” “」と「’ ‘」の2つで囲う事で表示できます。
どちらでも大丈夫です。

Print()ではなく、「print()」と入力することが重要です。

→ 最初の一文字は大文字にしない
→ かっこは全角ではなく、半角を使う


このような表記のちょっとした違いで、エラーを出します。

【「"」や「'」を文字として表示する方法】

print("任意'の'テキスト")
print('任意"の"テキスト')

このように「”」と「’」を表示する場合は、
種類が違う2つの記号を使う必要がある
ので…
「” “」と「’ ‘」を使った2通りの囲み方が用意されてます。

print処理を入れたらEnterキー。
すると、テキストが表示される処理が動きます。

注意点はprintを2回続けて書く事ができない事です。
複数の文章を書く場合は(”~~” “~~”)のように並べて書く。
もしくは(”~~” + “~~”)のように「+」で繋ぐ形になります。

あと、同じ文字は「文字」*右側に繰り返したい数で表示できます。

「+」や「*」ような操作を行う記号を「演算子」と呼びます。

そして、文字に対して操作を行う記号は「文字演算子」と呼ばれます。
↓文字演算子は主に下記の2つ。

【文字演算子】

+ → 文字を合成する(正直、無くても良い)
* → 右側に入力した数だけ文字を繰り返す

以上が、文字を表示する方法です。

計算をする(四則演算 / 算術演算子)

Pythonは計算もできます。
計算方法は下記。

print(1+1)

「たし算、ひき算、かけ算、わり算」の4つを四則演算と呼びます。
これを応用した “乗数” や “あまり” の計算もできます。

算術演算子を使えば、足し算以外の処理もできます。

算術演算子】

+ → たし算
- → ひき算
* → かけ算
** → 乗数計算(x**n → xのn乗)
/ → わり算(小数点以下も計算)
// → わり算(小数点以下切り捨て)
% → わり算した結果の"あまり"
() → 囲われた計算を優先(無い場合は左から順にかけ算、割り算を優先)

下図のように、様々な計算ができます。

以上が、計算をする方法の解説です。

IDLEで1つ前の処理を再度実行する

“IDLE画面”で同じ処理を再度実行したい場合は「Alt+N」や「Alt+P」キーを押します。

・Alt+N → 上から下に進む(古い順)
・Alt+P → 下から上に進む(新しい順)

以上が、IDLEで1つ前の処理を再度実行する方法です。

2行以上のプログラムを書く方法

IDLE画面はCtrl+Jキーで改行できます。

改行はできますが…
この方法で2行以上のプログラムを書くとエラーが出ます。

なので、2行以上のプログラムを書く場合は…
「.py」というpython専用のデータを作って動かす
必用が出てきます。

.pyデータの作成と実行

IDLE画面でCtrl+Nキー。

そして、表示された画面に2行以上のプログラムを入れます。

**は乗数計算です。
つまり10の10乗-1の処理をしてます。

プログラムを書いたらCtrl+Sキーで保存。

適用な名前を付けてPythonファイル(.py)を保存。

左上の所を見ると.pyファイルで保存されたことが分かります。

そして、保存先にはこのような「.py」ファイルが生成されます。

そして、この“.py”ファイルの画面をクリックで選択
.pyの画面を選択した状態で「F5」キーで実行。

すると、2行以上のプログラムを実行できます。
画面上部には実行した.pyファイルが表示されます。

Pythonを閉じた場合…
IDLEを起動 → Ctrl+Oキーで「開く」を実行。
ここで「.py」ファイルを選択。

そして、F5キーで実行する形になります。

以上が、.pyデータの作成と実行方法です。

これで、2行以上のプログラムを書けるようになりました。
次はこの2行以上のテキストを使って動かす処理を解説していきます。
(基本操作2)

Pythonの基本操作(2)

基本操作2として、下記の事を解説していきます。

・変数を入力する
・データ型についてと調べ方(type)
・複数データを管理する(リスト)
・データ型を変換する
・コメントを残す(#)

・ifとif not文(条件分岐)
 → if / elif / elseの使い分け
 → 論理演算子(対象が2つある場合の処理)
 → 論理回路を再現する(対象が2つある場合の処理2)
 → 比較演算子(数字で条件分岐)

・代入演算子(変数を途中で操作)
・for文(ループ処理)
・def(関数で処理をまとめる)
・モジュール(外部プログラムを使う)
・モジュールを自作する

こちらを解説していきます。

ここからは2行以上のプログラムが必要になります。
なので「.py」ファイルに書き「F5」キーで動かすことを前提に進めてます。

変数を入力する

変数とは「特定の文字」に「何かしらの情報」を入れる処理です。

【変数の設定例】

・a = 3
・b = "任意のテキスト"

変数の名前は下記のような名前では設定できません。
・「-」を入れる
・「 (スペース)」
・「1」のような数字からスタートする
・「’」や「$」のような特殊文字を使う

下図のようなプログラムを設定。

a = 3を入力したので…
下図の処理は「10**3-1」になりました。(10の3乗 – 1)

結果、下図の出力になります。

あと、変数は文字を入れる事もできます。

print()で文字と数字を同時に出力する場合は「,」で区切ると表示できます。
ただし、間に空白ができるので注意。

以上が、変数を入力する方法の解説です。

ちなみに、変数に計算を入れて再入力する場合は…

a = 0
a = a+1

みたいな形で書く事になります。
()

データ型についてと調べ方(type)

変数は「数字や文字」を入れれると紹介しました。
このような「数字や文字」といった情報の種類を「データ型」と言います。

主なデータ型は下記の4つ。

・int = 整数(小数点なし)
・float = 小数点ありの数字
・str = 文字情報
・bool = 0/1の処理( 0 = False / 1 = Ture)

Boolは書き方は違いますが…
内部処理で使われてる数字はintの「0」と「1」で同じです。

(なのでboolはあまり使われず、intの0と1で計算することが多い)

下図のように、a~dの枠に入力して見ました。

この4つはすべてデータ型が違います。

そして「int」型の情報に、全てのデータ型で引き算を行うと…
「int(数字)」 – 「str(文字)」の時だけエラーが出ます。

文字 – 数字(int / float / bool)の場合…
「適当な文字 – 1 =」ができないのでエラーが出ます。

int – floatは両方同じ数字なので計算ができます。
(データ型は小数点以下の数字が入るようにFloat型に自動変換されます)

int – boolの場合、boolの中身は数字の「0と1」なので…
boolの中身が数字に変換されて計算されます。( 0 = False / 1 = Ture)
なので「3 – True」は「3 – 1」になるので「2」が出力されます。
(あと、bool型はint型に自動変換されます。)

そして、データ型は下記の処理で表示できます。

a = "任意のデータを入力"

print(type(a))

複数のデータ型を調べる場合、type()を「,」で区切って表示する形になります。
これをF5キーで実行すると、IDLEにデータ型が表示されます。

残念ながら、class表示は消せません。

あと、こちらも残念ながら…
print(type(a,b,c,d))みたいな書き方をするとエラーが出ます。

type()が使えるのは1枠1つまで…( ˘ω˘ )

以上が、データ型についてと調べ方(type)の解説です。

複数データを管理する(リスト / 辞書)

「リスト」と「辞書」の機能を使うと、複数の情報を1つの変数にまとめれます。
まず、リストから解説していきます。

【リストの書き方】

a = [1, 2, 3]
b = (1, 2, 3)

細かい違いはありますが… []か()のどちらかで囲む。
そして間を「,」で区切る形になります。

[]で区切ると「list」型の情報になります。
()で区切ると「tuple」型の情報になります。

呼び名が違うだけで、やってる事はほぼ同じです。
なので、この記事ではこの2つをまとめて「リスト」と呼びます。

下図の様な処理を作成。

すると… 変数に複数の情報を入力できます。

ただ、この変数を使って中身のデータ型を表示する事はできません。
[]や()で囲った情報その物の型が表示されます。

説明用に下図の様な処理を作成。

すると、変数の中には複数の情報が入ってる事が分かると思います。
が、type()に入れるとその中身ではなくデータをまとめた箱その物の情報が表示されます。

ここでも、type()が使えるのは1枠1つまでの法則が出てきます( ˘ω˘ )

そして、リストでまとめた情報は特定の処理で1つだけ取り出せます。

【リストから1つだけ情報を取り出す処理】

a = [1, 2, 3]

a[0]
a[1]
a[2]

リストで入力した内容は、0スタートで順番が割り当てられます。
なので変数の横に[]を付け、数字を指定して取り出します。

0スタートなので、一番最初のモノを取り出す場合は[0]
二番目のモノを取り出す場合は[1]のように+1した状態で書きます。

数値は「-」を使って指定することもできます。
マイナスの場合、取り出される順番が逆方向で動きます。

0スタートの状態で、逆方向に動くので…
一番最後のモノを取り出す場合は[-1]
最後から二番目のモノを取り出す場合は[-2]のように書きます。

そして、枠外の情報を取り出そうとすると…
情報が存在しないので、エラーが出ます。

そして、リストでまとめた情報は範囲指定して取り出すこともできます。

【リストから指定した範囲のを取り出す処理】

a = [1, 2, 3, 4, 5]

a[0:5]
a[2:4]

指定した範囲の情報を取り出す場合は [:] を使います。
そして範囲指定を使い場合は…
番号に+1した数字を入れる必要があります。

そして「:」で範囲指定する場合はリストの枠外にある数字を入力する事ができます。
あと、なぜか[]と()の違いで現れる文字が少し変わります。

[] → 情報
() → 情報 + ,

()の場合は「,」が表示される
なので基本は[]を使うのが良いとおもいます。

そして、リストに入れた情報のデータ型を調べるには…
a[0]みたいな形を使うことになります。

以上が、リスト型についての解説です。

結局、type()連打で調べるので…
二度手間といえば二度手間。

次は、辞書型の解説です。
これはリストに近い存在です。
違いは、情報を数字の番号と指定した文字列の2通りの方法で引き出せる事
です。

【辞書型の書き方】

a = ["文字1":1 , "文字2":2, "文字3":3]

辞書型は下記のように書きます。

・左側に紐づける文字を指定
・右側に情報を指定
・間に「,」つけて区切る

情報はリスト型と同様に a[0] のような数字で引き出せます。

そして、辞書型は左側に書いた紐づけようの文字でも情報を引き出せます。

【辞書型から文字を引き出す方法】

a = ["文字1":1 , "文字2":2, "文字3":3]

a[0]
a["文字1"]

この2通りに方法で文字を引き出せるのが特徴です。
また、辞書型とリスト型を組み合わせて使うこともできます。

そして、リスト型の情報を辞書型の中に入れる事もできます。
(なぜか、辞書型にリストを入れると順番が変わるので注意)

あと、実はこれまで紹介していた普通の文字(str)もリスト型の1つです。
なので、普通の文字から1つの文章の要素だけ取り出す事もできます。

str型に “テンジクネズミ” を入力した場合…

str型は「テ」「ン」「ジ」「ク」「ネ」「ズ」「ミ」の7文字をリスト化して管理してます。
なので[:]を使った範囲指定で、文字の一部分だけを呼び出すことが可能です。

以上が、複数データを管理する方法(リストと辞書)の解説です。

データ型を変換する

特定の条件を満たした場合、データ型を変換することができます。
例として下図のようなデータを用意。

a = “114.514” の部分に注目。
これは、数字の情報ですが… “” を使って文字型(str)として入力してます。

例えば、文字型として入力した数字の場合
下記のように、変換したいデータ型()で囲めば、データ型を「数字」に変換できます。

小数点ありの数字で構成されたfloatに変換する】

a = "114.514"

float(a)

内容と型を表示するプログラムを作成。
↓すると、下図のようにデータ型がfloatに変わります。

そして、小数 → 小数無しの整数も同じ方法で変換できます。(int → float)
この場合、小数点以下の数字が切り捨てられます。

注意が必要なのは、 文字型で入力した小数は、1発ではint型に変換できない事です。
下図のようなエラーが出ます。

こちらは… 一度小数点の型(float)に変換してから、int型に変換する形になります。

【小数点ありの数字で構成された文字型をintに変換する】

a = "114.514"

int(float(a))

これで、データ型を変換できます。

ちなみに小数点無しの文字型の場合は、1発でint型に変換できます。

a = “114” 
int(a)

こちらだと、正しく動きます。

あと、int型をfloat型に変換もできます。
この場合、勝手に小数点以下の数字(.0)が発生します。

注意が必要なのは “数字以外の文字” です。
数字以外の文字はintもfloatにも変換できません。

以上が、データ型の変換方法です。

コメントを残す(# / “”” / ”’)

プログラムは書いていくと長くなります。
そんな時、処理されない文字を残す機能のコメントが役立ちます。

「#」を使うと、その行の#以降にある文字がコメントという扱いになります。
「#」を使ったコメントは赤色で表示されます。

複数の行にまたがったコメントを残したい場合は「”””」と「”’」で囲む形になります。
こちらのコメントは緑色になります。

「”」と「’」を3回入力して囲む形になります。

これで、プログラム中に思いついた買い物リストなどを記録できます。

以上が、コメントを残す方法の解説です。

条件分岐(if / if not)

プログラムは特定の条件でしか動かないようにする “分岐” を作れます。

この「条件分岐」と後で紹介する「繰り返し」がプログラムの最重要部分になります。

分岐は「if」を使う事で作れます。(通称 if文)
まずは文字型から見ていきます。

【if文の書き方】

◆文字型の場合、条件が一致してる場合

if ○○ is ◇◇:
     処理したい内容

#ーーーー

◆条件が一致してない場合

if not ○○ is ◇◇:
     処理したい内容

#ーーーー

※1
if文に入れたい内容は「Tabキーのスペース」の後に書いてください。
(スペースを作ってズラすことが、Python的に超重要になります。

※2
if文の最後に「:」を必ず入れてください。
これが無いとエラーが出ます。

↓実際のif文は下記。
 こちらはtype()を使って、入力した変数の型が文字型かそれ以外かを判定する処理になります。

Tester = "任意の情報"

if type(Tester) is str:
     print("文字型")
     
if not type(Tester) is str:
     print("文字型では無い")

重要なのは、if文後の「Tabキー」で作れる大きめのスペースです。
if文は下の行から「Tabキーのスペース」が入った部分の処理を実行します。

このような大きなスペースを使って文字をズラすことを「インデント」と呼びます。
このインデントが行われた部分が、if文で条件分岐されて動かす内容になります。

一般的なプログラム言語の場合…
if { ○○ } みたいな形で処理を指定します。

Pythonは{}を使って処理範囲を指定する事ができないので…
この「インデント(空白)」を使って処理を指定する流れになります。

if / elif / elseの使い分け

条件分岐は「if」以外にも「elif」「else」を使って作れます。
※elif = else ifの略(Pythonはelifと表記する)

・if
 → もし○○ならという条件分岐を作る

・elif
 → 2つ目以降のifに使う。内容はifと同じ

・else
 → それ以外(だいたいif notと同じ)

で、気になるのは「if」と「elif」の使い分けだと思います。
↓こちらを紹介するため、下図の様なプログラムを用意。

↓実験用のコード。

#ーーー↓変数設定↓ーーー
a = "114.5"
b = 810.910
c = 1919
d = "テンジクネズミ"
e = [45,4,5]

#ーーー↓変数を入力↓ーーー
Tester = c

#ーーー↓内容確認↓ーーー
print(Tester)
print(type(Tester))
print()

#ーーー↓ 判定(条件分岐)↓ーーー

if type(Tester) is str:
     print("変換不可")
     
elif type(Tester) is float and int:
     print("変換可能")

else:
     print("リストなどの入力を検知")

そして重要なのは、下図のように…
「if」を2回繰り返す形では正しく動かない事です。

このように「str」型を入力すると…
なぜか「else」の処理までは言ってしまします。

ifを2回続けてもいいのではと思うかもしれませんが…
これがバグの原因です。
そして、このバグを理解することで「if」と「elif」の使い分けを学べます。

ifを2回続けて書いた場合…
条件分岐の処理が1度途切れます。

なので、下図のようにif文の処理が2回分かれて実行されてしまします。

①の条件分岐が実行されたら、
②の条件分岐がまた新たに始まります。


その結果、① → 実行後、②の条件分岐が新たに始まり…
if文に一致しない = elseだったので…、elseの処理を実行するというバグが起こってました。

つまり、単体の「if」は条件分岐の始点というイメージ。
“一番最初” だけに使うモノ
になります。

連続で「if」を使うと、全く別の条件分岐が2回発動する形になります。

では、どうすれば良いかというと「elif」です。
これを使うことで、条件分岐を区切らずにelseの所まで持っていけます。

つまり、単体の「elif」は条件分岐の繋げるために使うイメージ。
中間部分” に使うモノ
になります。

そして、elseは条件分岐の一塊を終わらせるために使うイメージ。
“一番最後” に使うモノ
になります。

elifで繋いだ処理を実行。
すると… elseの処理が入らず、正しい形で実行されます。

※前回の出力結果と違う事を明確にするために足し算を追加してます。

【要点まとめ】

・if → 条件分岐の起点に使う
・elif → 条件分岐の中間に使う
・else → 条件分岐の終点に使う
・if文を続けて書く → 繋がって無い条件分岐が複数作られる

以上が、if / elif / elseの使い分けについての解説です。

情報が2つある場合の処理1(論理演算子)

2つ以上の情報を使って、if文を組みたい場合…
論理演算子を使います。

ちなみに、論理演算子の “論理” は…
電子工作の「論理回路」から取ってると考えられます。(詳細

論理回路の再現については、のちほど紹介します。


論理演算子は「and」と「or」の2つです。
これを使って、if文の条件を繋ぐと…
2つ以上の情報を使った条件分岐を作れます。

下図のように、2つの条件を「and」か「or」で区切って指定します。

例えば、設定した2つ変数が両方とも文字型かなどを判定する場合…
「and」や「or」を使って表す形になります。

#ーーー↓変数設定↓ーーー

a = "114.5"
b = 810.910
c = 1919
d = "テンジクネズミ"
e = [45,4,5]

#ーーー↓変数を入力↓ーーー

TesterA = a
TesterB = d

#ーーー↓内容確認↓ーーー

print(type(TesterA))
print(type(TesterB))
print()

#ーーー↓内容確認↓ーーー

if type(TesterA) is str and type(TesterB)is str:
     print("ダブル文字")

elif type(TesterA) is str or type(TesterB) is str:
     print("少なくとも片側は文字")
     
elif not type(TesterA) is str or type(TesterB) is str:
     print("両方文字ではない")

#ーーー

if not type(TesterA) is type(TesterB):
     print("AとBのデータ型が違う")

elif type(TesterA) is type(TesterB):
     print("AとBのデータ型が同じ")

#ーーー
     
if not TesterA is TesterB:
     print("AとBの変数は違う")

elif  TesterA is TesterB:
     print("AとBの変数も同じ")

「TesterA」と「TesterB」の変数を適当に変えて実行すると…
下図のような出力結果が出ます。

以上が、論理演算子の解説です。

対象が2つある場合の処理2(論理回路の再現)

次は、先ほど紹介した「or」と「and」を使って論理回路を作る方法を紹介します。
この論理回路は電子工作などで使われる考え方です。

論理回路の分岐パターンは
「Buffer」「AND」「OR」「NOT」
「NAND」「NOR」「XOR」「XNOR」
があります。

↓下図のような2つの要素を使った条件分岐の指定です。
 (濃い青色の部分がONになる処理です)

「Buffer」は処理無しです。 Pythonでは不要なモノになります。

この、一見不要に見えるBufferは電子回路的には、
「配線に電力を使って電圧が低下する → 処理が届かない」という問題が起こるので、
これを解決するために使います。

(同じ処理に、電気を補うような回路を入れる形です)

より細かく条件分岐を書いてまとめると下図のようになります。
注意点下記の3つ。
NANDは「if not or not」で、NORは「if not and not」で書く
・XORは「if」の中に「if not or not」を入れて書く
・XNORは2つの条件分岐を()で囲って書く(合計4つの分岐要素が入る)

NANDは「not and」の略なので体感的には「and」を使いたいと思います。
が… Pythonのnotはその後の要素にしか影響を与えれません。
なので「2つともnot」の状態を表したい場合は… notを2回続けて書く必要があります。
この仕様によって、NANDは「if not or not」の形で書きます。
NORについても同様の理由で「if not and not」の形で書く形になります。

そして、XORは「OR」の中に「NAND」を入れて範囲を削って表現します。
XNORは「NOR」と「AND」を組み合わせて作ります。
「NOR」と「AND」は論理演算子を使わないと表現できないので…
「(if not and not) or (if and)」のような形で()を使って表現します。

以上が、論理回路を再現する方法です。

数字で条件分岐(比較演算子)

比較演算子は主にif文の条件指定に使います。
何も説明せずに使ってましたが「is」と「not is」の所が比較演算子になります。

「同じ場合」と「違う場合」を表す比較演算子

・同じ場合 → 「is」「==」
・違う場合 → 「not is」「!=」

is と not isは「==」と「!=」で表せます。
下図のような処理を作成。

すると、isとnot isを書き換えても、正しく動くことが分かります。

そして、ここからが重要です。
比較演算子は数字を使うと「==」と「!=」以外の条件も設定できます。

【比較演算子】

・「==」 → 等しい場合
・「!=」 → 等しくない場合
・「>」 → より小さい場合(同じ数字を含めない)
・「<」 → より大きい場合(同じ数字を含めない)
・「>=」 → 以下の場合(同じ数字を含める)
・「<=」 → 以上の場合(同じ数字を含める)
・「in」 → リストの中に設定した情報がある場合

「==」と「!=」は解説したので、他の演算子を紹介します。
まずは大きさを比較する「>」「<」「>=」「<=」から見ていきます。
下図のようなプログラムを組み、同じ数字を入力すると…
同じ数字を含める「>=」と「<=」だけ実行されます。

指定した数字が大きい場合…
「>」と「>=」の2つが実行されます。

あと、文字を入れるとエラーが出ます。
つまり「>」「<」「>=」「<=」を使った文字型の条件付けはできません。

「==」と「!=」も本来、数字専用の機能(比較演算子)です。
が、文字用の演算子「is」と「not is」と役割が全く同じなので…
Python側が変換して使えるようになってます。

最後に「in」を見ていきます。
これは、リストの中に指定したワードが1つあれば実行する処理です。
inは条件を左側、変数を右側にして使います。
(この順番じゃないとエラーが出ます。)

リスト解説の所で文字型(str)もリスト情報の1つと紹介しました。
なので、str型であれば文字の一部分でも「in」の条件で判定可能です。

注意が必要なのは、リストに入れた文字型(str)の場合です。
この場合は、完全一致ないと判定できません。

文字型はリストに入れると list型の置き換わります。
そしてstrと処理のされ方が若干変わり、inの発動条件が変わります。

以上が、比較演算子についての解説です。
条件分岐は、これで完了です。

変数を途中で操作(代入演算子)

変数はプログラムの途中で差し替える事ができます。
これを「代入」と呼びます。
すでにやってましたが…
「=」を使うと代入が行えます。

=は等しいというより…
左側の変数に右側の情報を入れるイメージです。

本来のイコール、等しい事を表す場合は…

「==」を使う形になります。

「=」のような、変数の設定に使う記号を「代入演算子」と呼びます。
そして、もちろん代入演算子は「=」以外のモノがあります。

【代入演算子】

・「=」   → 普通に情報を入れる(代入)
・「+=」  →  数字などを、たし算してから入れる
・「-=」  →  数字などを、ひき算してから入れる
・「*=」  →  数字などを、たし算してから入れる
・「**=」 →  数字などを、乗数計算してから入れる
・「/=」  →  数字などを、わり算してから入れる(小数点以下も計算)
・「//」  →  数字などを、わり算してから入れる(小数点以下切り捨て)
・「%=」  →  数字などを、わり算した結果の"あまり"を入れる

やってる事は「算術演算子」と同じです。

「a = a+1」と「a += 1」は同じ処理になります。
代入演算子を使うと、ちょっとプログラムを短く書けます。

これを使う事で、下図のように変数を足せます。

他にも、代入演算子には下記のようなものがあります。
「~」「&」「|」「^」「<<」「>>」

こちらは、ビット演算というちょっと特殊な計算でしか使えません。
なのでここでは割愛します。

ビット演算についてはこちらで解説。

【Python】ビット演算の使い方【演算子,活用方法,ゲーム属性】
ビット = PC内部の「0」と「1」を計算する装置1つの単位で、ビット演算を使うと、複数の条件があるモノを手軽に管理できます。これはゲームなどの属性を作る際に役立ちます。さらに、ビット演算子を使うと、入力したビットに変化を加える事ができます。

そして、プログラム的に重要になるのは「+1」と「-1」する処理です。
・「+1する処理」 → a += 1
・「-1する処理」 → a -= 1

この「+1する処理」をインクリメントと呼び、
「-1する処理」をデクリメントと呼びます。

一般的なプログラム言語ではインクリメントを「++」と書きます。
デクリメントは「–」で書きます。
(Pythonはこの表記が不可)

この2つは、次紹介する「ループ処理」で重要になります。

以上が、代入演算子の解説です。

ループ処理(for)

プログラムは特定の条件でまで繰り返す処理 “ループ” を作れます。

先ほど紹介した「条件分岐」と…
今回紹介する「繰り返し(ループ)」の2つがプログラムの最重要部分になります。

ループ分は「for」を使う事で書けます。

【for文の書き方】

for i in ◇◇:
     実行したい処理

#ーーーーー

※1 「i」は任意の変数
 (多くの場合、for文では「i」を使うのが慣例となっている)

※2 ◇◇はループ処理可能な要素を入れる
 (ループ処理可能な要素の事をイテラブルオプジェクトと呼ぶ)

※3 forの最後に「:」を必ず入れる

for文で使える要素を「イテラブルオブジェクトと呼びます。
主に「数字」「文字列」「リスト」の3つになります。

まずは指定した回数を繰り返す処理を紹介します。
これは、イテラブルオプジェクトにrange()を使って設定します。

renge()の()の中に、繰り返したい数値を入力します。
また、先ほど紹介した+1するインクリメント処理を入れると…
繰り返した数だけ数字を増やすような処理が作れます。

一般的なプログラミング言語のfor文は下記のように書きます。

for (i = 1; i<= 10; i++)

変数「i」を設定し、真ん中の「i <=」で範囲を指定。
右側の「i++」でループ処理が行われるごとにiに+1が行われる。
そして、iの値が「i <= 」で指定した数字を超えればループが止まるという形になります。

※Pythonのループ分は少し変わった書き方をする事だけ覚えてもらえればokです。

Pythonのfor文は「イテラブルオプジェクト」を使うという特徴的な設定があります。
そして、イテラブルオプジェクトは「文字」や「リスト」型の情報も使えます。

文字型を入れてfor文を回すと… 
文字の数だけ繰り返し処理が行われます。
そして、変数「i」には文字が1文字づつ入ります。

リストの場合は「,」で区切られた要素が分かれて入ります。

リストで文字を入れた場合、分離せず1つのカタマリとして入る事に注目。

基本的な解説はこれで終わりです、あとは事例紹介です。
for文とif文を組み合わせると…
設定した文字のリストから特定のワードが何個あるかを抜き出す処理が作れます。

※print()は空白の行を作るために入れてます。

for文で、リストの中身を1つ1つ見る処理を実行。
そして、変数「i」を使った「if文」を作ると…
特定のワードが入った時だけ処理が入るようになります。

あとは、このif文の中に「+= 1(インクリメント)」処理を入れることで…
「14の言葉」のカブトムシカウンターが作れます。

このように「条件分岐(if)」「ループ(for)」
そして…「インクリメント/デクリメント(+=1 / -=1)」の3つは
プログラム的に超重要になります。

ループ+インクリメントを組み合わせた事例をもう1つ紹介。
下図はリスト内の数字を1つ1つ計算する処理です。

Num = 0の変数を宣言後…
ループ分の中に「Num = Num + i」を書きます。
すると、ループ処理が行われるたび、リストの数字が計算されます。

あと、何回足されたかをカウントするためにCount = 0の変数を宣言。
これに+=1のインクリメントを入れると… 計算回数まで表示できます。

以上が、for文についての解説です。

関数で処理をまとめる(def/引数/戻り値)

関数を作ると特定の処理をまとめれます。
これは「def」を使うと設定できます。

ファイルを「フォルダ」でまとめるようなモノと考えてください。
あと、のちほど紹介する、自作プログラムを外部読み込み(モジュール)する際に…
関数にまとめてないと、処理を取り出せなくなります。

なので関数の目的は、下記の2つを考えてください。

【関数の目的】

・処理をまとめる
・モジュール化したプログラムから処理を取り出せるようにする

その、関数の作り方がこちらです。

【関数の作り方】

def 任意の関数名 ():
     処理の内容を記述

"""
「if」や「for」と同様に、最後に「:」をつける。
そして、中身はTabキーのスペースで空白を作って書いてください
"""

作った関数は、処理を入れたい所に「関数名()」を入力すると呼び出せます。

そして、関数には「引数」と「戻り値」という概念があります。
・引数 → 関数の中にデータを入れる処理
・戻り値 → 関数の中からデータを取り出す処理

ちょっと、この2つは難しいです。
各自でプログラムを書いて動かして…

ようやく理解できると思います。
(たぶん、頭で考えるより体幹で覚えた方がいいモノです)

まず、引数から説明します。
引数は関数名の後に()を付けて、引数を入力する “枠” を作ります。
そして、その 枠” で指定した変数を使った処理を関数内に入れます。

そして、関数を実行する処理を書きます。
その()の中に先ほどの “枠” として設定した引数の情報を入れます。
この状態で実行すると…
関数の中にデータを入れてプログラムを動かせます。

こちらが、引数の処理になります。
def ()の “()” を使って関数にデータを入れる形になります。

先ほどのプログラムに別の引数を入力。
すると、それぞれの引数に合わせた処理が行われます。

この処理をまとめると下記。
以上が、引数です。

次は戻り値です。
戻り値は関数内に「return ○○」と書く事で出力できます。

内容的には、こちらになります。

【関数の作り方】

def 任意の関数名 ():
     処理の内容を記述
     return "任意のデータ"

任意の変数名 = 任意の関数名 ()

やってる事は、関数のデータの取り出しです。

かなり、ややこしいですが…
下図の様な処理を行って関数からデータを取り出します。

試しに、下図のようなプログラムを作り実行しました。
a = test()の所で1回関数内のプログラムが実行されます。
その後、returnで設定した関数が「test()」の所に出力されます。(戻り値)
なので… 「a」にreturnの内容が代入されて、処理されます。

何が起こったか1つ1つ見ていきます。
まず、1回目の「PUIPUI」出力は…
a = test()の所で実行されたモノになります。

戻り値を取り出すために…
この「a = test()」が必用です。

→ つまり、1度関数内のプログラムを実行する必要があります。

そして、2つ目の「テンジクネズミ車」の所は…
関数内のtext変数をreturnで戻り値化。
戻り値になったので…
a = test()の所で関数が実行された後、aにreturnの内容が代入されます。
そして、このaをprint()すると… returnの内容が出てきます。

このような処理が行えるのが戻り値です。

returnは1回しか使えません。
なので、複数の情報を取り出したい場合は「リスト」機能を使います。

下図のようにリストを使うと、複数の情報を取り出せます。

リストの一部に変数を入れる事も可能です。

あとは、リストの所で紹介した内容を思い出しながら…
変数[0~]などで、情報を取り出す形になります。

・プログラムをまとめるモノが「関数」
・関数にデータを入れるのが「引数」
・関数からデータを取り出すのか「戻り値」

以上が、関数についての説明です。

関数/モジュール/パッケージ/ライブラリーについて

関数を作ったので、次はモジュールなどの “まとめる処理” について解説していきます。
まず、モジュールとは1つのプログラムです。
「.pyファイル」は1つのまとまりとして扱うことができます。

そして「モジュール」をまとめたモノがパッケージになります。
この「複数のパッケージ」と「複数のモジュール」を集めたモノが「ライブラリー」になります。

正直、パッケージとライブラリーの境界は微妙…
(分かりにくい)

電子部品で例えるなら…
・関数が集積回路(lIC
・モジュールは「モジュール」(組み込み済み基盤)
・パッケージはモジュールや付属パーツを組み合わせて動くようにしたモノ
・ライブラリーはパッケージ+モジュール

写真で紹介するとこちら(Pixabayの写真を使用)
・関数 → 集積回路
・モジュール → 回路の1一塊
・パッケージ → モジュールを組み合わせて作ったパーツ(キーボードなど)
・ライブラリ → モジュールとパッケージを組み合わせて作ったモノ

パソコンの場合…

・キーボードパッケージ
・マウスパッケージ
・液晶パッケージ
・PC本体パッケージ


これらが合わさった空間、 “開発環境” と考えてください。

下図のようなプログラムの場合…
def()が関数、集積回路的な役割を果たします。
そして、保存した.pyファイルが「モジュール」です。

そして、これらの「関数/モジュール/パッケージ」は…
いくつか、Pythonの開発者が作って同梱配布してます。
Python側が用意したプログラムはPythonフォルダの「ライブラリー」内に入ってます。
これはPython → 「Lib」中になります。

場所が分からない場合は… 下記のプログラムを動かしてください。

import random
print (random)

これで、Python付属の「random」モジュールの場所が分かります。
そこに、他のパッケージやモジュールが入ってます。

詳細は後程解説しますが…
「import」がモジュール読み込む処理です。

これで、ライブラリーがあるフォルダを特定できます。

ライブラリーを開き、中身を確認。
するとフォルダにまとまった処理(パッケージ)と…
単体の.pyファイル(モジュール)があることが分かります。

そしたら、適当なパッケージを選択して開きます。
Lib内のフォルダがパッケージです。

パッケージ内を見ると、複数のモジュールがあることが分かります。

そしたら、適当なモジュールを開きます。(Sublime Text3を使用)
すると、内部処理に沢山の関数が使われてることがあります。

ちなみに、一部のプログラムは「ライブラリー」や「パッケージ内」に無い事があります。
例えば「math」などのモジュールの場所を確認すると…
場所が「built-in」と表示されます。

これは、Pythonそのものに組み込まれたモジュールになります。
たぶん「python.exe」や「.dll」系ファイルの何処かに入ってます。

ちょっと、コレの場所特定は難しかったです。

以上が「関数、モジュール、パッケージ、ライブラリ」の関係です。

標準モジュールを使う

Pythonライブラリー内に入った.pyファイルを「標準モジュール」と呼びます。
こちらをプログラムに入れる方法を紹介していきます。
今回は「random.py」というモジュールを使います。

ちなみに… すべてのモジュール解説はあまりにも数が多すぎて無理です。

一応、公式サイトには一覧で見れる場所もあります。

Python 標準ライブラリ
Python 言語リファレンス ではプログラミング言語 Python の厳密な構文とセマンティクスについて説明されていますが、このライブラリリファレンスマニュアルでは Python とともに配付されている標準ライブラリについて説明します。また Python 配布物に収められていることの多いオプションのコンポーネントにつ...

が… すべての把握は難しいと思います。
(本業プログラマーもすべてを把握していないと思います)

これをすべて知ろうとすると「勉強のための”勉強”」になります。
なので、付属モジュールの使い方や活用事例は…

・「本」を見て優先度が高いモノを把握する
・「やりたい事 python」で検索して必要な所だけ覚える


みたいな形で進めることをおすすめします。

あと、python開発者以外が作った外部ライブラリーの読み込みなども行えるので…
“すべてを知る”事はできないです。諦めてください。
やりたい事から、逆算して必要な部分だけ学ぶ形にしてください。

モジュールは、プログラム内に「import ○○」で書くと読み込めます。
○○ = 読み込みたいモジュール(.py無し表記)です。

そして、読み込んだモジュールは「○○ (n)」みたいな形で動作させます。
下図の処理は変数をリスト化 → random.choice()の “()” に変数を入れる。
すると、リスト内の処理がランダムに出るようになります。

この「ランダム化」の処理が「random.py モジュール」の効果です。
そして「.choice()」でrandom.pyの中から必要な関数を取り出して使う形になります。

randomモジュールの中にある関数については、こちらで解説。

【Python】randomモジュールの使い方【データ型,分布,SEED値】
ランダムを使うと、整数、小数、文字、リストなどから適当な値を取り出して使うことができます。このランダムは疑似乱数という、複雑な数字を使って表現しています。またカウスやパレート分布を使えば、値の出方を変えれます。こちらの使い方や設定方法を解説。

このような方法で、他のモジュールも扱う事ができます。
(細かな使い方は、下図が多すぎるので割愛させてください)

以上が、標準モジュールを使う方法です。

モジュールを自作する

モジュールは.pyファイルです。
なので、保存したプログラムは「モジュール」として使う事が可能です。

これを行うためには2つの「.py」ファイルが必要になります。
なのでCtrl+Shift+Sキーの別名保存を使って2つ目の「.py」ファイルを作成。

そして、この2つの.pyファイルを同じフォルダーに入れます。
これで、フォルダ内のプログラムが紐づけられるようになります。

標準ライブラリの中に入れれば読み込めると思いますが…
絶対、後で混乱することになるので別フォルダを作る事をおすすめします。

そして、モジュールは中にある ”関数” を指定して実行する形になります。
つまり、中の処理が “関数” でまとまってないと、読み込むことができません。

そこで、モジュールとして使うプログラムの方を開きます。
そして、内部処理を関数にまとめます。

次に、モジュールを読み込んで使う方のプログラムを開きます。
そして下記のような記述を行います。

・import ○○(.py無しモジュール名)
・○○(モジュール名).◇◇(モジュール内の関数名)

必要なのは、下図の2行だけです。

あと、import ○○の後に… as △△のような表記を追加。
すると、読み込んだモジュール名を別の名前(△△)で扱うことができます。

こちらを実行。
すると「PuiPui.py」の処理が読み込まれて実行されます。

「PuiPui.py」の中身はこちら。
こちらが実行されて、リスト内の文字が実行ごとにランダムで表示されるようになりました。

あと、モジュールを使った処理を作ると「__pycache__」というファイルが作られます。
これはモジュール読み込みを高速化するファイルです。

これに関しては、現状生成されるのは仕方ないと考えてください。
作らないで実行する方法はこちらで解説。(ちょっと不便です)

【Python】__pycache__ファイルを作らない方法
__pycache__はモジュール読み込み時に作られるキャッシュファイルで、プログラムに特殊な処理を入れたり、コマンドプロンプトでpython -Bや「set PYTHONDONTWRITEBYTECODE=1」を使うと作られなくなります。

以上が、自作モジュールを使う方法です。

10連ガチャプログラムを作る

Pytho基本操作のまとめとして、最後に10連ガチャプログラムを作って締めます。

ソースコードは最後の方にあります。
(「行き詰まったらAIにコードを修正させる」の所です)

こちらのような “画面” は「tkinter」というモジュールを使うと作れます。
新規.pyファイルを作り、下記のようなプログラムを作成。

#「tkinter」を追加
import tkinter as tk

#最初の画面を作る処理
root = tk.TK()
root.geometry("600x400")

root.geometry(“600×400”)は… 数字は””で区切って文字として入力。
さらに、間の「x」は英語小文字のエックスです。

変数名は「root」じゃなくても良いですが…
他の記事や本を見る限り「root」が慣習となってるようです。
なので、変えない方が無難。

すると、600×400の画面を作れます。

そしたら、下記のようなプログラムを追加。

root,title("任意のタイトル名")

任意の変数名1 = tk.Label (text = "画面内に表示したい文字")
任意の変数名1.pack()

任意の変数名2 = tk.Button (text = "ボタンに表示したい文字")
任意の変数名2.pack()

すると、画面上に「文字」と「ボタン」が生成されます。

そしたら、間にテキストを追加します。
ここに、ガチャ結果を表示させます。

root,title("任意のタイトル名")

任意の変数名1 = tk.Label (text = "画面内に表示したい文字")
任意の変数名1.pack()

任意の変数名3 = tk.Label (text = "ガチャ結果(任意のテキスト)")
任意の変数名3.pack()

任意の変数名2 = tk.Button (text = "ボタンに表示したい文字")
任意の変数名2.pack()

これで、ガチャ結果を入れる文字枠ができます。
ただ、表示されてる場所がかなり微妙です。

そこで、かなり力技ですが…
すべての.pack()の中に「expand=Ture」の引数を入れます。

「expand=Ture」は “要素の余白” を可能な限り大きく取る処理です。
3つに「expand=Ture」を入れることで…
画面を÷3した、中央部分にそれぞれの要素が入ります。

↓より細かく画面を作り込みたい方は、こちらをご覧ください。

【Python】tkinterモジュールの使い方【UI,作成】
tkinterはPython付属のUIを作るモジュール。ウィジットを「作成」と「配置」する2つの処理を書いてUIを作ります。ボタンやバーなどは操作すると指定した「関数」を実行可能。テキスト入力欄はget()で取得可能。こちらの使い方を解説。

そして、2番目の要素の「ガチャ結果」を処理中に変えれるようにします。
「Gacha = 」の形で変数を設定。
変数で入力することで、処理中に内容を変えれるようになります。

これで、変数を使って2段目の要素に文字を入れることができました。

そしたら、次は「ボタン」の処理で特定の動作が行われるようにします。
下記のような操作を行います。

①3番目のボタンの処理に下記の一文を追加。
Button_1 = tx.Button(text = "任意の文字" ,command = "任意の関数名")

これでボタンが押されたら「.command = 」で指定した関数を実行するようになります。

ーーーーー

②実行する内容の関数を作成

def 任意の関数名():
     "ボタンを押した時に実行したい処理"

これで、ボタンを押すと処理が入るようになります。

次は10連ガチャシステムを作ります。
手順は下記の通り。

・「import random」でランダムモジュールを読み込み
・「def RandomSelect():」 で関数を作成し処理をまとめる
・「a = random.randint(1, 100)」で1~100の数字がランダムに出るようにする

・ランダムで1~100が入力される変数を使って抽選処理を作る
・抽選処理は「if」と「elif」で作れる

・「if a<= 40」は40%の確立で実行
・「elif a > 40 and a <= 70」で30%の確立で実行
・「elif a > 70 and a <= 90」で20%の確立で実行
・「elif a > 90 and a <= 97」で16%の確立で実行
・「elif a > 97 and a <= 100」で4%の確立で実行

・「return [結果変数,a]」でリストを使って複数の情報を出力
・「b = RandomSelect()」でボタンを押したら実行する関数に戻り値を入れる

・「 "表示要素2の変数名" .configure(text = (b[0],"No",b[1])) 」
こちらを使って、ボタンを押したら要素2のテキストが更新されるようにする

変数 a = random.randint(1, 100)は
1~100の値をランダムに出すので…
「1」が1%に対応します。

なので、a =< 40 のような範囲指定を行うと
→ 「40%」確率で実行のような設定ができます。

変数 a = random.randint(1, 100)は
1~100の値をランダムに出すので…
「1」が1%に対応します。

なので、a =< 40 のような範囲指定を行うと
→ 「40%」確率で実行のような設定ができます。

これで、単発ガチャが完成します。

ノーマルが連続で出た場合… 正しくボタンが動いてるか分かりません。
なので、結果の最後に「ナンバー」を表示する処理を入れました。

そしたら、これを10連ガチャにする処理を作ります。
手順は下記の通り。

・ボタンを押したら実行する関数を編集する
・中に「 Gacha_list = [] 」を作り、リストを作成+初期化する処理を追加
・「for i in range(10):」で "何かを" 10回回すループ分を作る
・「b = RandomSelect()」で10回抽選処理を行うようにする
・「 Gacha_list.append(b)」で "Gacha_list" の中に10連ガチャの結果を格納(リスト)
・「print(Gacha_list)」でこの処理が正しく動いてるか確認

print()が問題無く動いたので…
この内容を「tkinter」で作った画面に表示できるようにします。

"2段目要素の変数目" .configure(text = Gacha_list[0:10])

Gacha_list[0:10]で、リスト内の情報をすべて表示します。
(リスト内の0~9の情報を表示)

すると… 文章が長すぎてはみ出ます。
読めません。

そこで、改行処理を追加します。
ガチャシステムの戻り値に「,”\n”」を追加。

この「”\n”」が文章に改行を入れる処理になります。

すると… 下図のようになります。
惜しい所まで行きましたが… {}}がどうやっても消せません。

このような、行き詰まりに遭遇したら…
アイデアとしてAIに丸投げする方法で治ることがあります。

この{}はこれまで紹介した知識だけでは治せません。
このような、自分の知識外の操作が必要な場面でAIは役立ちます。

とくに、文章生成AIと “プログラム” は相性が良いです。

ちなみに、手動で1から理解して直す方法はこちらで解説。

【Python】リストの出力から[]や()を消す方法【括弧,str化】
リスト型を使った出力には[]や()のようなカッコが付くことがあります。こちらの1つ目の対処法は変数[0]のように1つだけデータを取り出すこと。2つ目の対処法はリストではなく、文字型で処理し「+」などを使って情報をまとめて書き出すことです。

行き詰まったらAIにコードを修正させる

10連ガチャプログラムはできましたが…
{}}が消せずに行き詰まりました。

print()で何が出てるかを確認。
すると… リストを出力した際に[]が発生している事が分かります。
この[]が{}に変換されて悪さをしてるようです。

が… どうやって消せば良いか分かりませんでした。
なので、文章生成AIを使います。
何でもいいですが、ここではEdge付属の「Copilot」を使います。
Microsft Edgeを起動。

右上のマークをクリック。

これで、Copilotが起動できます。
会話スタイルと「より厳密に」に設定。
その後、テキストを入力します。

下記のようなテキストを入力しました。

Pythonでこのプログラムの出力から []を消す方法


import random

def RandomSelect():
    a = random.randint(1, 100)

    if a <= 40:
        Gacha = "N(ノーマル)"

    elif a > 40 and a <= 70:
        Gacha = "HN(ハイノーマル)"

    elif a > 70 and a <= 90:
        Gacha = "R(レア)"

    elif a > 90 and a <= 97:
        Gacha = "SR(スーパーレア)"

    elif a > 97 and a <= 100:
        Gacha = "SSR(スーパースーパーレア)"
    return [Gacha,a,"\n"]


#ーーーーー


def GachaSystem():
    
    Gacha_list = []
    
    for i in range(10):
        b = RandomSelect()
        Gacha_list.append(b)
    
    print(Gacha_list[0:10])
    ResulText.configure(text = Gacha_list[0:10])

     
#ーーーーー
    
    
import tkinter as tk

WindowX = 600
WindowY = 400


root = tk.Tk()
root.geometry("600x400")
root.title("Python_10連ガチャ")


Label_1 = tk.Label(text = "SSR確定 - 10連ガチャ")
Label_1.pack(expand=True)


Gacha = "結果はここに"
ResulText = tk.Label(text = Gacha)
ResulText.pack(expand=True)


Button_1 = tk.Button(text = "回す",command = GachaSystem)
Button_1.pack(expand=True)

すると、エラーの原因と修正済みコードが出力されます。
どうやら「リスト型」を使うと[]が出るのは仕方ないようです。
なので… リストでは無く文字列(str型)で処理すれば良いとの事でした。

↓出力されたソースコードはこちら。
 (#のコメントと、赤強調は手動で入れてます)

import random

def RandomSelect():
    a = random.randint(1, 100)

    if a <= 40:
        Gacha = "N(ノーマル)"

    elif a > 40 and a <= 70:
        Gacha = "HN(ハイノーマル)"

    elif a > 70 and a <= 90:
        Gacha = "R(レア)"

    elif a > 90 and a <= 97:
        Gacha = "SR(スーパーレア)"

    elif a > 97 and a <= 100:
        Gacha = "SSR(スーパースーパーレア)"
    return Gacha + ", " + str(a) + "\n"
    #↑リストでは無く文字型にまとめて出力

#ーーーーー


def GachaSystem():
    
    Gacha_list = ""
    #↑文字型を初期化する処理
    
    for i in range(10):
        b = RandomSelect()
        Gacha_list += b
    
    print(Gacha_list)
    ResulText.configure(text = Gacha_list)

     
#ーーーーー
    
    
import tkinter as tk

WindowX = 600
WindowY = 400


root = tk.Tk()
root.geometry("600x400")
root.title("Python_10連ガチャ")


Label_1 = tk.Label(text = "SSR確定 - 10連ガチャ")
Label_1.pack(expand=True)


Gacha = "結果はここに"
ResulText = tk.Label(text = Gacha)
ResulText.pack(expand=True)



Button_1 = tk.Button(text = "回す",command = GachaSystem)
Button_1.pack(expand=True)

これで、正しく動くようになりましたが…
リスト型でどうにかできないのか気になったので質問。
すると、解決法とソースコードが出力されました。

こちらをコピペして実行。
すると謎の「,」が増えてます。

ソースコードを確認。
原因はココのようです。

正直、このあたりになると、何をしてるのか分からないです。

join () str型を結合左折ために使う機能のようです。
要するに、ここでも最後は「リスト」を使わず
“文字型で1まとめにした” 情報を入れて解決する事になります。

ここの「,」を「_no」に変更。

下記のようなソースコードに調整して実行。

import random

def RandomSelect():
    a = random.randint(1, 100)

    if a <= 40:
        Gacha = "N(ノーマル)"

    elif a > 40 and a <= 70:
        Gacha = "HN(ハイノーマル)"

    elif a > 70 and a <= 90:
        Gacha = "R(レア)"

    elif a > 90 and a <= 97:
        Gacha = "SR(スーパーレア)"

    elif a > 97 and a <= 100:
        Gacha = "SSR(スーパースーパーレア)"
    return [Gacha, a]# ←\nはここには書かない


#ーーーーー


def GachaSystem():
    
    Gacha_list = []
    
    for i in range(10):
        b = RandomSelect()
        Gacha_list.append(b)
    
    #リスト情報を .Join()を使って文字列化して入力
    Gacha = "\n".join([f"{item[0]} _No. {item[1]}" for item in Gacha_list])
    print(Gacha)
    ResulText.configure(text = Gacha)

     
#ーーーーー
    
    
import tkinter as tk

WindowX = 600
WindowY = 400


root = tk.Tk()
root.geometry("600x400")
root.title("Python_10連ガチャ")


Label_1 = tk.Label(text = "SSR確定 - 10連ガチャ")
Label_1.pack(expand=True)


Gacha = "結果はここに"
ResulText = tk.Label(text = Gacha)
ResulText.pack(expand=True)



Button_1 = tk.Button(text = "回す",command = GachaSystem)
Button_1.pack(expand=True)

これで、10連ガチャが完成します。

以上が、10連ガチャプログラムの作成方法です。
↓こちらを「アプリケーション」として書き出す方法はこちらで解説。

【Python】.pyファイルを.exeに変換する方法【自作ソフト,デスクトップアプリ開発】
.pyファイルの.exe化は「pyinstaller」を使えばできます。こちらはコマンドプロンプトで導入&操作します。.pyファイルがある場所に移動し「pyinstaller .py --追加情報」を打ち込むだけで動作します。こちらを解説。

SSR確定にする

SSR確定は簡単です。
10連ガチャを引くGachaSystem():内のfor文にある「i」を使って条件分岐を作るだけになります。

for i in range(10):  → 「iが "0" から "9" までの順に上がっていく」

if i == 0:で1回目だけ別の処理を動かす。
 → 別の処理として関数「SSE_Select():」を作成
a=random.randint(98, 100) → SSRのナンバーだけ出力する

else:
 → i=1~9の時、は通常のガチャを回す「 RandomSelect(): 」

これで、SSR確定10連ガチャになります。

↓完成品

import random

def RandomSelect():
    a = random.randint(1, 100)

    if a <= 40:
        Gacha = "N(ノーマル)"

    elif a > 40 and a <= 70:
        Gacha = "HN(ハイノーマル)"

    elif a > 70 and a <= 90:
        Gacha = "R(レア)"

    elif a > 90 and a <= 97:
        Gacha = "SR(スーパーレア)"

    elif a > 97 and a <= 100:
        Gacha = "SSR(スーパースーパーレア)"
    return [Gacha, a]


def SSR_Select():
    a = random.randint(98, 100)
    Gacha = "SSR(スーパースーパーレア)"
    return [Gacha, a]


#ーーーーー


def GachaSystem():
    
    Gacha_list = []
    
    for i in range(10):
        if i == 0:
            b = SSR_Select()
            Gacha_list.append(b)
            
        else:
            b = RandomSelect()
            Gacha_list.append(b)

                
    Gacha = "\n".join([f"{item[0]} _No. {item[1]}" for item in Gacha_list])
    print(Gacha)
    ResulText.configure(text = Gacha)

     
#ーーーーー
    
    
import tkinter as tk

WindowX = 600
WindowY = 400


root = tk.Tk()
root.geometry("600x400")
root.title("Python_10連ガチャ")


Label_1 = tk.Label(text = "SSR確定 - 10連ガチャ")
Label_1.pack(expand=True)


Gacha = "結果はここに"
ResulText = tk.Label(text = Gacha)
ResulText.pack(expand=True)



Button_1 = tk.Button(text = "回す",command = GachaSystem)
Button_1.pack(expand=True)

まとめ

今回は、Pythonの導入方法から基本操作について紹介しました。

・Pythonは無料で使えるプログラミング言語
・「AI開発」や「作業の自動化」に強い言語
・導入は公式サイトからダウンロード
・Pythonは基本的に「IDLE」を使って動かす
・2行以上のブログラムを作る場合は「.py」ファイルを作成する必要がある
・あとは変数、リスト、ifとfor、関数やモジュールなどを組み合わせてプログラムを作る
・最後は「ライブラリー」の殴り合い
・行き詰まったら、文章生成AIに相談するのも有効な手

また、他にもプログラムについて解説してます。

【Python】コマンドプロンプトでPythonを動かす方法【環境変数,Pathを通す】
Windows OSの場合.pyプログラムはコマンドプロンプトで動かすと「python -」のコマンドが使えます。出力結果がPythonしか出ない場合は、アプリ実行エイリアスをオフにしたり、環境変数を調整してPathを通すなどの調整をします。
【Python】pipを使ったライブラリーの導入方法【Install,pathを通す】
Pythonのライブラリーはpip installをコマンドプロンプトに打ち込んで読み込みます。この時コマンドプロンプトとPythonが同期してないと動きません。同期させるには環境変数を設定する必要があります(Pathを通す)。こちらを解説。

ぜひ、こちらもご覧ください。

コメント

タイトルとURLをコピーしました