現在簡単な問題を解くことをやっていますが、以下のコードで一応通りましたが、どうもぎこちない感じがしてなりません。
python
1x = input().split(" ") 2x0=int(x[0]) 3x1=int(x[1]) 4count=0 5for i in range(0,10): 6 print(x0,end="") 7 x0+=x1 8 count+=1 9 if 10>count: 10 print(" ",end="") 11 12
もうちょっとこう・・・スッキリ各方法もあるのかなと思いますが、どのような書き方がベストなんでしょうか?
また、組み立てる上での思考順序とかももしありましたらご教授お願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
python
1x0, x1 = map(int, input().split()) 2results = (x0 + x1 * i for i in range(10)) 3print(*results)
投稿2017/05/24 04:45
総合スコア6142
0
range
にそもそも等差数列を作る機能がある- 文字列のリストを任意の区切り文字で結合する事ができる
python
1x = input().split(" ") 2start=int(x[0]) 3diff=int(x[1]) 4print(" ".join(map(str,range(start, start+diff*10, diff))))
投稿2017/05/24 02:38
総合スコア13512
0
同様の情報を分散させることは一般的にプログラムの無用な複雑化につながりバグの原因にもなるので避けた方がよいと思います。論理を考える上での規範の一つといってよいでしょう。coco_bauerさんの回答はそういう観点での指摘ですね。
同じ結果を得るためのアルゴリズムにはいくつものバリエーションがあります。それはコードをどうしたいかの観点により選択基準も違います。好みもあるでしょう。
例えばcountを除くとしてiによってどういう判定をするかについてもいくつか考えられます。元のコードでは「最後の要素の後ろにはスペースは印字しない」でしたが、それは「最初以外の要素の印字の直前にスペースを印字」するという方が分かりやすく感じる向きもあるでしょう。「最初以外」という境界条件の方が間違えにくいからです。ループを10回にしても20回にしても「最初以外」という条件判定は変える必要がないという点もポイントです。
さらに、最後の印字結果の次の値の計算を無駄に行っていることが気になる場合もあるかも知れません。加算なんてのは大したことない処理時間なので気にしなくてもいいですが、これが計算時間がかかる処理だったらどうでしょうか。気にするんじゃないでしょうか?
そんなことを考えると次のようなコードの方が好ましい場合もあります(これが一番よいわけではありません。あくまで一つの例です)。x0をprintする箇所が2か所になっている点は「好ましくない」と感じますが、ループの中が最小限の処理内容になっている点(条件判定もない点)さらには印字(出力)するのに必要最小限の計算を行っている点は「よい」と感じます。
python
1x = input().split(" ") 2x0 = int(x[0]) 3x1 = int(x[1]) 4print(x0,end="") 5for i in range(0,9): 6 x0 += x1 7 print("",x0,end="")
こういうちまちました点を細かく考えるというのは大部のコードを書くようになってから一々やっていたのでは時間がかかりすぎます。多くのプログラマーはそんな細かな点を一々考えずに書いていると思います。ただ初心者のころから多くの論理を書いてきた経験によって「ちまちま考えなくてもよりよいスタイルが自然に出てくる」ようになっているので実際にはちまちま考えません。ベテランになって「息をするようにコードが出てくる」人もいるでしょう。そういう人は多くの時間を訓練に費やした人だと思います。(自分はそんな域には全然達していませんのではっきりとはわかりませんが・・・)
質問者さんはまだ論理を組むこと自体を練習している段階ですので人から聞くのはまだまだ早いと思います。自分でコードをいろいろいじって経験を積む(考える訓練をする)方が得るものは大きいのではないでしょうか。
投稿2017/05/24 02:33
総合スコア18392
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/24 02:42
2017/05/24 03:02
0
変数 i は、for-in 文にあるだけで、それ以外のところで使われていません。
また、コードを追っていくと、変数 count と変数 i は同じ値になっている事が判ります。
こうした観測から
countは要らないのではないか(iで代用できるのではないか)
という改善策が思いつきませんか?
質問のコードからcountを外してみると、すっきり。
x = input().split(" ") x0=int(x[0]) x1=int(x[1]) # count=0 「countは使わないので、削除」 for i in range(0,10): print(x0,end="") x0+=x1 # count+=1 「countは使わないので、削除」 # if 10>count: 「countの代わりにiを使うので、書き換え」 if 10>i: print(" ",end="")
投稿2017/05/24 01:23
総合スコア6915
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。