はじめてのPythonお勉強会~入力~【第3回】

2018/12/20


ほんの好奇心と作りたいものができてしまったので、Pythonをお勉強していくシリーズ。

明確に作りたいものをイメージしているので、それに沿ったお勉強をしていきます。ほんの少しC言語をかじったことがあるので、プログラムでよく使う言葉を突然使用したり、知っているところをすっ飛ばしながらやっていきます。

今回は入力です。入力した値を使って計算したりします。

基礎編

今回は入力した値を取り扱います。

入力して表示

入力にはinput("入力時に表示する文字列")を使います。
入力した文字列を保存しておく変数名をmojiとして入力した文字をそのまま表示するプログラムを作ります。

moji=input("入力してください")
print(moji)
実行結果

入力してください

実行してみると「入力してください」と表示されますので、何か文字を入力します。
今回は「あいうえお」と入力後にEnterを押したことにします。

実行結果

入力してくださいあいうえお
あいうえお

このように、入力したものを表示できました。

入力して計算

今度は数値を入力して、計算してみます。
変数名は文字ではないので、suuchiに変えておきましょう。

また、任意の文字列と変数を同時にprintで表示しています。

suuchi=input("数値を入力してください")
print( "入力したものは" + suuchi + "です")
print(suuchi + str(2))
print(int(suuchi) + 2)

入力した文字列は、数値でも文字列として扱われています。
文字列同士は、+を間に挟むことによって、連続して表示が可能です。

3行目は入力した値の後ろに「2」を表示させたものです。suuchiは文字列であるので、連続して表示するためには「2」を文字列として扱わなければエラーになってしまいます。
そこでstr(2)とすることで、文字列として「2」を表示することができます。

4行目ではint(suuchi)と記入してint型(整数を扱う型)として扱えるようにして、入力した値に2を加算できるようにしています。

以下は、「3」を入力した結果です。

実行結果

数値を入力してください3
入力したものは3です
32
5

発展編

上記のプログラムで、数値でないものを入力してしまったらエラーになってしまいます。また、小数点を含む数値でも計算が合わなくなります。
そこで、整数か判別するisdigit()をいれてエラーが出ないようにします。

まずは入力した値が整数か判別するだけのプログラムを作ります。
整数なら"True"それ以外なら"False"を表示します。

入力した値が整数か判別する

suuchi=input("整数を入力してください")
print(suuchi.isdigit())

半角の"1"、全角の"1"、文字"あ"を入力した結果が以下です。

半角の"1"

整数を入力してください1
True
全角の"1"

整数を入力してください1
True

文字"あ"

整数を入力してくださいあ
False

さらに、小数点を含む数値"1.25"、負の値"-6"も見てましょう。

小数"1.25"

整数を入力してください1.25
False
負の値"-6"

整数を入力してください-6
False

このようにきちんと整数の値の時に"True"と表示してくれます。

入力した値が整数なら2を足す

以下ではifと組み合わせて、整数なら2を足し、それ以外なら「整数ではありません」と表示するようにしました。

suuchi=input("整数を入力してください")
if suuchi.isdigit():
   print(int(suuchi) + 2)
else:
   print("整数ではありません")
4

整数を入力してください2
4

整数を入力してくださいあ
整数ではありません

ifは今後きちんと取り上げますが、条件に合っているかどうかを振り分けています。

実践

今回の記事で使ったinputisdigit()ifを使って、入力した値でポケモンの経験値を計算します。

現在のLvから次のレベルに上げるまでに必要な経験値を計算する

今回は「100万タイプ」のみです。
ポケモンのレベルには小数点はありませんので、整数のみの入力で問題ありません。
nowlvに現在のレベルを入れ、nextexpに次のレベルに上げるために必要な経験値を入れて表示します。

nowlv=input("100万タイプのみ\n現在のポケモンのレベルを入力してください")

if nowlv.isdigit():
   nextexp=(int(nowlv)+1) ** 3 - int(nowlv) ** 3
   print("現在はLV:" + str(nowlv) + "\n次のレベルまで" + str(nextexp))
else:
   print("整数ではありません")
表示結果

100万タイプのみ
現在のポケモンのレベルを入力してください25
現在はLV:25
次のレベルまで1951

一度、intとして扱った数字を文字として表示したいときはstring型に戻して表示しましょう。

目標レベルまでの経験値を計算する

上記のプログラムをもう少し使いやすくしていきます。レベル上げをする時に、次のレベルになるために必要な経験値をぴったり手に入れることはほぼないと思います。
次のレベルになるために必要な経験値はゲーム上で見えるので、2レベル上げるために必要な経験値を算出してみます。100万タイプ限定です。

入力する値は以下とします。

トサキント(100万タイプ)
現在レベル:25
次のレベルまであと:5
nowlv=input("100万タイプのみ\n現在のポケモンのレベルを入力してください。:")

if nowlv.isdigit():
   targetlv=int(nowlv) + 2
   nowexp=input("次のレベルまでに必要な経験値を入力してください。:")

   if nowexp.isdigit():
      nextexp = targetlv ** 3 -(int(nowlv)+1) ** 3
      nextexp += int(nowexp)

      print("現在LV:" + str(nowlv) + "\n次のLVまで:" + str(nowexp) )
      print("目標LV:" + str(targetlv) + "\n目標LVまで:" + str(nextexp) )

   else:
      print("整数ではありません")

else:
   print("整数ではありません")
nowlv:現在のレベル(入力)
nowexp:次までに必要な値(入力)
targetlv:目標Lv(今回は27)
targetlv31から目標Lvに上がるための経験値合計(今回は27)
(int(nowlv)+1)31から目標Lvに上がるための経験値合計(今回は26)
nextexp:必要な経験値の合計

9行目「+=」は今回初めて使いました。
a += b
とあったら、「もとのaの値にbを足したものをaとする」ということになります。
a = a + b
と同じというわけです。

ここからは順を追って何をしているのかを説明していきます。文章冒頭の番号は上記の行番号に対応しています。

1nowlvに値を入れます。今回はは"25"です。
3整数じゃなければ→17(「整数ではありません」と表示してプログラム終了)

4targetlv(目標レベル)=nowlv(25) + 2 = 27

5nowexp(次までの値)を入力します。今回は"5"です。
7整数じゃなければ→14(「整数ではありません」と表示してプログラム終了)

8nextexp = targetlv3 – (int(nowlv)+1)3
(273 = 19683) – (263 = 17576) = 2107

9nextexp(2107) + nowexp(5)= nextexp(2112)

11入力した値の確認用出力
12計算した値の出力

正しく入力すれば以下のように表示されます。

表示結果

100万タイプのみ
現在のポケモンのレベルを入力してください。:25
次のレベルまでに必要な経験値を入力してください。:5
現在LV:25
次のLVまで:5
目標LV:27
目標LVまで:2112

ようやく使えそうなプログラムになってきました。
今回はここまでです。

前回