CodeKata第一問 : FizzBuzz @Python3.4

今日からpythonの練習課題として、ひとつずつ問題を解き、同時にそのコードと解説をブログに綴ってみようと思います。。。

もっといい書き方がある!って思った方は教えてください(^_^;)

 

それでは始めてみましょう!

第一回目のお題は「FizzBuzz

 

問題


 1から順番に数を表示する。その数が3で割り切れるなら"Fizz"、5で割り切れるなら"Buzz"、両方で割り切れるなら"FizzBuzz"と表示する。要するに"1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz ・・・"と出力される。

プログラマかどうかがわかるんだとさ...(-_-;)

実行例 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34

 

 

考え方


つまり3の倍数の時は"Fizz"、5の倍数の時は"Buzz"、15の倍数の時は"FizzBuzz"と表示すればいいので、単純に数字をひとつずつif文で判断していけばいいかと思います。

 

 

コード



def fizzbuzz(num):
    ret = ""
    for i in range(1, num + 1):
        if i % 3 == 0:
            ret += "Fizz"
        if i % 5 == 0:
            ret += "Buzz"
        if (i % 3 != 0) and (i % 5 != 0):
            ret += str(i)
        ret += " "
    return ret


if __name__ == "__main__":
    print(fizzbuzz(50))

 

 

解説


今回は、1から引数に取った値までを判定する関数、fizzbuzzを作成しました。

この関数は、単純に1~引数までの値を順にif文で判断しているだけですので解説することはほぼありません...(^_^;)

強いて言えば、if文に少し工夫を加えたところぐらいでしょうか

つまり、本来ならば15と3と5とそれ以外を判断するには、下記のように条件式が4つ必要になります。


if (i % 3 == 0) and (i % 5 == 0):
    ret += "FizzBuzz"
elif i % 3 == 0:
    ret += "Fizz"
elif i % 5 == 0:
    ret += "Buzz"
else:
    ret += str(i)
ret += " "

しかし、今回は、下記のようにあえてelif,elseを用いずにifのみで条件式を3つで済ませました。


if i % 3 == 0:
    ret += "Fizz"
if i % 5 == 0:
    ret += "Buzz"
if (i % 3 != 0) and (i % 5 != 0):
    ret += str(i)
ret += " "

このように記述することで、iが15の倍数であった時は「if i % 3 == 0:」と「if i % 5 == 0:」の中身が両方実行され、”FizzBuzz "という文字列になります。

 

 

今回使用した要素



>>> 4 % 2    4を2で割った時のあまりを求めることができます
0

>>> a = 3
>>> a += 2    変数aに2を足すことができます
>>> a
5

python3.4 pafyモジュールの覚書

pafyモジュールを使ってみたかったので、ドキュメントの内容を適当に訳してみました。


〜〜以下ドキュメントの内容~~

import pafy
url='https://www.youtube.com/~~~~~~'

#pafyのインスタンスを作る

video=pafy.new(url)


"""
pafy.new(video_url[, basic=True][, gdata=False][, signature=True][, size=False][, callback=None])

パラメータ※デフォルト値が推奨
url(str)
→動画のURLまたはvideoIDを指定

base(bool)
→True:初期設定。基本的なメタデータとストリームを取得
→False:メタデータとストリームを取得しない

gdata(bool)
→False:初期設定
→True:アップロード日、説明、カテゴリ、ユーザー名、like、dislikeなどのgdata情報を取得する

signature (bool)
→True:初期設定
→False:設定しても意味はない(今後のバージョンで削除予定

size(bool)
→False:初期設定
→True:それぞれのストリームのサイズを取得

callback(function)
→ステータスの文字列を受け取るための関数

戻り値→pafyクラスのインスタンス
"""

#インスタンス「pafy.new(url)」のアトリビュート

#ビデオの作者(str)
print(video.author)

#サムネイルのURL(str)
print(video.bigthumb)

#大きいサムネイルのURL(str)
print(video.bigthumbhd)

#動画のカテゴリー(str)
print(video.category)

#動画の説明(str)
print(video.description)

#動画のdislike(int)
print(video.dislikes)

#動画のslike(int)
print(video.likes)

#動画の再生時間「HH:MM:SS」(str)
print(video.duration)

#動画のキーワード(list)
print(video.keywords)

#動画の再生時間「秒単位」(int)
print(video.length)

#動画の公開日「2010-10-12 21:40:19」(str)
print(video.published)

#動画の評価「0-5」(float)
print(video.rating)

#小さいサムネイルのURL(str)
print(video.thumb)

#動画のタイトル(str)
print(video.title)

#動画のアップロード者の名前(str)
print(video.username)

#動画の11文字のID(str)
print(video.videoid)

#動画の再生回数(int)
print(video.viewcount)

 

#stream型のリストを返すインスタンス「pafy.new(url)」のアトリビュート

#映像と音声両方を含むストリーム
print(video.streams)

#音声のみのストリーム「.m4a .oggなど」
print(video.audiostreams)

#映像のみのストリームのリスト
print(video.videostreams)

#オーディオストリームにエンコードされたogg vorbisのリスト
print(video.oggstreams)

#ビデオストリームにエンコードされたaccのリスト
print(video.m4astreams)

#利用可能なすべてのストリームのリスト
print(video.allstreams)

 

#pafyインスタンスメソッド

#pafyインスタンスで指定された動画の最高画質のストリームにアクセスするためのメソッド

#映像、音声つきの最高の解像度を持つstream型を返す
stream_1=video.getbest()
print(stream_1)

#最高のビットレートの音声のみのstream型を返す
stream_2=video.getbestaudio()
print(stream_2)

#映像のみの最高解像度のstream型を返す
stream_3=video.getbestvideo()
print(stream_3)

 

"""
Pafy.getbest([preftype="any"][, ftypestrict=True])
Pafy.getbestaudio([preftype="any"][, ftypestrict=True])
Pafy.getbestvideo([preftype="any"][, ftypestrict=True])
パラメータ
preftype(str)
→優先するファイル形式。選択した形式でstream型を返すmp4、webm、flv、3gpなど。

ftypestrict(bool)
→True:初期設定
→False:preftypeで選択されたファイル形式の最高画質よりも高い画質を持つ他の形式があった場合、
他の形式の最高画質のstream型を返す

戻り値→stream型
"""

 


#ストリームのアトリビュート

#ストリームへのダイレクトアクセスURL。wgetcurlで動画をダウンロードするために使用することができる(str)
print(stream_1.url)

#ストリームへのダイレクトアクセスhttps URL。(str)
print(stream_1.url_https)

#ストリームのビットレート。オーディオストリームのみ対応。「256k」(str)
print(stream_2.bitrate)

#ストリームの解像度。ビデオストリームのみ対応。「(640, 360)」(tuple)
print(stream_1.dimensions)

#ストリームの拡張子(str)
print(stream_1.extension)

#ストリームのメディアタイプ「"normal","audio","video"」(str)
print(stream_1.mediatype)

#ストリームの品質。videoであれば解像度「820x640」(str)、audioであればビットレート
print(stream_1.quality)

#ストリームの解像度「820x640」(str)。オーディオストリームの場合「0x0」となる(str)
print(stream_1.resolution)

#オーディオストリームのビットレート(int)
print(stream_1.rawbitrate)

#ストリームが3D映像であるか否か(bool)
print(stream_1.threed)

#ストリームのタイトル。インスタンスのtitle属性と同様
print(stream_1.title)

#ストリームに関する追加の注意事項(6チャンネルサラウンドなど)(str)
print(stream_1.notes)

 

#stream型のメソッド

#ストリームのファイルサイズを返す
filesize=stream_1.get_filesize()
print(filesize)

#ストリームのダウンロード
stream_1.download()


"""
Stream_1.download([filepath=""][, quiet=False][, callback=None][, meta=False][, remux_audio=False])
パラメータ
filepath(str)
→ストリームを保存する場所を指定

quiet(bool)
→False:初期設定
→True:ダウンロードの進行状況を出力しない

callback(function or None)
→ダウンロードの進捗状況を受け取る関数を記載できる

meta(bool)
→Falese:初期設定
→True:videoIDとitagをファイル名に追記する

remux_audio(bool)
→False:初期設定
→True:リマックスオーディオファイルをダウンロードする場合

戻り値→(str)
"""

virtualenvとvirtualenvwrapperをインストール

User Guide — virtualenv 13.1.2 documentation

インストール — virtualenvwrapper 3.5 documentation

↑を参考にしました。

 ちなみに環境はUbuntu14.04、Python3.5.0です。

virtualenvをインストール

sudo pip3 install virtualenv

 

virtualenvwrapperをインストール


    sudo pip3 install virtualenvwrapper
    若しくは
    sudo apt-get install virtualenvwrapper

 

.bashrcにvirtualenvの設定を追記

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh     #sudo find / -iname "virtualenvwrapper.sh" -lsで場所を検索

追記し終わったら

source ./.bashrc

 

virtualenvwrapperで新しい環境を作る

mkvirtualenv [名前] --python /usr/bin/python3

 

virtualenvwrapperで環境に入る

workon [名前]

 

virtualenvwrapperで環境を削除

rmvirtualenvwrapper [名前]

 

virtualenvwrapperで環境から出る

deactivate


virtualenv環境でpipを使用するときは
suduをつけない

ubuntuにpycharmをインストールする

ubuntuの環境が壊れて、再インストールするはめになったので、備忘録的な感じでpycharmのインストール方法を書いておくことにします。

まず、pycharmはJavaで動くので、起動するにはJDK(Java Development Kit)が必要になります。
とりあえず、そいつをインストールします。

端末を開いて以下のコマンドを実行。

sudo apt-get install openjdk-8-jdk

そうすると、JDKがインストールされます。

次はpycharmの公式(https://www.jetbrains.com/pycharm/)からpycharm-community-4.5.3.tar.gzをダウンロードします。

ダウンロードが完了したら端末から以下のコマンドを実行してファイルを解凍。

tar xfz pycharm-community-4.5.3.tar.gz

解凍が済んだら、端末からpycharm.shを起動させましょう。

./pycharm-community-4.5.3/bin/pycharm.sh

これでpycharmが起動します。


pipをインストール
↓参考サイト
https://pip.pypa.io/en/latest/installing.html

python2系にpipをインストール

sudo apt-get install python-pip


→実行コマンドはpip

pip search [名前]/code>


などなど

python3系にpipをインストール

sudo apt-get install python3-pip


→実行コマンドはpip3

pip3 install [名前]
pip3 search [名前]


などなど

次にGitをインストール(使う人だけでおk)

sudo apt-get install git

window上部のメニューのVCSから→Checkout from Virsion Control→GitHub
とクリックしてGitHubにログイン