見出し画像

Pythonで斬ってつなぐ

 2つのプログラムを示します。どちらのプログラムも 10 で割りながら(5行目)、余りを加える(4行目)という点では同じですが、2行目と4行目が微妙に違います。

   #  〈プログラム1〉
  n = int(input( ))
  s = 0
  while n>0 :
      s = s + n%10
      n = n//10
  print (s)
    #  〈プログラム2〉
  n = int(input( ))
  s = ’ ’
  while n>0 :
      s = s + str(n%10)
      n = n//10
  print (s)

 違いは変数 s の「型」です。〈プログラム1〉の変数 s は「整数」で、〈プログラム2〉の変数 s は「文字列」。違いは、それだけ。

【実習】
 上の2つのプログラムの1行目の input 文で「12345」と入力すると、6行目の print 文でそれぞれ何を表示するか? まず予想して、その上でプログラムを実行して確認してみよう。

 変数の型について、些細なことと思われるかもしれませんが、これが元でエラーが起きたり、期待通りの結果が得られなかったり、よくあることです。型の違いがけっこう大きな違いを生むこと、味わってくださいな。

《チャレンジ》
 上のどちらかのコードをさらに書き換えて、「10進数の整数を入力して、2進数で表示する」プログラム、「5進数の整数を入力して、10進数で表示する」プログラムを作ってみよう。


 では、〈解説・解答〉と行きましょう。

【実習】
12345 → 10で割った余り
順に 5 , 4 , 3 , 2 , 1 ←┘
 ├→ 〈プログラム1〉→ 整数を足すと、各位の数の和 → 15
 └→ 〈プログラム2〉→ 文字をつなぐと、逆順に並ぶ → 54321

と、こんな風になります。どちらも Python で斬ってつないでいるわけですが、結果を見ればまるで違いますね。
 《チャレンジ》についてはまた後で同じようなことをやりますので、簡単に方向性だけ示しておきます。
 〈プログラム2〉で「10で割り続けた」ところを「2で破り続ける」ように書き換えることで「10進数の整数を入力して、2進数で表示する」プログラムにだいぶ近づきます。
 〈プログラム1〉で「10で割った余りをそのまま足す」のを「途中で5倍しながら足す」ことで「5進数の整数を入力して、10進数で表示する」プログラムにだいぶ近づきます。ここから先は記事「Python でM進数をN進数に変換する」をご覧ください。

◇      ◇      ◇

変数には型がある 〜 
▷ Python をじっくり観察しよう
▷ Python の変数を体感する  
▷ Pythonで斬ってつなぐ   

この記事が気に入ったらサポートをしてみませんか?