とりあえず、コードを読みましょう。
コードを読むコツは、『一行レベルで、その行が何をしているかを考えながら読む』です。
Python
1# ユーザ入力から一つ、整数として受け取り、変数input_lineに入れる
2input_line = int(input())
3# [1,10)の範囲でループし、変数numに入れて処理していく
4for num in range(1, 10):
5 # input_line × num をして出力!
6 print(input_line * num, end=" ")
さて、一見問題なさそうですね。でもよーく見てください。print(input_line * num, end=" ")
の部分。
これはどういう意味でしょうか? 単に出力せよってこと? 違いますよね? 第二引数 end=" " は何でしょうか? そう、終端をどうするか的な意味ですね。
このコードからコメントの部分を抽出して疑似コードとしてみましょう。
[Flow.1]
1. ユーザ入力から一つ、整数として受け取り、変数input_lineに入れる
2. [1,10)の範囲でループし、変数numに入れて処理していく
2. input_line に numをかけて、その値を出力し、終端は " " (半角スペース)とする
さて、これを現実世界で、手作業でやってみてください。つまり、数学の解き方としてとか料理のレシピとしてみたいな感じでシミュレーションするのです。
たとえば、(1)で 10 という数字が入れられたとする。
すると、input_line = 10 になっているはずです。
で、(2)で [1,10)の範囲のループ。最初は1から始まる。なので num = 1 となっているはずです。
で、(2.1)に行くと、input_line * num = 10 * 1 = 10 となりますが、
終端は、半角スペースです。
わかりやすくするために、あえて 半角スペースを "_"と置き換えてみます。
すると、10_
となるはずです。
で、また(2)に戻ってnum = 2となる。
となる。で、(2.1)で input_line * num = 10 * 2 = 20 となる。
だが、終端は半角スペースです。よって、10_20_
となっているはずです。
…と繰り返していき、num = 9のとき、(2.1)で input_line * num = 10 * 9 = 90 となる。
だが、終端は半角スペース。
よって、10_20_30_..._80_90_
となる。
で、[1,10)の範囲なのでここで終了。
ということは結果は、10_20_30_..._80_90_
のようになっているはずです。途中の数字は省略していますが。
で、本来の結果と今回の結果を比較してみましょう。
本来: 10_20_30_..._80_90
今回: 10_20_30_..._80_90_
さて、何がおかしいでしょうか? そう、今回の実行結果に最後の方になんか余計なもの( "_" )が付いています。
ではどうすればいいでしょうか?
こういう場合は、「規則性を見付ける」のがいいと思います。
単純に現実世界で、ホワイトボードかなんかに10_20_30_..._80_90
のように書くとき、どのように書きますか?
よーく見てください。並びが <数字><_><数字><_><数字><_>...<_><数字><_><数字>
となっていますね。
で、最後以外は常に <数字><_>
で一つと見なせますよね。
でも、なぜか最後だけは例外的みたいです。だって最後の<_>が無いから。
もしランダムに並んでいるのなら手も足も出ませんが、今回は『最後だけは数字で終わり、それ以外は常に後ろに半角スペースが来ている』と言えますね。
最後がいつになるのか不明(while文でループするときとか)だと厳しい感じになりそうですが、今回は[1,10)の範囲だと分かっているので、最後はnum = 9になっているはずです。
ということは、「num が 9かどうか」で分岐できると思いませんか?
「もしnum = 9なら数字のみ、それ以外なら最後に半角スペースを付ける」と。
でも、これをそのまま実装すると、if...else...みたいになるはずです。
ですが、考えてみると、「(最後以外は)常に半角スペースを後ろに付ける」と言えますよね?
つまり、「もしnum ≠ 9なら最後に半角スペースを付ける」と言えますよね?
それで考えると、num = 9 の場合、num≠9を満たさないので処理されない。つまり最後の半角スペースが付かないのです。
そういう風に言い換えてみたり、規則性を見付けるとやりやすいはずです。
それと、プログラミングをするのなら、『デバッグぐらいはしましょう』です。
やり方は環境とか言語とかによるので書きませんが、発想は上記にあるようなコードを読むアレと一緒です。
単にデバッガを使うのか、IDE側のデバッガを使うのか、いわゆるprintfデバッグ(Pythonだとprint)でうやるのかの違いだけです。