LoginSignup
76
109

More than 5 years have passed since last update.

「自作Python100本ノック」1日目(はじめに〜5本目)

Last updated at Posted at 2018-05-07

はじめに

今回から「自作Python100本ノック」を始めていくのですが最初に、
「なぜやるのか?」
「どういう問題を対象にしているのか?」
「どの様に進めていくか?」
を簡単に整理しておきます。

なぜやるのか

1、エンジニアのサマーインターンのコーディング試験に受かるため
今まではなんとか基礎力を隠してこれたんですが、ついに誤魔化しが効かない壁が現れました。

2、生駒ちゃんが乃木坂46を卒業し暇になったから
急に毎日が退屈で暇になってしまいました。

3、これからPythonを勉強する様な人にとってちょうど良い問題集を作るため
ネットで検索すれば、Pythonの基礎的なコーディング問題はたくさんヒットしますが、
ページはバラバラ。難易度はバラバラ。「え?それいつ使うの?」という問題も多かったりと実用性もバラバラ。快適に勉強ができる環境ではないなと感じました。
そこで、それなら自分が色々なサイトを回って良いなと思ったものを寄せ集めて問題集を作れば、今度自分と同じ様な状況の人にとって役立つのではないかと思いました。
もちろん備忘録の意味もあります。

どういう問題を対象にしているのか?

問題は全て独断と偏見で選んでいますが、
実用性や応用性があるものを優先して集めるつもりです。

「最低限の知識(print,for文,if文,関数の使い方等)は勉強したから、ちょっとした問題解いてみたいな」

「CheckiOとかは難しすぎるから入門者向きのちょど良い問題ないかなあ。。。」

「解答がすぐ見れるやつが良いな。。」

という自分みたいな人が主な対象となるので、難易度もそこらへんになります。
CheckiOが1人でゴリゴリにできるという人は、クオリティ的にもCheckiOで鍛えることを強く勧めます。

どの様に進めていくか?

簡単でシンプルな問題から順に進めていきたいと思いましたが、
既に100問用意できているわけではないので、良さげな問題を見つけ次第どんどん投稿していこうと思います。
完成後余裕があれば、簡単な問題順に並び替えます。
外部から持ってきたものの出典は全て載せます。

解答は基本的に自分にとって1番わかりやすいものを載せようと思います。
「なにそのコード汚な」
「え。そんな面倒なことしてんの?それ、これ使えば1文で書けるよ。」
と思う人が多いと思いますが、
まだ自分は「コードはアートだ!」みたいな境地に辿り着いていないのでそこらへんはご了承ください。
美しい別の回答は、出典から確認してください。

作った問題集(解答がついていないバージョン)は今後まとめてGitHubに上げようと思いますので、まとめて解きたいという方はそちらを使ってください。(未定)
よろしくお願いします。

自作Python100本ノック(1本〜5本目)

Q1: 1から50までの和を計算して表示

基本です。
「おいおいこのレベルでやっていくのかよ。」と思われた方もそう焦らないでください。
まだ99本ありますから。
   

q1.py
s = 0
for i in range(1,51):
    s += i
print(s)

Q2: 1000以下の素数を計算して表示せよ

素数の性質を考えれば解けますね。
   

q2.py
for i in range(2,1001):
    for n in range(2,i): #2からその数より以前の数で割り切れないものが素数となる
        if i%n == 0:
            break
    else:
        print(i)

Q3: フィボナッチ数列(10個目まで)を表示せよ

1,1,2,3,5,8・・・・・・ってなるやつです(2つ前と1つ前の数の和になる数列)
こんなにシンプルに解けるとは驚きました。
   

q3.py
a = 0
b = 1
for i in range(10):
    print(b)
    a, b = b, a+b

Q4: 2つの自然数の最小公倍数/最大公約数を表示せよ

2つの数字を引数に渡すと、その2つの最大公約数と最小公倍数を計算して表示してくれる関数を作ってください。
まあ、でもこれは計算方法知ってないと初見では解けないですよね。

   

q4.py
#最大公約数
def gcd(a,b):
    if b == 0:
        return a
    else:
        return gcd(b,a%b)  #この方法で最大公約数が求められます。

a = 16
b = 6        
xab = gcd(a,b)
print(xab)

#最小公倍数
zab = a*b/xab  #この方法で最小公倍数が求められます。
print(zab)

[出典]Pythonのお勉強 問題集

Q5: 0から100の内3の倍数と3のつく数字だけ表示せよ。

世界のナベアツさんのネタと同じ原理です。
str()inを使う発想が好きです。
   

q5.py
#最大公約数
for i in range(0,101):
    if "3" in str(i) or 0 == i % 3:
        print(i)

[出典]data9824さん

感想

初めてQiitaでちゃんとした(?)ものを投稿させてもらいました。
問題のストックはまだあるんですけども、思ったより投稿が大変ですね。笑
まあ、投稿自体は頭使う必要ないので夜中にやるには良いかも。(なので投稿は夜中が多いと思います。)

レベル感は、今回のところを最低として進めていきます。
(最大公約数と最小公倍数のは初見殺し感あったので除く)

今後ともこんな感じで6本目以降も気力が持つまで続けていこうと思います。
本当にQiitaの自体初心者なので、「こうした方が良いよ!」とかその他感想とかありましたらなんでも励み、参考になるのでコメントしてもらえると助かります。
よろしくお願いします。
それでは!

2日目

76
109
3

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
76
109