この記事を読むことで、整数やリストを標準入力で取得して、IF分岐とループを使って偶数・奇数の判定を出力する処理を、PythonとGASの両方のコードで習得することが可能になります。
Pythonでは、基本的なループとIF分岐のコードの他にそれらを1行で書き表せる【内包表記】のコードも追記しております。
最初にPython、次にGASのコードを掲載します。
このコーナーでは、学習コンテンツpaizaラーニングのレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。
GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験
paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。
問題:
N 個の整数 a_1, a_2, …, a_N が与えられます。
この N 個の整数について、a_1 から順に 奇数か偶数か判定し、奇数なら「odd」 、偶数なら「even」を改行区切りで出力してください。
この記事では、下記の入力例1の場合、N=5で5個の数値のリストに「1 2 3 4 5」が与えられて、その奇数・偶数の判定を行う、という条件で解いて行きます。
入力例1
5
1 2 3 4 5
出力例1
odd
even
odd
even
odd
ではまず、Pythonで解いてみます。
今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。
■ Pythonでの解き方 ■
下準備として、paiza.ioにこの様に入力します。
(入力例1をそのままioにコピーしただけ。)
手順として、
1:標準入力でリストの個数を取得
2:標準入力でリストを取得
2:ForループとIFで剰余演算子「%」を使って「%2==0」を「even(偶数)」、そうでないもの「odd(奇数)」を判定して出力
で、行います。
まずは、基本的なForとIFを用いたコードです。
#リストの要素数を取得する
N=int(input())
#リストを取得する
array=list(map(int,input().rstrip().split(' ')))
#ループで偶奇の判定をする
for num in array:
if num%2==0:
print('even')
else:
print('odd')
次に、上記のForとIFの箇所に【内包表記】を施したコードです。
#リストの要素数を取得する
N=int(input())
#リストを取得する
array=list(map(int,input().rstrip().split(' ')))
#【内包表記】ループで偶奇の判定をする
[print('even') if num%2==0 else print('odd') for num in array]
ioの出力結果です。
■ GASでの解き方 ■
では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。
黄色いセルの所に「偶数・奇数の判定」を出力します。
※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※
手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする
2:スプレッドシートの緑色のセルから配列の個数を取得する
3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する
4:ログで配列が取得できたことを確認
5:スプレッドシードに2次元配列として出力するarray2を宣言
6:ForループとIF文で剰余演算子「%」を使って「%2==0」を「even(偶数)」、そうでないものを「odd(奇数)」と判定して配列array2に追加。
7:スプレッドシート出力前に「even,odd(偶数・奇数)の判定」が格納された二次元配列array2のログ出力で確認する
8:スプレッドシートの黄色いセルに「even,odd」が格納された二次元配列array2を出力する
手順1: スプレッドシートからアクティブシートをアクセスする
const ss=SpreadsheetApp.getActiveSheet();
ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
手順2:スプレッドシートの緑色のセルから配列の個数を取得する
const N=ss.getRange(1,2).getValue();
手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する
const array=ss.getRange(4,1,1,N).getValues();
手順4:ログで配列を取得できたことを確認
console.log(array);
手順5:スプレッドシードに2次元配列として出力するarray2を宣言
let array2=[]
手順6:ForループとIF文で剰余演算子「%」を使って「%2==0」を「even(偶数)」、そうでないものを「odd(奇数)」と判定して配列array2に追加。
//ForループとIF文で剰余演算子「%」を使って「%2==0」を「even(偶数)」、そうでないものを「odd(奇数)」と判定して配列array2に追加。
for (let i = 0; i < N; i++) {
if (array[0][i] % 2 == 0) {
array2.push(['even']);
} else {
array2.push(['odd']);
}
}
array[o][i]としているのは、スプレッドシートは二次元配列で格納させるため、array[0]で最初の行目の0列目、1列目、2列目、3列目、4列目と走査していくからです。
手順7:スプレッドシート出力前に「even,odd(偶数・奇数)の判定」が格納された二次元配列array2のログ出力で確認する
console.log(array2);
手順8:スプレッドシートの黄色いセルに「even,odd」が格納された二次元配列array2を出力する
ss.getRange(7,1,N).setValues(array2);
GASでの全コードはこちらになります。
function loop2no5() {
//スプレッドシートからアクティブシートをアクセスする
const ss = SpreadsheetApp.getActiveSheet();
//スプレッドシートの緑色のセルから配列の個数を取得する
const N = ss.getRange(1, 2).getValue();
//配列arrayを宣言して、灰色のセルの範囲の配列を格納する
const array = ss.getRange(4, 1, 1, N).getValues();
//ログで配列が取得できたことを確認
console.log(array);
//スプレッドシードに2次元配列として出力するarray2を宣言
let array2 = [];
//ForループとIF文で剰余演算子「%」を使って「%2==0」を「even(偶数)」、そうでないものを「odd(奇数)」と判定して配列array2に追加。
for (let i = 0; i < N; i++) {
if (array[0][i] % 2 == 0) {
array2.push(['even']);
} else {
array2.push(['odd']);
}
}
//スプレッドシート出力前に「even,odd(偶数・奇数)の判定」が格納された二次元配列array2のログ出力で確認する
console.log(array2);
//スプレッドシートの黄色いセルに「even,odd」が格納された二次元配列array2を出力する
ss.getRange(7, 1, N).setValues(array2);
}
宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。
六本木ヒルズのハロウィン、お化けカボチャ
■ 参考文献の紹介■
じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。
GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験