この記事を読むと、Pythonで標準入力で整数値をする書き方、IF文、Forループの基本的な書き方と対応づけて、内包表記でのループ・if・elseを1行で書くことが可能になります。
また、このコーナーでは、学習コンテンツpaizaラーニングのレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。
GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験
paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。
問題:整数 N が与えられます。
九九の N の段を半角スペース区切りで出力してください。
この記事では、入力例2でNに5が与えられたという条件で解いて行きます。
入力例2
5
出力例2
5 10 15 20 25 30 35 40 45
この問題では、5〜40までがスペース区切り、最後の45の所で改行する形で書かれています。
ループでiをiから9まで回して、i*N(この例ではN=5)で5倍して、iが9(計算結果が45)ではない時にスペース区切り、そうでなければ改行での出力が求められます。
ではまず、Pythonで解いてみます。
今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。
下準備として、paiza.ioにこの様に入力します。
手順として、
1.N=int(input())で九九のNの段を標準入力で読み込む
2.for文でi=1からi=9までループを回す
3.ループ内でiが9ではない(i!=9)であればスペース区切りで出力する
4.else(i==9)の時は改行する
まずは最初に基本的なループとIF文のコードです。
#標準入力でNの段のNを読み込む
N=int(input())
#ループで九九のNの段を作ってスペース区切りを改行の分岐をして出力
for i in range(1,10):
if i!=9:
print(i*N,end=' ')
else:
print(i*N)
これを内包表記で書くと、ループと分岐の所がたった1行で書けます。
#標準入力でNの段のNを読み込む
N=int(input())
#【内包表記】を使ってコードを書き換える
[print(i*N,end=' ') if i!=9 else print(i*N) for i in range(1,10)]
公式のようにまとめると、if else と for を使った内包表記は、
[真の時の結果 if 条件式 else 偽の時の結果 いつものfor文]
になります。
paiza.ioでの出力結果です。
<<GASでの解き方>>
では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。
九九のNの段を黄色の所に求めます。
※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※
手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする
2:緑色のセル(B1)にある九九のNの段のNを取得(この例の場合N=5)
3:九九のNの段を格納する作業用の配列tempを宣言する
4:ループでtempにNの段の一次元配列を格納する
5:ログでtempに九九のNの段が格納されたことを確認する
6:スプレッドシートに二次元配列として格納する配列arrayを宣言する
7:ここでarrayにtempを入れて二次元配列に出来たことをログで確認する
8:スプレッドシートの黄色いセルに九九のNの段が入った二次元配列を出力する
手順1: スプレッドシートからアクティブシートをアクセスする
const ss=SpreadsheetApp.getActiveSheet();
これで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
手順2:緑色のセル(B1)にある九九のNの段のNを取得(この例の場合N=5)
const N=ss.getRange(1,2).getValue();
手順3:九九のNの段階を格納する作業用の配列tempを宣言する
let temp=[]
手順4:ループでtempにNの段の一次元配列を格納する
for (let i=1;i<=9;i++){
temp.push(i*N);
}
手順5:ログでtempに九九のNの段が格納されたことを確認する
console.log(temp);
手順6:スプレッドシートに二次元配列として格納する配列arrayを宣言する
let array=[];
手順7:ここでarrayにtempを入れて二次元配列に出来たことをログで確認する
array.push(temp);
console.log(array);
手順8:スプレッドシートの黄色いセルに九九のNの段が入った二次元配列を出力する
ss.getRange(3,2,1,9).setValues(array);
スプレッドシートの実行結果です。
GASでの全コードはこちらになります。
<全コード>
function loop14(){
//スプレッドシートからアクティブシートをアクセスする
const ss=SpreadsheetApp.getActiveSheet();
//緑色のセル(B1)にある九九のNの段のNを取得(この例の場合N=5)
const N=ss.getRange(1,2).getValue();
//九九のNの段を格納する作業用の配列tempを宣言する
let temp=[];
//ループでtempにNの段の一次元配列を格納する
for (let i=1;i<=9;i++){
temp.push(i*N);
}
//ログでtempに九九のNの段が格納されたことを確認する
console.log(temp);
//スプレッドシートに二次元配列として格納する配列arrayを宣言する
let array=[];
//ここでarrayにtempを入れて二次元配列に出来たことをログで確認する
array.push(temp);
console.log(array);
//スプレッドシートの黄色いセルに九九のNの段が入った二次元配列を出力する
ss.getRange(3,2,1,9).setValues(array);
}
宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした。
ブレイクタイムフォトはこちらになります。
都庁。2019年4月【コロナ前に撮影】
■ 参考文献の紹介■
じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。
GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験