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

この記事を読むことで、ループの基本と内包表記の概要を掴めます。

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

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

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。その使い方は、この記事で問題の解き方を通して図解で解説しております。

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


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

この問題では、1から指定の数Nまでを出力します。
指定の数は、任意の数が入力されます。

今回は入力例2で解きます。

入力例2
5


出力例2
1
2
3
4
5


paiza.io を開きます。

※ 下記の図解は2026年7月4日時点のものです ※

右下の緑色の「コード作成を試してみる(無料)」を選択します。

登録無しで無料、日本語対応です。

右上の言語から「Python3」を選びます。

paizaの問題集の入力例2の「5」を、画面の左下の「入力」の下にコピペします。

ここから解き方を見ていきます。

手順として、

1. 標準入力を使ってループを回す回数の5を数値形式で読み込む

2. ループで1から5までを出力する

3. 基本的なループと内包表記の解説

で問題を解いて行きます。


手順1: 標準入力を使ってループを回す回数の5を数値形式で読み込む

今回は入力例2を用いるので、ループを回す回数の5を変数Nに代入します。
また、無事に代入出来たことをprint文で確認として出力します。

画面の状態とコードです。
[Ctrl]+[Enter] で実行出来ます。

#ループを回す回数を標準入力で取得する
N=int(input())

#取得出来たことを確認する
print(N)

手順2: ループで1から5までを出力する

for文でrange(1,N+1)を設定

現在Nには5が代入されています。

N+1と指定したのは、rangeでの(1,N+1)では、range(最初の数, 最後の数未満)、すなわちrange(1,6)で「1から5まで」となります。

悩まれた場合は、range(1,N)とループの設定をしてその挙動を見て、コードを書きながら掴んで行くと迷いにくいです。

N=int(input())

#print(N) ← コメントアウト

#ループでrangeの中を1からNまでに設定
for i in range(1,N):
    print(i)

この場合は、最後の5が出力されませんでした。

では、正しいコードに書き直します。
コメントアウトしたコードは削除しました。

N=int(input())

#ループでrangeの中を1から「N+1」までに設定
for i in range(1,N+1):
    print(i)

実行結果です。

次に、ループをたった1行で書く内包表記を用いて動かしてみます。
このコードの例ですと、[ ] の中に最初に出力したいprint文、その後にfor文が続きます。

[print(i) for i in range(1,N+1)]

コードはこの様にシンプルになりました。

N=int(input())

#ループの内包表記
[print(i) for i in range(1,N+1)]    

Pythonは以上になります。


では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

Nの値は緑のセルA2に5と入力してあり、その値を取得してループの回数に致します。
C列のC2(2,3)から始まる5行分の黄色いセルに1からNまでを出力します。

※ スプレッドシートに表示する場合は、二次元配列を作成します ※

手順は以下の様になります。

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

2: 空の配列arrayを宣言する

3: ループの回数Nを緑のセルA2(2,1)から読み込む

4: ループで1からNまでの数を配列arrayが二次元配列になるようにarrayに追加する

5: 配列arrayが二次元配列になっていることを、スプレッドシートに出力する前にログに出力して確認する

6: スプレッドシートのC2から始まる黄色いセルにN=5行分出力する

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

関数loop2の中に書いて行きます。

function loop2() {

  //スプレッドシートの階層を辿ってアクティブシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

}


手順2: 空の配列arrayを宣言する

スプレッドシートに出力用の空の配列arrayを宣言します。

function loop2() {
  
  const ss=SpreadsheetApp.getActiveSheet();

  //スプレッドシート出力用の空の配列arrayを宣言する
  const array=[];

}

手順3: ループの回数Nを緑のセルA2(2,1)から読み込む

Nが入力されているセルA2が(2,1)になり、その値をgetValueで取得しています。
また、無事に取得されてことをログで出力して確認しています。

ss.getRange(2,1).getValue();

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

  //セルA2からN=5を取得する
  const N=ss.getRange(2,1).getValue();

  //Nが取得出来たことをログで確認する
  console.log(N);
  
}

手順4: ループで1からNまでの数を配列arrayが二次元配列になるようにarrayに追加する

まず、ループの条件部分ですが、

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

このように、ループの中でiが1からN(=5)まで変わることにより、変数ですのでletを用いて宣言しています。

i<=Nで、ループを回す回数を指定して、i++でiの値を一つずつ増やすインクリメントをしています。

また、配列arrayに二次元配列として数値を追加するのに、pushメソッドを使っています。

array.push([i]);

この時[i]と表記することで、配列arrayに二次元で数値が追加されます。

function loop2() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=[];
  
  const N=ss.getRange(2,1).getValue();
  console.log(N);

  //ループを用いてarrayが二次元配列になる様に1からN=5までを追加する
  for(let i=1;i<=N;i++){
    array.push([i]);
  }

}

手順5: 配列arrayが二次元配列になっていることを、スプレッドシートに出力する前にログに出力して確認する

コードと実行した出力結果のログ画像です。

function loop2() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=[];
  
  const N=ss.getRange(2,1).getValue();
  console.log(N);

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

  //スプレッドシート出力前に配列arrayが二次元配列になっていることをログで確認
  console.log(array);

}

arrayが二次元配列として取得出来たことが確認されました。


手順6: スプレッドシートのC2から始まる黄色いセルにN=5行分出力する

下記の書式でスプレッドシートに出力します。

ss.getValue(2,3,N).setValues(array);

スプレッドシートの黄色いセルの始まりのC2は(2,3)で5行分指定するのに(2,3,N)となります。

1列分ですので、(2,3,N,1)と指定することも出来ますが、1列の場合は省略可能です。
コードとスプレッドシートの実行結果です。

function loop2() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=[];
  
  const N=ss.getRange(2,1).getValue();
  console.log(N);

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

  console.log(array);

  //スプレッドシートのC2(2,3)から始まる黄色いセル5行分の出力結果
  ss.getRange(2,3,N).setValues(array);

}


おまけですが、緑のセルA2のNの値を例えばpaiza問題集の入力例3の「28」に変更して実行すると、ログ出力とスプレッドシートの実行結果はこの様になります。


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

千葉県の房総半島、外房「御宿(おんじゅく)海です。

ここの海は透明度がとても高くて、綺麗な海を関東地方で見たい方にはお勧めのスポットです。交通の便があまり宜しくない分、美しい海をじっくりと堪能出来ます。

←前の問題へ                        次の問題へ→

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

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

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

■ 関連記事 ■

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

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

モバイルバージョンを終了