paiza レベルアップ問題集 標準入力その5「STEP: 4 10 個の整数の半角スペース区切りの入力」をPythonとGASの両方で解いたコードの紹介

この記事を読むことで、Pythonの標準入力で半角スペース区切りの整数をsplitメソッドを使って10個取得し、配列に格納して10行の整数を出力するコードの概要が掴めます。

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

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

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

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


10 個の整数の半角スペース区切りの入力 (paizaランク D 相当)

問題:

整数 a_1, a_2, … , a_9, a_10 が半角スペース区切りで与えられるので、改行区切りにして 10 行で出力してください。

ではまず、Pythonで解いて行きます。


手順として、

1:標準入力でsplitメソッドを使って半角スペース区切りの整数をリストで取得する

2:取得したリストをループで出力する

・シンプルなループ
・リスト出力に適したループ
・上記の内包表記  

の2ステップで行います。

今回は下記の入出力例1を用います。

入力例1
10 9 8 7 6 5 4 3 2 1

出力例1
10
9
8
7
6
5
4
3
2
1

まず、準備として、paiza.ioにこのように入力します。
(入力例1 をコピペしたのみ)

下記のコードで入力と出力を行いますが、1行に複数の関数が使われているので、今回の例に即して簡潔にお伝えします。

input … 標準入力で文字や数値を取得する

split … 指定の区切り文字で分割して取得する

int … 上記で取得する対象が整数である


rstrip … 右側にある不要な空白を取り除く


map … 関数をまとめて適用


list … リスト(配列)変換

上記の関数を用いてコードを掲載致します。
関数が沢山に色々出て来てしまいましたので、まずは、標準入力で取得した数値がリスト(配列)形式でarrayに取得出来たことをprint文で出力して確認します。

#10つの整数を標準入力で取得し右側の不要な空白を削除してリストにする
array=list(map(int,input().rstrip().split(' ')))

#arrayが配列として取得できたことを確認する
print(array)

まずは、リストとして出力出来ました。

では、リストarrayをループを用いて解答の出力例に沿って縦に出力します。

ループを用いる前にリストarrayの長さを調べて、リストは0からarray[0]、array[1] …array[9]になるので後ほどループの回数に使用する、リストarrayの長さが10(0,1,2,3,4,5,6,7,8,9の10つ)になることをlen関数を用いて確認します。

array=list(map(int,input().rstrip().split(' ')))
print(array)

#リストの長さを求める
print(len(array))

このコードで、リストarrayの長さが10であることが確認出来ました。

では、リストarrayをループで出力します。

for i in range(len(array)):

これで、iに0,1,2,3,4,5,6,7,8,9が入ります。
range(数)で、0からその数未満の回数分ループを回します。

array=list(map(int,input().rstrip().split(' ')))
print(array)

print(len(array))

#ループを使ってリストを出力
for i in range(len(array)):
    print(array[i])

リストをループを使って出力した結果の画像です。

必要な分だけ出力するので、コメントアウトを致します。

array=list(map(int,input().rstrip().split(' ')))
#print(array) ←コメントアウト

#print(len(array)) ←コメントアウト

#ループを使ってリストを出力
for i in range(len(array)):
    print(array[i])

すると、解答提出に必要な分だけ出力されました。


リストを使った、更に便利なループの表記方法について掲載致します。

for リストの要素の文字 in リスト名:

今回の例ですと、

for num in array:

になります。
リストの要素の所は自分や他の方が見て分かりやすい「num」などにすると、「整数を取り出すんだな」と伝わりやすいです。

コメントアウトした部分を削除して、コードを掲載致します。

array=list(map(int,input().rstrip().split(' ')))

#リスト出力に便利なループの書き方
for num in array:
    print(num)

更にコード短くするのに、内包表記を用います。

[出力結果のprint文 for リストの要素の文字 in リスト名]

今回の例ですと、

[print(num) for num in array]

と表記いたします。

array=list(map(int,input().rstrip().split(' ')))

#リスト出力に便利なループの書き方の内包表記
[print(num) for num in array]

このコードの実行(出力)結果です。

Pythonは以上です。
次は、GASで解いて行きます。


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

緑色のセルA2の所にpaiza問題の入力例をコピペする際、[Ctrl] + [Shif] + [V] のショートカットキーを使うと書式を崩さずに貼り付けられます。

緑色のセルA2(2,1)に入力した整数を取得して、それをC2(2,3)から始まる10行分の黄色いセルに出力します。

その際、黄色いセルの所には、二次元配列として取得した整数が格納された配列のarray2を出力します。

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

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

1:SpreadSheetAppから階層を辿って現在のシートにアクセスする

2:緑のセルA2(2,1)の整数をsplitメソッドを使って配列arrayに格納する


3:配列arrayのログ出力をして数値が配列に格納されたことを確認


4:スプレッドシートに格納する為、空の配列array2に二次元配列として格納する

5:スプレッドシートに格納前に、array2をログ出力する

6:スプレッドシートの黄色いセルC2(2,3)から始まる10行分に出力する

手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

このコードを関数「standardInput4」の中に書いて行きます。

Standard Inputで標準入力の意味です。

function standardInput4() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

}

手順2:緑のセルA2(2,1)の整数をsplitメソッドを使って配列arrayに格納する

const array=ss.getRange(1,1).getValue().split(‘ ‘);

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();

  //緑のセルA2(2,1)の整数をsplitメソッドを使って配列arrayに格納する
  const array=ss.getRange(2,1).getValue().split(' ');

}

手順3:セルA2のスペース区切りの数値が、配列arrayに格納出来たことをログ出力で確認する。

console.log(array);

下記のコードの実行結果です。

手順4:スプレッドシートに出力する為に、空のリストarray2を宣言して、二次元配列として格納する

まず、二次元のスプレッドシートに出力するのに使用する、現在は空の二次元配列array2を宣言します。

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

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

}

この空の配列array2にループを使ってarrayに格納された数値を二次元配列として格納して行きます。

array.lengthで(一次元)配列の長さを求め、配列の添字は0から始まるので、ループの中ではi=0,i=1,i=2 …… i=8,i=9とiの値がインクリメント(増加)するように、iの値が1ず増えて変わっていくので、定数のconstではなく、変数のletを用いています。

また、i<array.lengthとすることで、iの値が0から9まで(10未満)1つずつ増えて行きます。「<」であることに着目をお願い致します。

二次元配列として格納するために、[array[i]]と配列自体を[ ]で括っています。
配列を末尾に追加するのにpushを使っています。

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  const array2=[];

  //スプレッドシートに格納する為に、array2に二次元配列として格納する
  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }
}

手順5:スプレッドシートに出力前に、array2をログ出力して、二次元配列として格納されていることを確認する

console.log(array2);

下記のコードの実行結果のログです。

手順6:スプレッドシートのC2(2,3)から始まる10行分の黄色いセルに配列array2を出力する

ss.getRange(2,3,array2.length).setValues(array2);

C3から始まるので(2,3)、10行分なので、(2,3,10)になります。

array2.lengthを使うと、配列の長さの10が行数分の10行として入りますので、(2,3,array2.length)と書くと、より柔軟なコードが書けます。

1列なので、(2,3,array2.length,1)と書くことも出来ますが、1列の場合は省略可能です。

また、出力する数値はsplitで分割して複数になっているので、setValuesと複数形のsが付きます。

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  const array2=[];

  //スプレッドシートに格納する為に、array2に二次元配列として格納する
  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }

  console.log(array2);

  //スプレッドシートのC2から始まる黄色いセル10行分に出力する
  ss.getRange(2,3,array2.length).setValues(array2);

}


コードと実行後のスプレッドシートです。

GASのコードは以上になります。

※ この記事の作成に参考になったサイトです ※
ありがとうございます。

Python「rstrip() メソッド」で文字列の右端を整えよう!
Python mapの使い方


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

横浜みなとみらい。ランドマークタワーの夜景です。

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

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

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

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

■ 関連記事 ■

paizaレベルアップ問題集「標準入力5」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

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

【paiza レベルアップ問題集】標準入力その2 「STEP: 2 3 つの文字列の半角スペース区切りでの分割」をPythonとGASで解いたコード紹介

この記事を読むことで、PythonとGASでsplitメソッドを使って文字列を空白部分で分割してリスト(配列)に格納し、ループを使ってリストを出力する方法、Pythonでは通常のループ対応して、内包表記で書く方法の概要も掴めます。
また、GASでは二次元配列として取得、出力する方法の概要が掴めます。

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

GAS(Google Apps Script)はスプレッドシートを使ってコードを書いていおります。

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

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


3 つの文字列の半角スペース区切りでの分割 (paizaランク D 相当)

問題:
文字列He likes paizaを、半角スペースで分割して出力してください。

入力される値
なし

期待する出力
He likes paizaを半角スペースで区切り、区切られた文字列を改行区切りにして 3 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

He
likes
paiza

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


手順として、

1:リストarrayにsplitメソッドを使って空白で文字を区切って配列に入力

2:配列を確認


3:ループで出力

で、行います。

手順1で、文字列「He likes paiza」にsplitメソッドを使って文字を分割します。
その部分のコードです。

#splitメソッドで分割した文字列をリストarrayに代入
array='He likes paiza'.split(' ')

手順2では、リストarrayに分割して文字列がそれぞれ格納したことをprint文で確認します。

array='He likes paiza'.split(' ')

#リストarrayをそのまま出力
print(array)

その出力結果です。

リストarrayに格納されたことが確認できたので、arrayをループで出力します。
そのコードと出力結果です。
arrayの中の文字をwordに格納してループが終了するまで出力しています。

array='He likes paiza'.split(' ')
print(array)

#リストarrayをループで改行して出力する
for word in array:
    print(word)

このループの所を内包表記で記述したコードです。

array='He likes paiza'.split(' ')
print(array)

#リストarrayをループで改行して出力する
for word in array:
    print(word)

#内包表記で出力する
print('----内包表記----')
[print(word) for word in array]

求められる出力に対して冗長な箇所はコメントアウトします。
複数行のコメントアウトは、「’」を3つの「”’」か、「”」を3つの「”””」を使います。

array='He likes paiza'.split(' ')
'''
print(array)

#リストarrayをループで改行して出力する
for word in array:
    print(word)

#内包表記で出力する
print('----内包表記----')
'''
[print(word) for word in array]

提出用にスッキリとした最小限のコードに致しました。

array='He likes paiza'.split(' ')
[print(word) for word in array]

プログラムを実行した出力結果です。


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

この黄色く塗りつぶしたセルの所に二次元配列として取得した文字列が格納された配列を出力します。
空白区切りの文字を分割して配列に格納して、更にループを使って二次元配列にします。

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

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

1:SpreadSheetAppから階層を辿って現在のシートにアクセスする

2:splitメソッドを使って文字列を分割して配列arrayに代入する

3:分割した文字列が配列arrayに追加出来たことをログ出力で確認する

4:配列arrayに格納された文字列を二次元配列として追加する配列array2を宣言する

5:ループを使ってarrayに格納された文字列を二次元配列としてarray2に追加する

6:スプレッドシートに出力する前に、ログでarray2を出力して確認する

7:array2をスプレッドシートの黄色いセルに出力する


手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

このコードを関数「standardInput2」の中に書いていきます。
Standard Inputで、「標準入力」の意味です。

function standardInput2() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

}

手順2:splitメソッドを使って文字列を分割して配列arrayに代入する

const array=’He likes paiza’.split(‘ ‘)

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();

  //splitメソッドを使って文字列を分割して配列arrayに代入する
  const array='He likes paiza'.split(' ');

}

手順3:分割した文字列が配列arrayに追加出来たことをログ出力で確認する

console.log(array);

コードと実行結果です。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='He likes paiza'.split(' ');


  //分割した文字列が配列arrayに追加出来たことをログ出力で確認する
  console.log(array);

}

手順4:配列arrayに格納された文字列を二次元配列として追加する配列array2を宣言する

let array2=[];

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='He likes paiza'.split(' ');
  console.log(array);

 //スプレッドシートに出力する二次元配列array2を宣言
  let array2=[];

}

手順5:ループを使ってarrayに格納された文字列を二次元配列としてarray2に追加する

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='He likes paiza'.split(' ');
  console.log(array);

  let array2=[];

  //ループを使ってarrayに格納された文字列を二次元配列としてarray2に追加する
   for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }
}

手順6:スプレッドシートに出力する前に、ログでarray2を出力して確認する

console.log(array2);

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='He likes paiza'.split(' ');
  console.log(array);

  let array2=[];

   for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }

  //スプレッドシートに出力する前に、ログでarray2を出力して確認する
  console.log(array2);

}

手順7:array2をスプレッドシートの黄色いセルに出力する

ss.getRange(2,1,array2.length).setValues(array2);

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='He likes paiza'.split(' ');
  console.log(array);

  let array2=[];

   for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }

  console.log(array2);

  //array2をスプレッドシートの黄色いセルに出力する
  ss.getRange(2,1,array2.length).setValues(array2);

}

実行後のスプレッドシートです。


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

お台場の観覧車です。
扇風機みたいですね(笑)

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

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

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

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

■ 関連記事 ■

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

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

息抜きに、写真で癒し(=^x^=)

このコーナーでは、癒しをテーマに、「夜景」や「自然」などの写真を中心に
掲載しています。

ごゆっくりと、くつろいで行って下さい(=^x^=)

フォトストック写真ACさんに投稿をしております。

Threads始めました!!
フォロー宜しくお願いします(=^x^=)


■ 乗り物 ■

多摩モノレールと中央本線


■ 今は無き、思い出の場所■

お台場パレットタウンメモリーズ



■ 桜 、お花見■

埼玉の植民地、「池袋」西口公園の桜

東京下町、足立区の桜

石神井公園 アニメ聖地巡礼平成最後の花見

目白庭園の夜桜


■ 新緑 ■

水元公園でサイクリング。ゴールデンウィークの爽やかな風・グリーンエクササイズ。



■ 梅雨時 ■

代々木公園、雨粒はじけるアジサイとバラ



■ 夏・納涼 ■

いたばし花火大会(2023)


いたばし花火大会(2019)


海と空、波打ち際、地球の息吹が味わえる御宿(房総半島)

江ノ電の旅 鎌倉高校前駅のロケ地にもなっている海

湘南の海!片瀬海岸と江ノ島岩場

立川市のひまわり(国営昭和記念公園 西立川口 サンフィニティ)

等々力渓谷 世田谷区の自然 とても東京23区内とは思えない自然と涼しさ



■ ハロウィン ■

六本木ヒルズでトリックオアトリート!?


東池袋、サンシャイン60展望台のハロウィン



■ 紅葉 ■

目白庭園


■ Xmasイルミネーション ■

お台場レインボー冬の花火大会2022

東京駅丸の内シャンパンゴールドに輝く街路樹

よみうりランドのジュエルミネーション

お台場

東京メガイルミ


恵比寿ガーデンプレイス


横浜みなとみらい

有楽町MULLION(マリオン)〜銀座のクリスマスイルミネーション

恋するイタリア 東京ドームシティ2016



■ 地元、東京下町 ■

スカイツリー3地点観測


ようこそ!スカイツリー、浅草へ!!

谷根千。日暮里から谷中銀座の昭和レトロな散策。

すみだ水族館のふわきゅんクラゲまつり


■ 工場萌え ■

2019年8月川崎工場地帯

2023年1月川崎千鳥橋方面


■ その他ライトアップ ■

羽田空港第一ターミナルで飛行機と空港夜景を撮影

六本木ヒルズスカイデッキから望む東京タワー

都庁と西新宿の夜景



■ その他 ■

サンシャイン水族館の空飛ぶペンギン

浮間公園の風車(埼京線浮間舟渡 東京都板橋区・北区の旅)

若者の街、表参道ヒルズから原宿までの散策

写ルンです復刻版 瀬戸内しまなみ海道 今治・大島・伯方島の旅

LEGOブロックと光のマジック

落書き風お笑い系芸能人の似顔絵


TikTok始めました。
始めた理由は、TikTokの仕組みに興味を持ったからです。若い方限定のSNSなので、自分には無理だと思っていたのですが、他のSNSが時間に影響を受ける仕組みに対してTikTokは時間に影響を受けないループ型なので、良い動画であれば過去の動画も見て頂けるという仕組みに興味を持って始めました。TikTokは、Twitterが使える方なら多分すぐ慣れると思いますし、動画編集に至っては、YouTubeの100倍以上楽です。

インスタ再開しました。

写真の投稿を始めました。
(写真AC)のプロフィールページです。

写真のアンケートを実施しております。
宜しかったらご回答頂けますと、大変励みになります(=^x^=)

フォトストック写真ACさんに投稿をしております。

メインメニューに戻る
自己紹介


初めてのPhotoshop


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