LoginSignup
1
6

More than 5 years have passed since last update.

退屈なことはPythonにやらせるやつの演習プロジェクト〜コツコツとコラッツ数列〜

Last updated at Posted at 2019-01-20

退屈なことはPythonにやらせよう

image.png

はじめに

 最近プログラマの間で流行り? の良書である「退屈なことはPythonにやらせよう」.
 6章までのPythonチュートリアルも実に魅力的で,章末についている演習問題は,ノンプログラマー向けの復習問題としても役に立つだろう.
 そして演習問題のあとに鎮座しているのが「演習プロジェクト」.これが実に面白いと評判だが,問題なのはここから.

 そう,解答がない

 一部のプログラマや熟年プログラマならばパッと数学の解法のように思いついてしまうのかもしれないが,残念ながら貧相な私の知識と経験では思いつかないものもある.
 そのため,運良く思いついた一部の演習プロジェクトの回答をメモしていくものである.

注意

 この文章は薄くて軽い内容です.

略称?

 略称を募集中.
 個人的にブームなのは「退屈なことはPythonにやらせよう」,略して「退屈なPython」.この矛盾した感じがツボにはまったのだが,一部の人に怒られそうなのでやめておきたい.

3章演習プロジェクト「コラッツ数列」

 コラッツ数列の詳しい説明についてはWikipediaを参照.
 ものすごーく簡単にすると,任意の整数を選び,奇数であれば3をかけ1を足したものを返し,偶数であれば2で割る.返り値(プログラミングの便利な用語)で同様にして再帰的にやっていくといつの間にか1になってしまうという不思議な数列である.
 まだ未解決だとか.

 「ちょっと何言ってるかよくわからない」問題もあるこの書籍において,簡単な部類であろう.
 無限ループを作り,条件分岐をすればよい.

collatz.py
def collaz():
    print("整数を入力してください")
    try:
        number = int(input())
    except ValueError:
        print("整数値を入力してください")
    if number % 2:
        return number * 3 + 1
    else:
        return number / 2
print(collaz())

プログラム内に改善箇所があればご指摘お願いします.

追記

 一日以内に追記するという驚きのクオリティ.

collatz2.py
#関数の機能を一つずつにするため,関数を分けて作成.
#整数除算,数値以外の入力時エラー表示とともにプロンプト再表示.

def input_number():
    print("整数を入力してください")
    while True:
        try:
            num = int(input(">>"))
        except ValueError:
            print("Error! 整数を入力してください")
            continue
        break
    return num

def collatz(number):
    if number % 2:
        return number * 3 + 1
    else:
        return number // 2

print(collatz(input_number()))

 ご指摘くださったshiracamusさん,ありがとうございました.

1
6
5

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
6