第11回【Python】N が M ずつ増えたときにいつ K を越える?、毎日増加するお金

現在取り組んでいるのは、paiza ラーニング問題集「ループメニュー 2」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

Python をゼロから勉強してみよう、のコーナー 11 回目です。

野球が無い季節は野球のことを思いながら過ごしています。シーズン終わった直後からキャンプインを楽しみにしている LeoSaki(旦那)です。

それでは、今日も頑張ってみようと思います。

N が M ずつ増えたときにいつ K を越える?

整数 N, M, K が与えられます。
N が M ずつ増えるとき、何回目に K を越えるか出力してください。

Python の標準入力からの値の受け取り方が素敵だ。受け取りと分割を 1 行で書けるのが。

Python
N,M,K = map(int,input().split())
ans = 0
while N <= K:
    N += M
    ans += 1
print(ans)

シンプルですよね。

この問題ではないのだけれど似たような状況で、とある知り合いに、N が K より大きくなるまでって書かれてるのだから、N が K より大きくない間ってことで、while not N > K じゃダメなんすかね? って言われたことがある。確かにその通り、と思って調べてみたら、while not 構文っていうのもあるようだ。

Python
N,M,K = map(int,input().split())
ans = 0
while not N > K:
    N += M
    ans += 1
print(ans)

なんか、こっちの方が日本語的にわかりやすいかもしれない。

さて、VBA でも書いてみる。

VBA
A = Split(Cells(1, 1), " ")
N = Val(A(0))
M = Val(A(1))
K = Val(A(2))
ans = 0
Do While N <= K
    N = N + M
    ans = ans + 1
Loop
Debug.Print ans

やはり、Python のようにスマートに書くことはできないけれど、コード自体は似たようなものになる。

毎日増加するお金

現在所持金を A 円持っています。
所持金が毎日 10% ずつ増えるとき、何日後に B 円を超えるか出力してください。
また、増加するお金は小数点以下切り捨てで考えることとします。
例として、所持金が 831 円 のとき、10% は 83.1円 ですが、増加するお金は 83 円 です。

マジですか。LeoSaki(旦那)の所持金も 10 % ずつ増やしてもらえませんか? とにかくコードを書いて、今の所持金が希望額に到達するまでの日数を調べてみたい。

Python
A,B = map(int,input().split())
ans = 0
while not A > B:
    A = int(A * 1.1)
    ans += 1
print(ans)

一度覚えたことは、積極的に使ってみよう。while not 構文。使って自分のものにしていって、その中で問題が発生したら、再度調べ直す。

paiza の解答例で while not 構文を見ないということは、もしかしたら致命的な問題が隠れているのかもしれない。でも、経験するまでは気づくことができないもの。

現状、ここまでは問題は発生していないので、積極的に使ってみる所存です。

さて、毎日増加するお金は、スタートが小さいとなかなか増える実感がないのだけれど、時間経過と共に、とてもお金が増えていくことがわかった。VBA でも書いておいて、エクセルという身近なツールで机上の計算を楽しんでみよう。

VBA
S = Split(Cells(1, 1), " ")
A = Int(S(0))
B = Int(S(1))
ans = 0
Do While Not A > B
    A = Int(A * 1.1)
    ans = ans + 1
Loop
Debug.Print ans

最後に

普段、VBA を利用するときには、option explicit を必須としている。なんでも入ってしまう入れ物って気持ち悪くないですか? それが、Python を敬遠していた理由の一つでもあった。

「型が一致しません」で怒られるパターン。

VBA
Dim S As String, L As Long
S = "test"
L = S
Debug.Print L

同じことを Python でやってみる。普通に成功するパターン。

Python
S = "test"
L = 813813
L = S
print(L)

最近は、しっかりと Python に向き合って学習しているため、あまり気にならなくなった。もちろん、型を意識しなくなくなった、という意味でなく。型は大事。

辻内くんは残念だった。一軍でその投球を見てみたかった。肩は大事。

引き続き、お付き合いよろしくお願いいたします!

Python学習,Python,paiza

Posted by LeoSaki