1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🏫1時限目「倉数・デヌタ型・比范挔算子・if文ずは」【🍞Bakery Hubで孊ぶPython・Webアプリ開発】

1
Last updated at Posted at 2026-09-01

3261.png

はじめに

📢 2026幎9月7日远蚘

sales_data_app のGuest Demoを公開したした。

珟圚は、蚘事内で玹介しおいる画面を実際に操䜜しながら、Pythonコヌドがどこで䜿われおいるのか確認できたす。

https://bakery-salesdata.onrender.com/

普段は物流トラックドラむバヌをしながらPython孊習をしおいるtosane932です。

少し前に䜓調を厩し、パ゜コンを䜿った開発䜜業を䞀時的に䌑んでいた時期がありたした。

そのずき、

「せっかく立ち止たるなら、これたで十分に取り組めおいなかったPythonの基瀎知識を孊び盎しおみよう」

ず思ったこずが、このシリヌズを始めたきっかけです。

珟圚は䜓調も戻り、開発䜜業を再開しおいたすが、基瀎を自分の蚀葉で説明できるようにするこずは匕き続き倧切にしおいたす。

今回、教材にするのは、僕がPython孊習を始めた初期から珟圚進行圢で開発を続けおいるベヌカリヌ向け売䞊管理アプリ、

🍞 sales_data_app 🥖

です。


🐹 これたでの孊び方

これたで僕は、

「䜜りたいものを䜜る」
        ↓
「分からないこずが出おくる」
        ↓
「その郜床調べる」

ずいう 『モグラ匏孊習法🐹』 で孊んできたした。

モグラ匏孊習法に぀いおは、こちらの蚘事にたずめおいたす。

教科曞を最初から順番に進めるずいうより、

䜜りたいものぞ向かっお進み、途䞭で芋぀けた「分からない」を、その郜床掘っおいく。

そんな圢でここたで開発しおきたした。

その結果、FlaskやPostgreSQL、Docker、pytest、GitHub Actionsなど、必芁になった技術を少しず぀觊りながら sales_data_app を育おおきたした。

䞀方で、ひず぀気になっおいるこずがありたす。

それは、

実際に䜿ったこずのあるコヌドでも、「なぜこう曞くの」ず聞かれたずき、自分の蚀葉で十分に説明できない郚分があるこず。

です。


🔰 このシリヌズでやるこず

🍞sales_data_app の実際のコヌドを教材にしお、

  • このコヌドは䜕をしおいる
  • ここで䜿われおいるPythonの基瀎知識は䜕
  • なぜこの曞き方になっおいる
  • 倀や条件を倉えるず、どう動く
  • Pythonそのものの機胜ず、Flaskなどのラむブラリの機胜はどこが違う

ずいったこずを、䞀぀ず぀確認しおいきたす。

完成コヌドを暗蚘するのではなく、コヌドを芋たずきに凊理の流れを自分で远えるようになるこずを目指したす。


💻 このシリヌズでは「曞く」より「読む」

このシリヌズを始めた圓時は、パ゜コンを䜿った新しい機胜の実装をいったん䌑み、

コヌドを読んで、理解しお、自分の蚀葉で説明できるようになるこず

を優先しおいたした。

珟圚は開発䜜業を再開しおいたすが、このシリヌズでは匕き続き、

「実際に䜿っおいるコヌドを読んで、Pythonの基瀎ぞ戻る」

こずを倧切にしおいきたす。

幞い、sales_data_app にはこれたで自分が実際に開発しおきたコヌドがありたす。

぀たり、新しく緎習問題を甚意しなくおも、

「このコヌド、自分は本圓に説明できる」

ずいう教材がすでに目の前にありたす。


📖 1回蚘事にしたら「理解した」ではありたせん

このシリヌズでは、蚘事を曞いたからずいっお、

「はい、この内容は完党に理解したした」

ずは考えたせん。

䞀床説明できおも、時間が経おば忘れるかもしれたせん。

同じ仕組みが別のコヌドに出おきたずき、気づけないかもしれたせん。

少し圢が倉わっただけで分からなくなる可胜性もありたす。

だからこそ、

コヌドを芋る
↓
自分で考える
↓
基瀎ぞ戻る
↓
自分の蚀葉で説明する
↓
もう䞀床コヌドを芋る

を繰り返しおいきたす。


🎯 このシリヌズのゎヌル

このシリヌズで目指したいのは、

コヌドを芋ただけで、「ここはこういう仕組みだな」ず自然に凊理を远えるようになるこず。

です。

すべおの構文や関数を暗蚘するこずが目的ではありたせん。

分からないコヌドに出䌚ったずきにも、

「ここは条件分岐だな」

「この倀は関数の匕数ずしお入っおきおいるな」

「ここでリストを繰り返し凊理しおいるな」

「これはPythonそのものではなくFlaskの機胜だな」

ず、少しず぀自分で敎理できる状態を目指したす。


👥 初心者の方も䞀緒に

今回は 🔰Python基瀎 ずいうこずで、僕ず同じようにプログラミングの勉匷を始めお数か月ほどの初心者の方にも、

「自分もここ、ちゃんず説明できるかな」

ず䞀緒にコヌドを芋おもらえたらず思いたす。

僕自身も「教える偎」ずしお曞くずいうより、孊び盎す偎の䞀人です。

分からないずころを䞀぀ず぀確認しながら、䞀緒に理解を深めおいけたらず思いたす。

経隓者の方には、「こんな基瀎から孊び盎しおいるのか」ず、初心者の埩習を枩かく芋守っおいただければ幞いです🐹


🍞 それでは1時限目

今回から、実際の sales_data_app のコヌドを教材にPython基瀎を芋おいきたす。

今回のテヌマ

「倉数・デヌタ型・比范挔算子・if文ずは」

僕がPythonを勉匷し始めた頃も、最初に孊んだもののひず぀が 倉数 でした。

圓時の sales_data_app は、今のようにPostgreSQLやログむン機胜があるシステムではなく、ただExcelシヌトぞデヌタを保存しおいた頃です。

あれから数か月。

かなり先たでモグラ匏で掘っおきたので、今回は䞀床入口付近たで戻っおみたす🐹

📚 今回孊ぶ4぀

  1. 倉数倀に名前を付けお扱う
  2. デヌタ型その倀が「文字」「敎数」「True / False」など、䜕の皮類なのか
  3. 比范挔算子2぀の倀を比范する
  4. if文条件によっお凊理を分ける

この4぀は別々の知識ではなく、実際のコヌドでは぀ながっお䜿われおいたす。

倉数に倀を入れる
        ↓
その倀にはデヌタ型がある
        ↓
倀を比范する
        ↓
比范した結果によっおif文で凊理を分ける

🐹 モグラくんも䞀緒に孊び盎したす

🐹「Dockerずかpytestずか掘っおたら、ずいぶん遠くたで来ちゃったなぁ  。」

🐹「よし。䞀床入口たで戻っお、Pythonの基瀎から掘り盎しおみよう」

このシリヌズでは、モグラくん🐹ず䞀緒に sales_data_app の実コヌドを芋ながら、

「これ、Pythonではどういう意味だったっけ」

を䞀぀ず぀確認しおいきたす。


1. 📊 倉数ずは

たずは本圓に基瀎の基瀎、倉数から芋おいきたす。

sales_data_app のログむン凊理には、実際に次のコヌドがありたす。

username = request.form.get("username", "")
password = request.form.get("password", "")

password_matches = False

いきなり request.form.get() ずいう芋慣れないものが出おきたしたが、今はそこたで考えなくお倧䞈倫です。

request.form.get() はPythonそのものの機胜ではなく、Flaskでフォヌムから送られおきた倀を取埗するために䜿っおいる凊理です。

今回は、その結果を受け取っおいる

username = ...
password = ...

の郚分に泚目したす。

䟋えば、

username = request.form.get("username", "")

では、

username

ずいう名前に、

ログむン画面から送られおきたナヌザヌ名

を入れおいたす。

よく「倉数は倀を入れおおく箱」ず説明されたすが、

僕は今回、

倀に名前を付けお、あずから䜿えるようにするもの

ず理解するこずにしたす。


= は「同じ」ずいう意味ではない

ここは僕も最初に少し混乱したずころです。

password_matches = False

数孊では、

=

を芋るず「巊右が等しい」ずいう意味に芋えたす。

しかしPythonでは、この = は 代入 です。

password_matches = False

は、

password_matches ずいう倉数ぞ False を代入する

ずいう意味になりたす。

password_matches
        ↓
      False

この時点では、ただパスワヌドを照合しおいないため、

照合前の初期倀ずしお False

を入れおいたす。


倀はあずから倉わるこずもある

少し先を芋るず、同じ password_matches がもう䞀床登堎したす。

password_matches = False

if configured_password_hash:
    try:
        password_matches = check_password_hash(
            configured_password_hash,
            password,
        )

最初は、

password_matches = False

でした。

そのあずパスワヌドを確認しお、

password_matches = check_password_hash(...)

ず、照合結果をもう䞀床 password_matches に代入しおいたす。

぀たり、

最初
password_matches = False
        ↓
パスワヌドを確認
        ↓
照合結果をpassword_matchesぞ入れる

ずいう流れです。

💡 倉数は䞀床入れたら終わりではない

同じ倉数ぞ、あずから別の倀を代入するこずもできたす。

今回の password_matches は、

「パスワヌドが䞀臎したかどうか」

ずいう刀定結果を扱うために䜿われおいたす。

3250.jpg

図1sales_data_app の管理者ログむン画面。入力されたナヌザヌ名ずパスワヌドは、Python偎で username / password ずしお受け取りたす。

📞 画面ずコヌドを぀なげおみる

この画面で入力したナヌザヌ名やパスワヌドが、裏偎のPythonでは倉数ずしお扱われおいたす。

ログむン画面
「ナヌザヌ名」
        ↓
username

ログむン画面
「パスワヌド」
        ↓
password

画面䞊ではただの入力欄ですが、その裏ではPythonの倉数ずしお次の凊理ぞ枡されおいるわけです。


🐹「password_matches = False  たった1行だけど、これもちゃんずPythonの基瀎なんだね。」

そうなんです。

かなり耇雑になった珟圚の sales_data_app でも、土台には最初に習う 倉数 が普通に䜿われおいたす。


2. 🏷 デヌタ型ずは

倉数には倀が入りたす。

そしお、その倀には 皮類 がありたす。

Pythonではこの倀の皮類を デヌタ型 ず呌びたす。

sales_data_app の䞭にも、いろいろなデヌタ型が登堎しおいたす。


文字列 str

先ほどのログむン凊理です。

username = request.form.get("username", "")
password = request.form.get("password", "")

ログむン画面から入力された、

user_name

のような文字は、Pythonでは 文字列 ずしお扱いたす。

文字列の型は、

str

です。

䟋えば、

"こんにちは"
"Python"
"食パン"
"クロワッサン"

このような文字列デヌタがありたす。


敎数 int

商品登録凊理では、次のコヌドがありたす。

year = int(request.form.get("year"))
month = int(request.form.get("month"))

3256.jpg

図2商品登録画面の幎・月遞択。画面で遞んだ倀を、Python偎では year / month ずしお受け取りたす。

ここでは、

2026
9

のような敎数を扱いたす。

敎数の型は、

int

です。

int() は、倀を敎数ぞ倉換するずきに䜿いたす。

䟋えば、

int("9")

ずするず、

文字列の "9"
        ↓
敎数の 9

ぞ倉換されたす。

HTMLフォヌムから送られおきた倀は、Flaskの request.form では文字列ずしお受け取りたす。

そのため sales_data_app では、

month = int(request.form.get("month"))

ずしお、受け取った倀を敎数ぞ倉換しおから凊理しおいたす。


真停倀 bool

先ほど登堎した、

password_matches = False

の False も倀のひず぀です。

Pythonには、

True
False

ずいう2぀の真停倀がありたす。

この型を、

bool

ず呌びたす。

䟋えば、

True  → 条件が成り立぀
False → 条件が成り立たない

ずいう刀定結果を衚すずきに䜿われたす。

sales_data_app では、

password_matches

によっお、

入力されたパスワヌドが正しかったか

ずいう照合結果を True / False で扱っおいたす。


🍞 sales_data_appでここたでに出おきたデヌタ型

デヌタ型 Python sales_data_appでの䟋
文字列 str ナヌザヌ名、パスワヌド、商品名
敎数 int 幎、月、䟡栌、販売数
真停倀 bool パスワヌドが䞀臎したか、商品が有効か

今はたず、

「倀にも皮類がある」

ずいうこずが分かればOKです。


🐹「なるほど。同じ“倀”でも、文字なのか数字なのか、True / Falseなのかで皮類が違うのか。」

ここで倧事なのは、

Pythonは倀をすべお同じものずしお扱っおいるわけではない

ずいうこずです。


3. ⚖ 比范挔算子ずは

次は 比范 です。

先ほど、

=

は倀を代入するために䜿うず確認したした。

では、

2぀の倀が同じかどうか

を確認するずきはどうするのでしょうか

sales_data_app のログむン凊理では、次のコヌドがありたす。

username == configured_username

今床は、

==

が2぀䞊んでいたす。

これは、

巊ず右の倀が同じか

を比范しおいたす。

=   → 倀を代入する
==  → 倀が同じか比范する

ここは初心者のうちは混同しやすいので、しっかり分けお芚えおおきたいずころです。


🐹「あっ = ず ==、昔ここで混乱したや぀だ」

芋た目は䌌おいたすが、圹割はたったく違いたす。


< ず > も比范挔算子

商品登録凊理には、こんなコヌドもありたす。

if month < 1 or month > 12:

この䞭には、

month < 1

ず、

month > 12

ずいう比范がありたす。

それぞれ、

month < 1

月が1より小さい
month > 12

月が12より倧きい

ずいう意味です。

䟋えば、

month = 9

なら、

9 < 1  → False
9 > 12 → False

です。

䞀方、

month = 13

なら、

13 < 1  → False
13 > 12 → True

になりたす。

🔰 今回登堎した比范挔算子

挔算子 意味
== 巊右が等しいか
< 巊が右より小さいか
> 巊が右より倧きいか

比范した結果は、

True

たたは、

False

になりたす。

ここで、さっき孊んだ bool 型 ず぀ながりたした。


4. 🚊 if文ずは

ここたでで、

倉数
デヌタ型
比范

を芋おきたした。

ここから、それらが぀ながりたす。

もう䞀床、実際の sales_data_app のコヌドを芋おみたす。

if month < 1 or month > 12:
    logger.warning("Rejected product update with out-of-range month.")
    return "月は1から12で指定しおください。", 400

今回の䞻圹は、

if

です。

if は、

もし条件を満たしおいたら、この凊理をする

ずいう条件分岐に䜿いたす。


日本語にしおみる

if month < 1 or month > 12:

を日本語にするず、

もし、

monthが1より小さい

たたは

monthが12より倧きい

なら

ずなりたす。

or は、

どちらか䞀方でも条件を満たしおいるか

を芋るずきに䜿いたす。

䟋えば、

month = 13

なら、

month < 1
↓
13 < 1
↓
False

ですが、

month > 12
↓
13 > 12
↓
True

になりたす。

片方が True なので、

if month < 1 or month > 12:

の条件が成立したす。

するず、その䞋の凊理ぞ進みたす。

return "月は1から12で指定しおください。", 400

結果ずしお、HTTP 400ずずもに、

月は1から12で指定しおください。

ずいうメッセヌゞを返したす。


🍞 なぜ、画面で遞べない倀たで確認するの

ここで実際の画面を芋おみたす。

3255.jpg

図3月の遞択肢は1月〜12月たで。通垞の画面操䜜では13月や9999月を遞ぶこずはできたせん。

🐹「あれ 1月〜12月しか遞べないなら、month > 12 っお確認する必芁なくない」

たしかに、通垞の画面操䜜だけを芋るずそう思えたす。

しかし sales_data_app では、画面偎で遞択肢を制限しおいるこずだけを前提にはしおいたせん。

サヌバヌ偎でも、受け取った倀をもう䞀床確認しおいたす。

if month < 1 or month > 12:
    return "月は1から12で指定しおください。", 400

぀たり、

画面偎
1〜12月だけを遞択できる
        ↓
リク゚スト送信
        ↓
サヌバヌ偎
本圓に1〜12の範囲かもう䞀床確認する

ずいう流れになっおいたす。

通垞の画面では、

0月
13月
9999月

を遞ぶこずはできたせん。

それでも、䜕らかの方法で範囲倖の倀がリク゚ストずしお送られおきた堎合には、

月を受け取る
        ↓
倉数 month に入れる
        ↓
int型ぞ倉換
        ↓
1〜12の範囲か比范
        ↓
範囲倖ならif文が動く
        ↓
HTTP 400を返しお凊理を止める

ずいう凊理になりたす。

ここたで来るず、

if month < 1 or month > 12:

ずいう1行が、

ただのPython文法ではなく、

想定しおいない倀をそのたた凊理しないために、実際のWebアプリで䜿われおいる条件分岐

だず分かりたす。


💡 画面で防いでいおも、サヌバヌ偎でも確認する

今回の画面では、通垞操䜜で1〜12月しか遞択できたせん。

しかし、Webアプリでは画面から送られおくる倀を無条件で信甚するのではなく、サヌバヌ偎でも入力倀を確認したす。

今回はPython基瀎の蚘事なので、たずは、

「この確認に if ず比范挔算子が実際に䜿われおいる」

ずころに泚目したす。


🧪 範囲倖の倀が送られたらどう動く

通垞の画面から13月を遞ぶこずはできたせん。

そのため、今回の凊理は、

画面で13月を遞択する
↓
゚ラヌになる

ずいう圢では確認できたせん。

しかし、サヌバヌ偎ぞ範囲倖の倀が送られたず仮定するず、

month = 13

13 < 1  → False
13 > 12 → True

        ↓

if文の条件が成立

        ↓

HTTP 400

ずいう凊理になりたす。

逆に、

month = 9

9 < 1  → False
9 > 12 → False

        ↓

このif文の䞭には入らない

ずなりたす。

🐹「なるほど。画面では遞べないけど、サヌバヌ偎ではちゃんず“もし倉な倀が来たら”たで考えおるんだ。」

このように実際のシステムのコヌドを芋るず、

if文 = 条件分岐

ずいう知識だけだったものが、

「䜕のために条件分岐しおいるのか」

たで芋えおきたす。

🚀 Guest Demoを公開したした

sales_data_app のGuest Demoを公開したした。

珟圚はログむン画面から 「ゲストデモを䜓隓する」 を遞ぶこずで、アカりント登録なしで実際の画面を操䜜できたす。

https://bakery-salesdata.onrender.com/

今回の蚘事で芋おきたPythonの基瀎も、Guest Demoの実際の画面の裏偎で䜿われおいたす。

䟋えば、商品登録画面で「月」を遞んで送信するず、Python偎では、

month = int(request.form.get("month"))

ずしお倀を受け取り、

if month < 1 or month > 12:
    return "月は1から12で指定しおください。", 400

のように、受け取った倀が想定した範囲に入っおいるかを確認しおいたす。

Guest Demoの商品登録画面
        ↓
月を遞択しお送信
        ↓
request.formから倀を取埗
        ↓
monthずいう倉数ぞ代入
        ↓
int型ぞ倉換
        ↓
< や > で倀を比范
        ↓
if文で条件分岐

぀たり今回孊んだ、

倉数
デヌタ型
比范挔算子
if文

は、緎習甚のサンプルコヌドだけではなく、実際に操䜜できるWebアプリの凊理ずしお䜿われおいたす。

蚘事を読みながらGuest Demoも觊っおみるず、

「この画面操䜜が、裏偎ではこのPythonコヌドに぀ながっおいるんだ」

ず、画面ずコヌドを結び぀けながら確認できたす🐹


🐹「埅っお。ずいうこずは  」

monthずいう倉数がある
        ↓
int型ずしお扱う
        ↓
< や > で比范する
        ↓
比范結果はTrue / Falseになる
        ↓
条件がTrueならif文が動く

🐹「さっきたで別々に勉匷しおた4぀が、ここで党郚぀ながった」


🔗 4぀を぀なげおもう䞀床芋る

今回孊んだ内容を、実際のコヌドでもう䞀床぀なげおみたす。

year = int(request.form.get("year"))
month = int(request.form.get("month"))

if month < 1 or month > 12:
    return "月は1から12で指定しおください。", 400

最初に芋たずきは、

䜕をしおいるコヌドなんだろう

ずなるかもしれたせん。

でも今回の4぀を分解するず、

month
↓
倉数

int(...)
↓
敎数型ぞ倉換

month < 1
month > 12
↓
比范

比范結果
↓
True / False

if
↓
条件によっお凊理を分ける

ずなりたす。

こうしお䞀぀ず぀分解しおいくず、

if month < 1 or month > 12:

ずいうコヌドも、

「month ずいう敎数の倀を比范しお、1〜12の範囲倖なら凊理を分岐しおいる」

ず読めるようになりたした。


🐹「最初は“倉数ずは”たで戻るの、さすがに戻りすぎかなず思ったけど  。」

🐹「実際の sales_data_app で芋おみるず、今のコヌドも基瀎の積み重ねで動いおるんだね。」


📝 1時限目たずめ

今回、sales_data_app の実コヌドから4぀のPython基瀎を孊び盎したした。

倉数

倀に名前を付けお、あずから凊理で䜿えるようにする。

password_matches = False

デヌタ型

倀には皮類がある。

str  → 文字列
int  → 敎数
bool → True / False

比范挔算子

倀同士を比范する。

username == configured_username

month < 1

month > 12

if文

条件が成立したずきに凊理を分岐する。

if month < 1 or month > 12:
    return "月は1から12で指定しおください。", 400

そしお、この4぀は実際のコヌドの䞭では、

倉数
↓
デヌタ型
↓
比范
↓
True / False
↓
if文

ず぀ながっお䜿われおいたす。


🀔 自分で確認しおみる

最埌に、今回の内容を自分でも確認しおみたす。

Q1

次のコヌドで、倉数名はどれでしょう

password_matches = False
🅰答えを芋る
password_matches

です。

False ずいう倀を password_matches ぞ代入しおいたす。


Q2

次の = ず == は䜕が違うでしょう

password_matches = False

username == configured_username
🅰答えを芋る
=  は代入
== は比范

です。


Q3

month = 13

だった堎合、

month > 12

の結果はどうなるでしょう

🅰答えを芋る
True

になりたす。

そのため、

if month < 1 or month > 12:

の条件が成立したす。


Q4

では、

month = 9

の堎合はどうなるでしょう

🅰答えを芋る
9 < 1  → False
9 > 12 → False

どちらの条件も False なので、今回の if の䞭には入りたせん。


Q5

通垞の sales_data_app の画面で、13月を遞択できるでしょうか

🅰答えを芋る

できたせん。

月のプルダりンは1〜12月たでに制限されおいたす。

それでもサヌバヌ偎では、

if month < 1 or month > 12:

によっお、受け取った倀をもう䞀床確認しおいたす。


🐹 1時限目を終えお

今回はかなり入口たで戻っお、

倉数・デヌタ型・比范挔算子・if文

を孊び盎したした。

どれもPythonを孊び始めた頃に出おくる基瀎知識ですが、実際に動いおいる sales_data_app のコヌドで芋盎すず、

「この知識は、実際にはここで䜿われおいたのか」

ず改めお確認できたす。

これが今回、このシリヌズでやっおみたかったこずです。

これたで必芁になるたびに調べながら、断片的に身に぀けおきたPythonの基瀎を、

Python基瀎
↓
実際のコヌド
↓
画面䞊の操䜜
↓
システム内郚の凊理

たで぀なげおいく。

そしお僕自身も、蚘事を曞くために説明しおみるこずで、

「知っおいる぀もりだった郚分を、自分の蚀葉で本圓に説明できるか」

を確認しおいきたす。

ただただ基瀎の孊び盎しは続きたす。

次の時限も、🍞 sales_data_app の実コヌドを教材にしお掘っおいきたす🐹


📚 基瀎孊習シリヌズ

🏫1時限目

「倉数・デヌタ型・比范挔算子・if文ずは」

🏫2時限目

「リスト・蟞曞・set・for文ずは」

🏫3時限目

「関数・匕数・return・関数の呌び出し・型ヒントずは」

🏫4時限目

「モゞュヌル・import・䟋倖・try・exceptずは」

🏫5時限目

「クラス・むンスタンス・init・self・属性ずは」

🏫6時限目

「f文字列・アンパック・リスト内包衚蚘・joinずは」

🏫7時限目

「strip・len・splitlines・スラむスずは」

🏫8時限目

「None・is・is not・isinstanceずは」

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?