【ページ更新日:2020年10月22日】
毎日Pythonでは、簡単なPythonのプログラムコードを紹介していきます。
今日のプログラムはAtCorder2019の問題を使用しています。
競技用プログラミングの問題になります。
問題
問題は次のとおりです。
あなたは、3桁の整数を入力として受け取り、それを2倍して出力するプログラムの作成を頼まれた。
ところが、どうやらプログラムに入力される文字列Sに英小文字が紛れ込むことがあるようだ。そこで、その場合はエラーを出力することにした。
入力される文字列Sが3桁の整数である場合(0で始まる場合を含む)は、その2倍の値を出力し、そうでなければ「error」と出力するプログラムを作成せよ。
AtCorder 第一回アルゴリズム実技検定過去問2019年12月A問題
プログラムコード
問題の解答となるコードは次のとおりです。
※間違いの指摘やアドバイスなどあれば教えてください。
S = input("数字を入力してください >>> ") if not str.isdecimal(S): print ("error") else: print (int(S)*2)
ちなみに、これをC++で書くと、
このようになります。
これは、AtCoderさんが公表している解説動画のコードになります。
このPythonとC++のコードを見比べても分かるように、やはりPythonは他の言語に比べて、簡単にプログラムを書くことができます。
ポイント
S = input("数字を入力してください >>> ") if not str.isdecimal(S): print ("error") else: print (int(S)*2)
このPythonコードのポイントは次の3点です。
- input
- str.isdecimal( )
- int( )
input
input関数は、キーボードから文字列の入力を取得する関数です。
S = input("数字を入力してください >>> ")
今回のコードでは上記のように使用しました。
これで、『キーボードからの入力を取得し変数「S」に入れる』という処理を行います。
inputの後の( )の中には、入力時に表示する文字列を入れます。
上記の場合だと、ユーザーに「数字を入力してください」という文字列を見せた後に、キーボードから入力をしてもらうかたちになります。
input関数の注意点は次のとおりです。
input関数はキーボードからの入力を「文字列」、つまり「str型」で取得します。
つまり、入力されたものを数値として扱いたい場合は型変換(キャスト)する必要があります。
型変換(キャスト)については、この後inputで説明します。
str.isdecimal( )
これはstrクラスのisdecimal メソッドです。
文字列中のすべての文字が10進数で使われる文字で、かつ 1 文字以上ある場合にtrueを返します。それ以外はfalseを返します。
S = input("数字を入力してください >>> ") if not str.isdecimal(S): print ("error") else: print (int(S)*2)
今回のコードでは、if関数の条件式でstrクラスのisdecimalメソッドを使用しています。
if not str.isdecimal(S): print ("error")
isdecimalメソッドの( )の中に対象としたい文字列を入れます。
今回の処理としては、isdecimalメソッドを使用して、input関数で入力した文字列が全て数字かどうか調べています。
if関数の条件式には「not」(否定)が付いているので、真と偽(tureとfalse)がひっくり返ります。
つまり、上記の2行では
『input関数で入力された文字列Sに数字以外の文字が含まれていたら、「error」と表示する』
という処理になります。
int( )
int関数は( )の中にいれた数字をint型に型変換(キャスト)します。
print (int(S)*2)
今回のコードでは、input関数で入力された数字をstr型からint型に変換して、2倍して、表示しています。