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

このコーナーでは、学習コンテンツpaizaラーニングレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。

GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。

サイトマップはこちらから

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

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

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

今回はpaiza.ioを使って解きます。
この記事では、paiza.ioの使い方を図を用いて解説しております。

まず、Pythonで解いてみます。
この例では言語を「Python3」に選択してあります。

■ Pythonでの解き方 ■

この画面の左下の「入力」の下に「5」など任意の数を入力します。

コードを書いていきます。

動作が確認できたので、paiza問題集の提出用コード入力の所に、コピペして提出します。

正解しました。

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

手順として、

1.N=int(input())で標準入力を読み込み

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

3.print文で表示

となります。
コードを詳しく見てみましょう。

手順1でN+1となっているのは、rangeでは(1,N+1)と指定した場合、(1,N+1)未満、すなわち(1からNまで)となるからです。

Pythonでの全コードはこちらになります。

N=int(input())
for i in range(1,N+1):
    print(i)

■ GASでの解き方 ■

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

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

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

1:配列arrayを定義する

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

3:NをセルB2から読み込む

4:ループで1からNまでの数をarray.push[i]で付け加える。
(array.push(i)だと1次元配列になり、二次元配列のスプレッドシートには読み込めないため。)

5:ログに表示

6:スプレッドシートに表示する。セルB3からN行分なので、getRange(3,2,N)でセルB3からN行確保してそこに配列を流し込むイメージ

実行結果です。

GASでの全コードはこちらになります。

function loop2(){

let array=[];
ss=SpreadsheetApp.getActiveSheet();
N=ss.getRange(1,2,1).getValue();

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

console.log(array);
ss.getRange(3,2,N).setValues(array);

}

宜しかったらコピペしてアレンジして見て下さい。

おまけですが、Nの値を例えば28にすると、こうなります。
これはスプレッドシートのB1の値を変更しただけです。

お疲れ様でした。

ブレイクタイムフォトはこちらになります。

千葉県房総半島、外房御宿の水平線

■ 参考文献 ■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

サイトマップはこちらから

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

プログラミングのアンケートにご協力頂ける方はこちらのフォームで勉強法など色々と教えて下さい。

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

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

このコーナーでは、学習コンテンツpaizaラーニングレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。

GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。

サイトマップはこちらから

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

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

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

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

<<Pythonでの解き方>>

手順として、
1.for文でrange(1,11)を設定し、変数num(別にnumじゃなくてもiでもjでもなん  でもOK)に1から11未満(つまり10)を代入
2.print文でnumを表示

コードを見てみましょう。

手順1で11となっているのは、rangeでは(1,11)と指定した場合、(1,11未満)となるからです。

Pythonでの全コードはこちらになります。

for num in range(1,11):
    print(num)

<<GASでの解き方>>

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

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

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

手順はこのようになります。
1:配列arrayを定義する
2:スプレッドシートからアクティブシートをアクセスする
3:ループで1から10までの数をarray.push[i]で付け加える。
(array.push(i)だと1次元配列になり、二次元配列のスプレッドシートには読み込めないため。)
4:ログに表示
5:スプレッドシートに表示する。getRange(1,1,10)でセルA1から10行確保してそこに配列を流し込むイメージ

実行結果です。

GASでの全コードはこちらになります。

function loop1() {

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

for(let i=1;i<=10;i++){
  array.push([i]);
  };
 
 console.log(array);
 cell=ss.getRange(1,1,10).setValues(array);

}

宜しかったらコピペしてアレンジして見て下さい。

お疲れ様でした。

ブレイクタイムフォトはこちらになります。

レゴブロック

■ 参考文献の紹介 ■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

サイトマップはこちらから

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

←レベルアップ問題集メニューへ戻る               →次の問題へ

paizaレベルアップ問題集をPythonとGASの両方で解いてみた集

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

オンラインコミュニティ「paizaの森」と、Cランク獲得ストーリー(Python3)の「問題集を解く」の順番を参考にして、Aランク、Sランクも獲得出来るよう、今後も記事を加筆して行きます。(令和4年1月22日にBランク取得しました。)
Python・GASのどちらの言語のコードも可能な限り詳細に解説して行きます。

paizaでは、【スキルチェック】のブログ掲載は禁止されていますが、【レベルアップ問題集】のコードの公開、ユーザ同士で教え合うことや研修の教材に利用することは自由としていると書かれていました。
paizaレベルアップ問題集のリンク


サイトマップはこちらから

メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

自己紹介

プログラミングのアンケートにご協力頂ける方はこちらのフォームで勉強法など色々と教えて下さい。

■ STEINS ;GATE Dランクレベル ■

正則表現のエントリーポイント Python3編

■ 標準入力メニューの1 ■

1 行の入力 Python3編

2 行の入力 Python3編

3 行の入力 Python3編

10 行の入力 Python3編

【行入力】1,000 行の入力 Python3編

■ 標準入力メニュー2 ■

2 つの文字列の半角スペース区切りでの分割 Python3編

3 つの文字列の半角スペース区切りでの分割 Python3編


【半角スペース区切りでの文字列の分割】5 つの文字列の半角スペース区切りでの分割 Python3編

■ 標準入力メニュー3 ■

1 つの入力 Python3編


半角スペース区切りの 2 つの入力 Python3編

半角スペース区切りの 3 つの入力 Python3編

半角スペース区切りの 10 個の入力 Python3編

【半角スペース区切りの入力】半角スペース区切りの 1,000 個の入力 Python3編

■ 標準入力メニュー4 ■

1 行の整数の入力 Python3編

2 行の整数の入力 Python3編

5 行の整数の入力 Python3編

100 行の整数の入力 Python3編

【整数の行入力】1,000行の整数の入力 Python3編

■ 標準入力メニュー5 ■

1 つの整数の入力 Python3編


2 つの整数の半角スペース区切りの入力 Python3編

5 つの整数の半角スペース区切りの入力 Python3編

10 個の整数の半角スペース区切りの入力 Python3編

【整数の半角スペース区切りの入力】1,000個の整数の半角スペース区切りの入力 Python3編

■ 標準入力メニュー6 ■

改行区切りでの N 個の整数の入力 Python3編

2 行目で与えられる N 個の整数の入力 Python3編

1 行目で与えられる N 個の整数の入力 Python3編

2 行目で与えられる N 個の整数の入力 (large) Python3編

【N 個の整数の入力】1 行目で与えられる N 個の整数の入力 (large) Python3編

■ 標準入力メニュー7 ■

改行区切りでの N 個の文字列の入力 Python3編

2 行目で与えられる N 個の文字列の入力 Python3編

1 行目で与えられる N 個の文字列の入力 Python3編

※スキルチェックのコードやヒントの掲載は禁止されているので問題のリンクのみ※

Dランク問題一覧のリンク

■ ループメニュー 1の1 ■

ある数字までの出力 1 Python3編

ある数字までの出力 2 Python3編

数字の受け取り 1 Python3編

数字の受け取り 2 Python3編

ある数をある回数表示 1 Python3編

ある数をある回数表示 2 Python3編

FINAL問題 a ~ z までを表示

■ループメニュー1の2 ■

数列の和 Python3編

数列の A 番目から B 番目までの和

数列の値を全部 * 2 して出力 Python3編

FINAL問題 数列同士の引き算 Python3編

■ ループメニュー1の3 ■

数列の反転 Python3編

九九の表示 1 Python3編

九九の表示 2 Python3編

2 の累乗を表示 Python3編

FizzBuzz Python3編

■ ループメニュー1の4 ■ 

数列の最大値 Python3編

数列の最小値 Python3編

数列の何番目にある? Python3編

数列の中に何個ある? Python3編

■ ループメニュー2の1 ■

未知数個の数の受け取り Python3編

未知数個の文字列の受け取り Python3編

奇数だけ出力 Python3編


割り切れる数だけ出力 Python3編

偶奇の判定 Python3編

ループメニュー2の2 ■

各桁の和 Python3編

カウント変数を使った計算 Python3編

2 で何回割れる? Python3編

任意の数で何回割れる? Python3編

10 進数から 2 進数に変換 Python3編

10 進数から M 進数に変換 Python3編

N が M ずつ増えたときにいつ K を越える? Python3編

毎日増加するお金 Python3編

階乗の計算 Python3編

階乗の末尾に 0 はいくつ付く? Python3編

加算された数列の最大値 Python3編

加算された数列の最小値 Python3編

1 はどこにある? Python3編

約数の個数 Python3編

約数の列挙 Python3編

※スキルチェックのコードやヒントの掲載は禁止されているので問題のリンクのみ※

Cランク問題一覧のリンク

※スキルチェックのコードやヒントの掲載は禁止されているので問題のリンクのみ※

Bランク問題一覧のリンク

■ スタックキューメニュー ■

■ スキルチェック見本問題セットのAランク問題 ■
(準備中)

■ スキルチェック過去問題セットのAランク問題 ■
(準備中)

■ STEINS ;GATE Aランクレベル ■



(準備中)

スキルチェック過去問セット



(準備中)

■ スキルチェック見本問題セットのAランク問題 ■
(準備中)

※スキルチェックのコードやヒントの掲載は禁止されているので問題のリンクのみ※

Aランク問題一覧のリンク

※スキルチェックのコードやヒントの掲載は禁止されているので問題のリンクのみ※

Sランク問題一覧のリンク

■ 参考文献の紹介 ■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

サイトマップはこちらから

メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

自己紹介

プログラミングのアンケートにご協力頂ける方はこちらのフォームで勉強法など色々と教えて下さい。

Python乱数randrangeでラーメン激戦区のメニューを見てみた。

この記事を読むことによって、Pythonのリストの初歩的な扱いが可能になります。
リストの添字を乱数にして、ラーメンのメニューを求めるプログラムになります。

そこで、山手線沿線で調べてみて、最も美味しそうだと私が思った、南大塚にある創作麺工房 鳴龍 (NAKIRYU) さんのメニューを元にPythonでメニューの配列を作って、インデックスを乱数にしてプログラミングしてみました。

配列menuを以下のように致しました。

menu=[‘坦坦麺’,’麻辣坦坦麺’,’坦坦つけ麺’,’塩ラーメン’,’梅塩ラーメン’,’海老ワンタン’]

細かいようですが、「坦々麺」ではなく、こちらでは「担担麺」のようですね。

配列menuの長さは6です。
なのでインデックスは、0,1,2,3,4,5の6つになりますね。

まぁ、これぐらいなら数えれば良いのですが、めんどくさいので、len(menu)で配列の長さ6を求めました。

乱数は、random.randrange(0,len(menu))で求めています。

これで、(0から5)までのインデックスの乱数を求めています。
つまり、(0から6未満)、すなわち(0,5)の乱数を求められます。

似たようなので、randintというのがありますが、これだと(0,len(menu))となり、(0から6)、0,1,2,3,4,5,6で長さが7となり、余ってしまうのでこのようなエラーが出てしまします。

これは、index=6となり、配列の要素が0から5までしかないのに対して、6が求まってしまったので、範囲を超えているよ、というエラーです。

そこで、エラーを修正して実行しました。

では、コードです。

import random

menu=['坦坦麺','麻辣坦坦麺','坦坦つけ麺','塩ラーメン','梅塩ラーメン','海老ワンタン']
index=random.randrange(0,len(menu))

print('今日は'+menu[index]+'食べよっかな。\n')

良かったらコピペしてアレンジしてみて下さい。
最後までお読み頂きありがとにゃん(=^x^=)

■ 参考文献の紹介 ■
じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。

Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何順でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Python で今日の運勢は??randintで星座占い♪

この記事では、星座占いをテーマに、Pythonでの乱数の使い方と、順位によってメッセージをifとelif とelseで分岐して表示する方法を学びます。

私はおうし座ですので、変数seizaのところに「おうし」と入れました。
実行結果です。

さて、コードの説明ですが、import randomで、乱数を発生させています。
これは後に運勢の順位に使います。

num=random.randint(1,12)

で、1から12までの乱数を発生させています。
「へびつかい座」を入れる場合でしたら、random.randint(1,13)になりますね。

似たようなもので、randrangeがありますが、これはrandom.randrange(1,12)だった場合は、12「未満」になります。

あとは演算子。

==とイコール2つで1位だったらの条件指定になります。
=と、一つだけだと代入になりますので。

あとはelif分の<=で何位以下、elseでそれ以外(この場合12位)です。

では、コードです。

import random

seiza="おうし"
num=random.randint(1,12)

print("今日の"+seiza+"座は"+str(num)+"位です!!")

if num==1:
    msg="超超超超超超超・・・おめでとう!!\n"
elif num<=3:
    msg="チョベリグ!\n"
elif num<=9:
    msg="ふつー\n"
elif num<=11:
    msg="チョベリブ!\n"
else:
    msg="がび〜〜〜〜〜〜〜〜〜〜ん\nチョベリバ(涙)"

print(msg)

良かったらコピペしてアレンジしてみて下さい。

print文の所で「チョベリなんとか・・・」ってありますけれど、かつて「コギャル」と呼ばれた方(多分今頃はアラフォーさん?)が女子高生だった頃に流行った言葉です。

チョベリグ・・・超ベリーグッド
チョベリブ・・・超ベリーブルー
チョベリバ・・・超ベリーバッド

だったかな。懐かしいな。

最後までお読み頂きありがとにゃん(=^x^=)

■ 参考文献の紹介 ■
じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。

Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何順でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

GASとPythonで、paiza レベルアップ問題集 配列メニュー を解いてみた7

このコーナーでは、学習コンテンツpaizaのレベルアップ問題集の中から気になった問題をPythonとGASの両方で解いてみます。

paizaでの回答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

配列の連結 (paizaランク D 相当)

要素数がN個の配列a、M個の配列bを連結したN+M個の配列を出力します。
例として、2個の配列a=[1,2]と、3個の配列b=[3,4,5]を連結した、[1,2,3,4,5]を出力します。

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

入力例
1行目 N,M
2行目 配列a
3行目 配列b

具体例
1行目 2,3
2行目 1,2
3行目 3,4,5

出力
1
2
3
4
5

解き方

手順として、
1.N,Mを読み込む
2.配列aを読み込む
3.配列bを読み込む
4.連結してループで出力する

コードを見てみましょう。

手順1:N,Mを読み込む
N,M=map(int,input().rstrip().split(‘ ‘))

手順2:配列aを読み込む
a=list(map(int,input().rstrip().split(‘ ‘)))

手順3:配列bを読み込む
b=list(map(int,input().rstrip().split(‘ ‘)))

手順4:連結してループで出力する
for num in a+b:
print(num)

配列の連結はa+bで可能です。

Pythonでの全コードはこちらになります。

N,M=map(int,input().rstrip().split(' '))
a=list(map(int,input().rstrip().split(' ')))
b=list(map(int,input().rstrip().split(' ')))

for num in a+b:
    print(num)

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

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

配列aの要素数N(2個)をB1、配列bの要素数M(3個)をB2に表示しました。
配列a=[1,2]は4行目、配列b=[1,2,3]は5行目です。
配列aと配列bの連結後(aにbを連結した[1,2,3,4,5])は8行目に出力します。

手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする
2:配列aの要素数2を読み込む
3:配列bの要素数3を読み込む
4:配列a自体を読み込む
5:配列b自体を読み込む
6:配列aの後ろに配列bを連結させる
7.スプレッドシートに出力する

手順1,2,3:N,Mを読み込む
sheet=SpreadsheetApp.getActiveSheet();
let N=sheet.getRange(1,2).getValue();
let M=sheet.getRange(2,2).getValue();

手順4,5:配列aとbを読み込む
let a=sheet.getRange(4,2,1,N).getValues();
let b=sheet.getRange(5,2,1,M).getValues();

手順6:配列aの後ろに配列bを結合させる
a[0]=a[0].concat(b[0]);

ログを使って確認
console.log(array);

手順8:スプレッドシートに出力する
sheet.getRange(8,2,1,a[0].length).setValues(a);

a[0].lengthとなっているのは、スプレッドシートは二次元配列だからです。

実行結果です。8行目の黄色いセルに入っています。

GASでの全コードはこちらになります。

function arrayJoin(){

//スプレッドシートを取得
sheet=SpreadsheetApp.getActiveSheet();

//配列aの要素数Nを取得
let N=sheet.getRange(1,2).getValue();

//配列bの要素数Mを取得
let M=sheet.getRange(2,2).getValue();

//配列aを取得
let a=sheet.getRange(4,2,1,N).getValues();

//配列bを取得
let b=sheet.getRange(5,2,1,M).getValues();

//ここで結合している!!
a[0]=a[0].concat(b[0]);

console.log(a);

sheet.getRange(8,2,1,a[0].length).setValues(a);

}

お疲れ様でした。

ブレイクタイムフォトはこちらになります。

お台場 レインボーブリッジと自由の女神と小さいけれど東京タワー

参考文献です。

GAS自作サンプル集に戻る
Python自作サンプル集に戻る
息抜きに、写真で癒し(=^x^=)

基本情報技術者試験
自己紹介

GASとPythonで、paiza レベルアップ問題集 配列メニュー を解いてみた6

このコーナーでは、学習コンテンツpaizaのレベルアップ問題集の中から気になった問題をPythonとGASの両方で解いてみます。

paizaでの回答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

問題文URL:部分配列 (paizaランク D 相当)

配列arrayは、array=[1,2,3,4,5]で、この配列のA番目からB番目までの部分配列を作ります。
Aが2、Bが4だとしたら、部分配列は[2,3,4]になります。
また、配列の要素数はNで、この場合はN=5です。

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

入力例
1行目 A,B,N
2行目 配列array

具体例
1行目 2,4,5
2行目 1,2,3,4,5

出力
2
3
4

解き方

手順として、
1.A,B,Nを読み込む
2.配列aを読み込む
3.ループの中でスライスを使って部分配列を出力する

コードを見てみましょう。

手順1:A,B,Nを読み込む
A,B,N=map(int,input().rstrip().split(‘ ‘))

手順2:配列aを読み込む
a=list(map(int,input().rstrip().split(‘ ‘)))

手順3:ループの中でスライスを使って部分配列を出力する
for num in array[A-1:B]:
 print(num)

スライスを使っている部分は、A=2番目はインデックス1、B=4番目はインデックス3になります。
なので、array[1:4]とすると、array[1]、array[2]、array[3]が出力されます。
[1:4]の4とすると、4より小さい3までの処理になります。
A=2、B=4を[1:4]にするには、array[A-1:B]です。

Pythonの全コードです。

#A番目、B番目、配列の要素数Nを読み込む
A,B,N=map(int,input().rstrip().split(' '))

#配列arrayを読み込む
array=list(map(int,input().rstrip().split(' ')))

#部分文字列をスライスを使って表示する
for num in array[A-1:B]:
    print(num)

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

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

左からA番目(2番目)をB1、左からB番目(4番目)をB2、配列の要素数N=5をB3に表示しました。
配列arrayは5行目にあり、要素交換後は8行目に出力します。

手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする
2:左からA番目(2番目)を読み込む
3:左からB番目(4番目)を読み込む
4:配列arrayの要素数N=5を読み込む
5:配列array自体を読み込む
6:arrayの部分配列用のarray2を用意する
7.スライスを使ってarray2に部分配列を格納する
8.スプレッドシートに出力する

手順1,2,3,4:A,B,Nを読み込む
const sheet=SpreadsheetApp.getActiveSheet();
let A=sheet.getRange(1,2).getValue();
let B=sheet.getRange(2,2).getValue();
let N=sheet.getRange(3,2).getValue();

手順5:配列aを読み込む
let a=sheet.getRange(5,2,1,N).getValues();

ログを使って確認
console.log(array);

手順6:arrayの部分配列用のarray2を用意する
let array2=[];

手順7:スライスを使ってarray2に部分配列を格納する
array2[0]=array[0].slice(A-1,B);

array2をログで確認
console.log(array);

手順8:スプレッドシートに出力する
sheet.getRange(8,2,1,array2[0].length).setValues(array2);

実行結果です。8行目の黄色いセルに入っています。

GASの全コードです。

function arraySlice(){

//シートを取得
sheet=SpreadsheetApp.getActiveSheet();

//配列のA番目(左から2番目)を取得
let A=sheet.getRange(1,2).getValue();

//配列のB番目(左から4番目)を取得
let B=sheet.getRange(2,2).getValue();

//配列の要素数Nを取得
let N=sheet.getRange(3,2).getValue();

//配列arrayを取得
let array=sheet.getRange(5,2,1,N).getValues();

console.log(array);

//部分配列をarray2に入れる
let array2=[];

//スライスを使ってarray2に部分配列を格納する
array2[0]=array[0].slice(A-1,B);

console.log(array2);

//スプレッドシートに出力する
sheet.getRange(8,2,1,array2[0].length).setValues(array2);


}

お疲れ様でした。

ブレイクタイムフォトはこちらになります。

スカイツリーと河津桜

参考文献です。

GAS自作サンプル集に戻る
Python自作サンプル集に戻る
息抜きに、写真で癒し(=^x^=)

基本情報技術者試験
自己紹介

GASとPythonで、paiza レベルアップ問題集 配列メニュー を解いてみた5

このコーナーでは、学習コンテンツpaizaのレベルアップ問題集の中から気になった問題をPythonとGASの両方で解いてみます。

paizaでの回答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

問題文URL:配列の要素の入れ替え (paizaランク D 相当)

配列arrayは、array=[1,2,3,4,5]で、この配列のA番目とB番目を入れ替えます。
Aが2、Bが3だとしたら入れ替え後の配列arrayは[1,3,2,4,5]になります。
また、配列の要素数はNで、この場合はN=5です。

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

入力例
1行目 A,B,N
2行目 配列array

具体例
1行目 2,3,5
2行目 1,2,3,4,5

出力
1,3,2,4,5

解き方1:方法1:tempを使って配列の要素を交換する

手順として、
1.A,B,Nを読み込む
2.配列aを読み込む
3.tempにarray[A-1]を代入する(配列は0番目スタート)
4.array[A-1]をarray[B-1]で置き換える
5.array[B-1]をtempで置き換える
6.ループで置き換え後のarrayを取り出す

コードを見てみましょう。

手順1:A,B,Nを読み込む
A,B,N=map(int,input().rstrip().split(‘ ‘))

手順2:配列aを読み込む
a=list(map(int,input().rstrip().split(‘ ‘)))

手順3:tempにarray[A-1]を代入する
temp=array[A-1]

手順4:array[A-1]をarray[B-1]で置き換える
array[A-1]=array[B-1]

手順5:array[A-1]をarray[B-1]で置き換える
array[B-1]=temp

手順6:ループで置き換え後のarrayを取り出す
for num in array:
print(num)

ここまでのコードです。

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

temp=array[A-1]
array[A-1]=array[B-1]
array[B-1]=temp

for num in array:
  print(num)

もう一つの方法として、手順3から手順5のtempを使って要素入れ替えをたった1行で行える方法もあります。

array[A-1],array[B-1]=array[B-1],array[A-1]

赤枠の方法での全コードです。

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

#ポイント ここで入れ替えている
array[A-1],array[B-1]=array[B-1],array[A-1]

for num in array:
    print(num)

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

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

左からA番目(2番目)をB1、左からB番目(3番目)をB2、配列の要素数NをB3に表示しました。
配列arrayは5行目にあり、要素交換後は8行目に出力します。

手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする
2:左からA番目(2番目)を読み込む
3:左からB番目(3番目)を読み込む
4:配列arrayの要素数Nを読み込む
5:配列arrayを読み込む
6:tempにarray[0][A-1]を代入する(スプレッドシートは2次元配列)
7.array[0][A-1]をarray[0][B-1]で置き換える
8.array[0][B-1]をtempで置き換える
9.ループで置き換え後のarrayを出力する

手順1,2,3,4:A,B,Nを読み込む
const sheet=SpreadsheetApp.getActiveSheet();
let A=sheet.getRange(1,2).getValue();
let B=sheet.getRange(2,2).getValue();
let N=sheet.getRange(3,2).getValue();

手順5:配列aを読み込む
let a=sheet.getRange(5,2,1,N).getValues();

ログを使って確認
console.log(array);

手順6:tempにarray[0][A-1]を代入する(スプレッドシートは2次元配列)
let temp;
temp=array[0][A-1];

手順7.array[0][A-1]をarray[0][B-1]で置き換える
array[0][A-1]=array[0][B-1];

手順8.array[0][B-1]をtempで置き換える
array[0][B-1]=temp;

置き換え後の配列をログで確認
console.log(array);

手順9.ループで置き換え後のarrayを出力する
sheet.getRange(8,2,1,N).setValues(array);

実行結果です。8行目の黄色いセルに入っています。

GAS の全コードです。

function arraytemp(){

  const sheet=SpreadsheetApp.getActiveSheet();

  //配列のA番目(左から2番目)を取得
  let A=sheet.getRange(1,2).getValue();

  //配列のB番目(左から3番目)を取得
  let B=sheet.getRange(2,2).getValue();

  //配列の要素数Nを取得
  let N=sheet.getRange(3,2).getValue();

  //配列arrayを取得 (5,2)からN=5行
  let array=sheet.getRange(5,2,1,N).getValues();

  console.log(array);

  let temp;
  temp=array[0][A-1];
  array[0][A-1]=array[0][B-1];
  array[0][B-1]=temp;

  console.log(array);
  
  sheet.getRange(8,2,1,N).setValues(array);
  


}

お疲れ様でした。

ブレイクタイムフォトはこちらになります。

青山フラワーマーケット

参考文献です。

GAS自作サンプル集に戻る
Python自作サンプル集に戻る
息抜きに、写真で癒し(=^x^=)

基本情報技術者試験
自己紹介

GASとPythonで、paiza レベルアップ問題集 配列メニュー を解いてみた4

このコーナーでは、学習コンテンツpaizaのレベルアップ問題集の中から気になった問題をPythonとGASの両方で解いてみます。

paizaでの回答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

問題文URL:【配列の書き換え (paizaランク D 相当)】

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

N個の配列の中にAという要素があったら、それをBに置き換える問題です。
A,B,Nは標準入力1行目に与えられます。

要素数N個の配列aが、標準入力2行目に与えられます。

Nが配列aの中に何個あるのか調べます。

この問題の具体例は、

入力例1
3 1 5
1 2 3 4 5

出力例1
1
2
1
4
5

入力例1行目の標準入力1行目より、探す要素A=3、置換する要素はB=1,配列の要素数N=5となります。
入力例2行目の標準入力より、配列aは1,2,3,4,5となります。

出力例より、置換後の配列aは1,2,1,4,5となり、3が1に置換されます。

手順として、
1.A,B,Nを読み込む
2.配列aを読み込む
3.ループで配列aの各要素を調べる
4.IF文でもしもa[i]がAだったら、a[i]をBに置き換える
5.置換後の配列aを出力する
と、なります。

コードを見てみましょう。

手順1:A,B,Nを読み込む
A,B,N=map(int,input().rstrip().split(‘ ‘))

手順2:配列aを読み込む
a=list(map(int,input().rstrip().split(‘ ‘)))

手順3:ループで配列aの各要素を調べる
手順4:IF文でもしもa[i]がAだったら、a[i]をBに置き換える

for i in range(N):
    if a[i]==A:
        a[i]=B

手順5:置換後の配列aを出力する

for num in a:
    print(num)

全コードはこのようになります。


'''
N個の配列aのうち、
要素がAのものをBに書き換える 

A B N
a_1 a_2 ... a_N

'''

A,B,N=map(int,input().rstrip().split(' '))
a=list(map(int,input().rstrip().split(' ')))

for i in range(N):
    if a[i]==A:
        a[i]=B

for num in a:
    print(num)

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

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

置換前の要素AをB1、置換後の要素BをB2、配列の要素数NをB3に表示しました。
置換前の配列aをB5からF5、置換後の配列aをB7からF7に表示しました。

手順はこのようになります。
1:置換前の要素Aを読み込む
2:置換後の要素Bを読み込む
3:配列aの要素数Nを読み込む
4:配列aを読み込む
5:ループとIF文で要素AをBに置き換える
6:置換後の配列aを出力する

手順1,2,3:A,B,Nを読み込む
const sheet=SpreadsheetApp.getActiveSheet();
let A=sheet.getRange(1,2).getValue();
let B=sheet.getRange(2,2).getValue();
let N=sheet.getRange(3,2).getValue();

ログを使ってA,B,Nが読み込めたことを確認
console.log(A);
console.log(B);
console.log(N);

手順4:配列aを読み込む
let a=sheet.getRange(5,2,1,N).getValues();

ログを使って配列aが読み込めたことを確認
console.log(a);

手順5:ループとIF文で要素AをBに置き換える

  for(let i=0;i<N;i++){
    if(a[0][i]==A){
      a[0][i]=B
    }
  }

a[0][i]となっているのは、スプレッドシート上で二次元配列として扱っているので、配列aの0行目のi列目をループで回してIFで調べています。

ログで配列Aが書き換えられたことを確認
console.log(a)

手順6:置換後の配列aを出力する
sheet.getRange(7,2,1,N).setValues(a);

実行結果です。

全コードはこの様になります。


function arrayReplacement(){
  const sheet=SpreadsheetApp.getActiveSheet();
  let A=sheet.getRange(1,2).getValue();
  let B=sheet.getRange(2,2).getValue();
  let N=sheet.getRange(3,2).getValue();

  console.log(A);
  console.log(B);
  console.log(N);

  let a=sheet.getRange(5,2,1,N).getValues();
  console.log(a);

  for(let i=0;i<N;i++){
    if(a[0][i]==A){
      a[0][i]=B
    }
  }

  console.log(a)

  sheet.getRange(7,2,1,N).setValues(a);

}

お疲れ様でした。

ブレイクタイムフォトはこちらになります。

横浜ランドマークタワーから撮った、みなとみらいの夜景

参考文献です。

GAS自作サンプル集に戻る
Python自作サンプル集に戻る
息抜きに、写真で癒し(=^x^=)

基本情報技術者試験
自己紹介

GASとPythonで、paiza レベルアップ問題集 配列メニュー を解いてみた3

このコーナーでは、学習コンテンツpaizaのレベルアップ問題集の中から気になった問題をPythonとGASの両方で解いてみます。

paizaでの回答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

問題文URL:【配列の検索】何個ある? Boss (paizaランク D 相当)

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

配列の中にNという数が何個あるのか調べます。
配列の要素数はMです。
それらが標準入力1行に与えられます。

要素数M個の配列をaが、標準入力2行目に与えられます。

Nが配列aの中に何個あるのか調べます。

この問題の具体例は、

入力例1
1 5
1 1 1 2 2

出力例1
3

なので、N=1,M=5、配列aは1,1,1,2,2となります。

手順として、
1.NとMを読み込む
2.配列aを読み込む
3.Nは配列aの中に何回登場するのかを求める。

と、なります。

コードを見てみましょう。

手順1:調べる数Nと配列の要素数を読み込む
N,M=map(int,input().rstrip().split(‘ ‘))

手順2:配列aを読み込む
a=list(map(int,input().rstrip().split(‘ ‘)))

手順3:Nは配列aの中に何回登場するのか調べる
print(a.count(N))

配列名.count(登場回数を調べる要素)で、Nは配列aに何回登場するのかを求めています。

全コードはこのようになります。

N,M=map(int,input().rstrip().split(' '))
a=list(map(int,input().rstrip().split(' ')))

print(a.count(N))

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

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

配列の何番目なのか調べる数NをB1、配列の個数MをB2、配列をB4からF4までM個分=この場合5個
Nが配列aの何番目にあるのかをB6に表示させます。

手順はこのようになります。
1:配列の左から何番目にあるのか調べる数Nを読み込む
2:配列の要素数Mを読み込む
3:配列aを読み込む
4:Nが配列aの左から何番目に登場するのか求めて結果を表示する
5:Nの登場回数をシートのB6に出力する

手順1,2:N,Mを読み込む
const sheet=SpreadsheetApp.getActiveSheet();
let N=sheet.getRange(1,2).getValue();
let M=sheet.getRange(2,2).getValue();

手順3:配列aを読み込む
let a=sheet.getRange(4,2,1,M).getValues();

B4から1行分、M列分取得しています。

console.log(N);
console.log(M);
console.log(a)

で、N,Mと配列aがきちんと読み込めたかどうか確認するために、ログに表示しました。

手順4:Nが配列aの中に何回登場するのか求めて結果を表示する
Nの出現回数を数える変数をNcountとします。
二次元配列a[0][0]からa[0][4]までNと同じかどうか調べています。
同じの場合はNcountをインクリメントしています。

let Ncount=0;
  for (let i=0;i<M;i++){
    if (a[0][i]===N){
      Ncount++
    }
  }
  console.log(Ncount);

ログです。

手順5:Nの登場回数をシートのB6に出力する
sheet.getRange(6,2).setValue(Ncount);

実行結果です。

全コードはこの様になります。

function whatCount(){
  const sheet=SpreadsheetApp.getActiveSheet();
  let N=sheet.getRange(1,2).getValue();
  let M=sheet.getRange(2,2).getValue();

  let a=sheet.getRange(4,2,1,M).getValues();

  console.log(N);
  console.log(M);
  console.log(a)

  let Ncount=0;
  for (let i=0;i<M;i++){
    if (a[0][i]===N){
      Ncount++
    }
  }
  console.log(Ncount);
  sheet.getRange(6,2).setValue(Ncount);

}

お疲れ様でした。

ブレイクタイムフォトはこちらになります。

お台場 自由の女神

参考文献です。

GAS自作サンプル集に戻る
Python自作サンプル集に戻る
息抜きに、写真で癒し(=^x^=)

基本情報技術者試験
自己紹介