まずは思うがままに書いてみた
int = int(raw_input("Please enter an integer: ")) def do_fizz(int): if (int % 3) == 0: return 1 return 0 def do_buzz(int): if (int % 5) == 0: return 2 return 0 def do_answer(fizz, buzz): flag = fizz + buzz if flag == 0: print int #引数に居なくても外のintを参照出来る elif flag == 1: print "Fizz" elif flag == 2: print "Buzz" elif flag == 3: print "FizzBuzz" do_answer(do_fizz(int), do_buzz(int))ちょっと変わったことしたいなーとか思ってるうちに何も出来ずに完成するという例w
後から文言変えやすいようにしてみたつもり。
Pythonは変数のスコープは内から外が参照できるのでintを引数にしてなくてもprintの際は参照出来ます。
でコレ書いた後、「Pythonって三項演算子どうやるんだろ?」って思ったんで調べて使ってみた。
int = int(raw_input("Please enter an integer: ")) flag = range(2) #Listのデータを入れ替えるのに宣言しないと出来なかった… flag[0] = ((int % 3 == 0 and 1) or 0) flag[1] = ((int % 5 == 0 and 2) or 0) def do_answer(fizz, buzz): flag = fizz + buzz if flag == 0: print int elif flag == 1: print "Fizz" elif flag == print "Buzz" elif flag == 3: print "FizzBuzz" do_answer(*flag) #[fizz, buzz]のListが渡ってるついでに関数の引数をListで与える方法も試してみた。
ただこの場面での使い方があまりにもダサくてこれだったら普通に
fizz = ((int % 3 == 0 and 1) or 0) buzz = ((int % 5 == 0 and 2) or 0)って書いて渡した方がキレイですね。
phpの
$flag[] = (int % 3 == 0) ? 1 : 0; $flag[] = (int % 5 == 0) ? 2 : 0; $flag['fizz'] = (int % 3 == 0) ? 1 :0; $flag['buzz'] = (int % 5 == 0) ? 2 :0;みたいにいきなりList(配列)を作る書き方がPythonでも出来ると思うんだけど知識不足。
公式チュートリアルやったらどっかで出てくるかな?w
で最後はみんな大好き再帰。
折角なのでループ文を使わずに与えられたintまでの1からの和を出してみました。
num = int(raw_input("Please enter an integer: ")) def sum(num, answer = 0): answer = answer + num num -= 1 if num == 0: return answer return sum(num, answer) print sum(num)等差等級の和は方程式出るのでループ回さなくても解けるのでそっちも試してみた。
start = int(raw_input("Please enter an integer: ")) end = int(raw_input("Please enter an integer: ")) print (start+end)*(end-start+1)/2関数の定義すら要らなかったw
やっぱアルゴリズムの最適化が一番大事ってことですね!!
ということで帰りの電車の中で出来るPythonでした。
気軽に楽しめるのでみなさんもお好きな言語でどうぞ。
PEP8という、Pythonのコードを書く時のコーディング規約をご覧になると
返信削除もう少しだけハッピーになるかもしれません。
http://oldriver.org/python/pep-0008j.html
(原文の英語=最新のものを読むのがオススメですが。)
あと、3項演算子は
fizz = 1 if x % 3 == 0 else 0
と書くことができます。
また、listを一気に作るには
flags = [1 if x % 3 == 0 else 0, 1 if x % 5 == 0 else 0]
とすればできます。
ご参考になれば幸いです!
丁寧な解説ありがとうございます!
削除三項演算子やListの書き方はそんな書き方も出来るのですね。
とても参考になりました。
次回の岡山Python勉強会でみんなに伝えようと思います。
http://atnd.org/events/36438