python勉強5日目 辞書/while文

これは僕が最高のエンジニアになるまでの物語だ。

辞書(disc)

辞書はリストの値に名前を付けて、管理しやすくしたようなもの。
名前をkey、値をvalueという。

辞書名(変数) = {key1:value1, key2:value2,}

といった感じで使う。リストとは違い、波括弧であることに注意だ。
特定のvalueを取り出したい場合は「変数名[key]」と指定する。

具体的には

yatai = {”焼きそば”:300, “かき氷:100”,”フランクフルト”:200,}
print(yatai[”焼きそば“])
# 300

といった感じだ。

while文

while文は条件を満たし続ける限り、処理を続けることができる制御構文。
注意しないと無限ループになる危険性を孕んでいる。

while文を利用してコラッツ予想(全ての数は、ある規則に則って計算し続けると必ず「1」に収束する。ある規則とは、その数が奇数であれば3を
掛けて1を足し、その数が偶数であれば2で割る)の任意の数から1になるまでの計算回数を求めるコードを書いてみる。

まず、任意の数を簡単に扱うため変数に代入する。
変数名はそうだな、コラッツなので「collatz」としよう。そして任意の数は今回は25としよう。
ここまでコード化すると以下のようになる。

collatz = 25

次に計算回数を求める(カウントする)ため、計算するごとに+1増やす(ための)変数を用意しよう。
変数名は「カウントする」ということで「count」とし、最初の段階では1回も計算していないため0を代入する。

ここまでをコード化するとこうなる

collatz = 25
count = 0

コラッツ予想は、1になるまで計算を続けるというもの。
言い換えれば任意の数(変数)が1でない限り(間)処理を続けるというコードを書く。
「1で”ない”」(否定)ということはnot演算子だ。つまり「!=」だ。

コード化するとこうなる

collatz = 25
count = 0
while (collatz != 1):


次は「偶数とは何か」「奇数とは何か」をコンピューター的に考える(定義する)

偶数は2で割った時に余りがでない数(余りが0となる数)、奇数は2で割った時に1余る数。

ということは、余りを求める演算子と、等しいを表す演算子(「==」)を使うことで奇数か偶数かを判定することが出来る。

余りを求める演算子は「%」だ。
そして奇数なら3を掛けて1を足す、偶数なら2で割る、と処理が分かれる。処理が場合によって分かれるということはif文だ。

よって、コード化するとこうなる

collatz = 25
count = 0
while(collatz != 1):
    if(collatz % 2 == 1):
        collatz = collatz * 3 + 1
    else:
        collatz //= 2

while文(一行目とする)から日本語に訳すと

collatsの値が1でない間、以下の処理を行う:(一行目)
もしcollatsの値を2で割って1余るなら(二行目)
collatzの値に3掛けて1足したあと、collatsに最代入する。 (三行目)
そうでない(2で割って余りが0)なら(四行目)
collatzの値を2で割ったあと、collatsに再代入する(五行目)

ここでようやく、計算を1回(+1回)したことになるので変数countに+1追加するコードを書く。

collatz = 25
count = 0
while(collatz != 1):
    if(collatz % 2 == 1):
        collatz = collatz * 3 + 1
    else:
        collatz //= 2
    count += 1

最後に、計算した(つまりカウントした)回数を出力するためのコードを書けば完了だ。

collatz = 25
count = 0
while(collatz != 1):
    if(collatz % 2 == 1):
        collatz = collatz * 3 + 1
    else:
        collatz //= 2
    count += 1
print(count)
#23



この記事が気に入ったらサポートをしてみませんか?