paiza レベルアップ問題集 ループ1の1「STEP: 1 ある数字までの出力 1」 をPythonとGASの両方で解いたコードの紹介

この記事を読むことで、1〜10までの数をループで出力すること、PythonとGASの両方のコードでループの指定方法が異なることが掴めます。

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、ご安心なさって下さい。)


ある数字までの出力 1 (paizaランク D 相当)

入力
与えられません。

出力
1
2

9
10


この問題では、1から10までの数を出力します。

まず、Pythonで解いてみます。


手順として、

1. for文を10回繰り返して値を1から10までと増やしていく

2.ループの中でprintを使って表示する

で行います。


手順1: ループの書き方ですが、

for i in range(1,11):

と記述すると、rangeの中で(最初の値,最後の値未満)になります。
最後が11となっているのは、rangeでは(1,11)と指定した場合、(1,11未満)となるからです。

10までならrange(1,10)だ!と私も最初思いましたので、一度それでコード書いて出力してみます。

まず、range(10)のみの場合の出力結果です。
この場合、iはi=0,i=1 … i=9の10回の出力を繰り返します。

for i in range(10):
    print(i)
UI control with a white rounded button labeled 输出 above a vertical column listing numbers 0–9 in a gray panel.

次に、range(1,10)と指定します。
この場合、i=1,2,… i=9になります。

for i in range(1,10):
    print(i)

実行結果です。

Gray rounded panel labeled 出力? above a vertical keypad showing numbers 1 through 9.

この書き方では10は出力されませんでした。

1から10までを表示したかったらrange(1,11)と書く。そうすると、1から11未満、1から10まで出力出来ると、納得行くまで検証致しました。

では、正解のコードとその実行結果はこちらになります。

#rangeではその数未満の値が出力される
for i in range(1,11):
    print(i)
Vertical list of numbers from 1 to 10 in a single column, ascending order.

Pythonは以上です。


では、同じ問題をGASで解いてみます。

まず、スプレッドシートにこの様に配置しました。

Excel-like spreadsheet with column A highlighted in bright yellow from row 1 to row 11, and a blue outline indicating the active selection.

この黄色いセルに1から10まで表示します。
スプレッドシートに表示する場合は、二次元配列を作成します。

手順はこのようになります。

1: スプレッドシートからアクティブシートをアクセスする

2: 空の配列arrayを定義する

3:ループで1から10までの数をarray.push([i])で付け加える

4: スプレッドシートに出力前にログに表示してarrayを確認

5:スプレッドシートのセルA1(1,1)から始まる黄色いセルに1から10までの数を出力する

手順1: スプレッドシートからアクティブシートをアクセスする

下記のコードを関数「loop1」に書いて行きます。

function loop1() {

  //スプレッドシートからアクティブシートをアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
  
}


手順2: 空の配列arrayを定義する

function loop1() {

  const ss=SpreadsheetApp.getActiveSheet();
  
  //空の配列arrayを定義する
  const array=[];

}


手順3: ループで1から10までの数をarray.push[i]で付け加える

GASでのループの書式は、

for(let i=1;i<=10;i++)

になります。

iは変数ですので、ループの中でletで宣言して、i<=10でiが1,2, … , 10と増えて行きます。

また、このままですとarrayは一次元配列になり、二次元配列のスプレッドシートには読み込めないので、ループの中で

array.push([i]);

と、pushを使って追加する際に、[i]と二次元配列になるように追加しています。

function loop1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=[];

  //ループで配列arrayに二次元配列として1から10までの数値を格納する
  for(let i=1;i<=10;i++){
    array.push([i]);
  }
}


手順4: スプレッドシートに出力前にログに表示してarrayを確認

スプレッドシートに出力する際、配列arrayが二次元配列になっているとスムーズに出力出来ます。

ログ出力で確認をします。

function loop1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=[];

  for(let i=1;i<=10;i++){
    array.push([i]);
  }

  //スプレッドシート出力までにログでarrayを確認する
  console.log(array);

}

実行結果です。

UI panel with header '実行開始' and footer '実行完了', showing a vertical list of ten items like [[1], [2], …, [10]] (placeholders).

無事にarrayが二次元配列として出力されたことが確認出来ました。


手順5: スプレッドシートのセルA1(1,1)から始まる黄色いセルに1から10までの数を出力する

ss.getRange(1,1,10).setValues(array);

スプレッドシートに出力する際、getRange(1,1,10)でセルA1から10行確保して、そこに配列arrayを押し込むイメージです。

1列分の1列も指定すると、getRangeの中身は(1,1,10,1)になりますが、1列の場合は省略可能です。

setValuesとsが付いているのは、出力する数字が10個と複数形になるからです。

コードと実行結果です。

function loop1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=[];

  for(let i=1;i<=10;i++){
    array.push([i]);
  }

  console.log(array);

  //スプレッドシートのA1から始まる黄色いセルA1(1,1)から10行分出力する
  ss.getRange(1,1,10).setValues(array);

}
Spreadsheet view: column A with numbers 1–10 highlighted in yellow (header A visible).

GASは以上です。


お疲れ様でした。ブレイクタイムPhotoは、

LEGO police motorcycle model on a green base under warm yellow light, near a blue-lit display edge.

レゴブロックで作成した白バイです。

←ループ1の1メニューへ戻る               次の問題へ

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「ループその1の1」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介

投稿者アバター
nekosiestr
いつもブログをご覧頂きまして、誠に有難うございます。 Excelやデータベース、プログラミングを学習する傍ら、趣味で写真を撮影してPhotoshopで編集しております。

投稿者: nekosiestr

いつもブログをご覧頂きまして、誠に有難うございます。