Pythonのprint文をいろいろ調べました


大したことしていないので、ブランクが空くのはしょうがない

電卓叩いていた計算をプログラム化

ふと思い立つところがあって、今まで電卓叩いていた計算をPythonでプログラムにしてみました。言ってみれば草の根RPAですよ(別に偉そうにいうほどのものでもない)。

やりたいことは以下の通り。

  • 計算式はほぼ一定
  • 変数は4つで、ただの掛け算
    • 値段
    • 掛け率
    • 数量
    • 消費税率
  • 計算結果は支払先にメールでお知らせ
    • 数値をはめ込んだ計算式、計算結果、その他の情報と一緒に、送る文面も生成したい
  • 数値は3桁ずつ区切りたい

変数にした諸情報をコードの中に書き込むのか、inputで入力するのかは、どっちがいいのか思案中。計算に使う数値はインプットして、文字の入力はコードの中に書くようにしています。

遠い将来は入力値をDBに追加したり、そのDBから引っ張って変数に代入したりしたいですが、今はあまり考えますまい。

で、ひと通り作って、自分の仕事にも使えそうだというところまで確認。

そこで、今回の「身に付いたこと」です。主にprint文で文字や数値を表示するときの取り扱いに関して。

①空き行はprint()で

確認かたがたコードに書き込んだ情報をまず表示するようにしました。計算結果を含むお知らせ文章との間を空けるのにprint()を使いました。やっぱり最初はそういうことにも悩むよね。

なお、3行空けたかったので、ついでにfor文もおさらいすることにして、

# 空き行挿入
for i in range(2):
    print()
と書きました。range()の書き方もprint()の書き方もいちいちググらないと正しく書けません(>_<)。

②数値を3桁で区切ってprint

print文の中で10万円単位の金額を取り扱います。7桁になることは滅多にありませんが、通常6桁にはなる。やはり3桁で区切りを入れたいところです。

調べたところ、print('{:,}'.format(onedan))で3桁区切りになるらしいとのことでした。実際にはonedanのところは計算結果を小数点以下なしで表示するためにint文で整数に直しています。ここも少々はまりポイント(後述)。

で、print('お値段は……', '{:,}'.format(onedan), '円です♪')とやったところエラーになったので、パラメータの先頭に入れたら解決しました。ところがこれだと

お値段は……
999,999 円です♪

となってしまったので、この2行をつなげなければなりません。

③複数のprint文を改行なしでつなげるend

それにはprint文を複数並べても、行を変えずに表示する必要があります。調べたらやはりありました。print文の引数の最後に, end = 'ほにゃらほにゃら'と付けると、ほにゃらほにゃらの後ろに次のprint文が続くそうです。

自分のコードでいうと、

print('お値段は……', end = '')
print('{:,}'.format(onedan), '円です♪')
で、

お値段は…… 999,999 円です♪

と返って来ます。でも、今それを確認しようと

print('お値段は……', '{:,}'.format(onedan), '円です♪')
とやってみたら、ちゃんと表示されました。最初にエラーが出たときは、きっと何かをやらかしていたのに違いない。でも、今となってはそれが何だったのか…。とんだ遠回りになってしまいましたが、endを覚えたのでヨシとします

④数値型はそろえないと計算できない?

調べてませんが、エラーが出たので覚えたこと。ほとんどの計算は値が整数なので、変数の数値型には気を配らずにプログラムを作っていたのですが、テスト中に掛け率が小数になるケースもあることを思い出しました。で、3.5とか入れるとエラーになります。

すると、3.5を格納する変数をfloatで代入するだけじゃだめなんですね。これを使う計算式で取り扱う変数全部をfloatにしとかないといけないんですね←確かめてないけど、そうなったからそうなんだと理解。

ん? とよくコードを見直してみたら、必ずしもそろってない…。ありゃあ、またエラーの原因を早合点したかなあ…。数値の型については宿題にしておきます。

#調べてる時間がなくなってしまった…

相変わらず入門レベルですが、何か勉強したらまたまとめます。