【Pythonクラスの継承とメソッドのオーバーライド】ゲゲゲの鬼太郎キャラの例

この記事を読むことで、

・クラスの継承をゲゲゲの鬼太郎のキャラクターと一般人の例

・親クラスを一般人、子クラスを鬼太郎たち妖怪

・メソッドのオーバーライドのコード

・一般的なループと内包表記を使ったループの復習

の概要が掴めます。

親(スーパー)クラスPeopleを継承して、小クラスGegegeを作ります。
どちらにもactionというメソッドがあり、親クラスPeopleの方のactionでは、「通勤電車に乗った」という動きを、小クラスGegegeのactionでは「妖術を使った」という動きにしました。

ループも使うので、一般的なループの書き方と【内包表記】を使ったループの書き方も掲載します。

「親クラスPeople」に登場する一般人は、「ヤマダ」さん、「サトウ」さん、「ヒガ」さん、「シマブクロ」さんです。
各々の一般人を引数にして、それぞれ「yamada,satou,higa,shimabukuro」というオブジェクトを作成しています。

また、「子クラスGegege」では「鬼太郎」、「ネコ娘」、「砂かけばばあ」、「ぬりかべ」のキャラを引数にして、それぞれ「kitarou,nekomusume,sunakakebabaa,nurikabe」というオブジェクトを作成しています。

親クラス「People」のコンストラクタでは、「selfとname」を引数にしています。actionメソッドでは「self.nameさんは電車に乗った。」という動きをprint文で作ります。

class People:
    def __init__(self,name):
        self.name=name

    def action(self):
        print('  【'+self.name+'さん】は「電車」に乗った。')

小クラス「Gegege」では、「self.nameさんは妖術を使って戦った!!」という動きを作ります。

#子クラス「Gegege」で鬼太郎たちが戦う動きを掲載
class Gegege(People):
    def action(self):
        print('【'+self.name+'】は【妖術】を使って戦った!!')

このように、同じ名前のメソッドを、小クラスでは親クラスとは別の動きにすることを、メソッドのオーバーライドと言います。

また、子クラスのGegegeでは、コンストラクタはありませんが、自動的に親クラスのコンストラクタが呼ばれます。

一般人と鬼太郎たちのオブジェクトを生成するコードです。

#一般人と鬼太郎たち妖怪のオブジェクトを作成
yamada=People('ヤマダ')
satou=People('サトウ')
higa=People('ヒガ')
shimabukuro=People('シマブクロ')
kitarou=Gegege('鬼太郎')
nekomusume=Gegege('ネコ娘')
sunakakebabaa=Gegege('砂かけばばあ')
nurikabe=Gegege('ぬりかべ')

上記のオブジェクトをarrayという配列に入れます。

#オブジェクトを配列に格納
array=[yamada,satou,higa,shimabukuro,kitarou,nekomusume,sunakakebabaa,nurikabe]

この配列をループで取り出して、メソッドactionを呼ぶことによって、下記の実行結果を得られます。
ループのコードと、実行結果です。

#ループで各オブジェクとを動かしてみる
for man in array:
    man.action()

また、上記のループを内包表記で書いた場合のコードです。

#上記ループの内包表記
[man.action() for man in array]    

このように、内包表記では1行で書き現すことが出来ました。

ここまでのコードを全て掲載します。

#親クラス「People」にはコンストラクタと一般人の動きをactionメソッド
class People:
    def __init__(self,name):
        self.name=name

    def action(self):
        print('【'+self.name+'さん】は「電車」に乗った。')


#子クラス「Gegege」で鬼太郎たちが戦う動きを掲載
class Gegege(People):
    def action(self):
        print('【'+self.name+'】は【妖術】を使って戦った!!')


#一般人と鬼太郎たち妖怪のオブジェクトを作成
yamada=People('ヤマダ')
satou=People('サトウ')
higa=People('ヒガ')
shimabukuro=People('シマブクロ')
kitarou=Gegege('鬼太郎')
nekomusume=Gegege('ネコ娘')
sunakakebabaa=Gegege('砂かけばばあ')
nurikabe=Gegege('ぬりかべ')


#オブジェクトを配列に格納
array=[yamada,satou,higa,shimabukuro,kitarou,nekomusume,sunakakebabaa,nurikabe]


#内包表記でループを1行に
[man.action() for man in array]

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

通勤通学で使う方もいらっしゃる、東京モノレールです。
羽田空港第二ターミナルまで行きます。

ご精読誠にありがとうございました。

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

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

六本木ヒルズ、ハロウィンでトリックオアトリート!?

ご覧頂きまして、誠にありがとうございます。
写真スライドショーが作れる動画編集ソフトを使って、YouTubeTikTokThreadsにUPしてます。

この写真は、2017年秋(コロナ前)に六本木ヒルズで撮影した、ハロウィンの写真です。かわいいお化けカボチャの写真が撮れました。

※ 音量注意 ※

●YouTube

● TikTok

動画の中から写真を掲載致します。

お化けカボチャと六本木の夜景

お化けカボチャのどあっぷ

スカイデッキからは東京タワーが見れます。

個人的にはこれが1番のお気に入り!!

今日も見て下さって、ありがとうございました (=^x^=)

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

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

インスタ再開しました。

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

■ 関連記事 ■

自己紹介


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

初めてのPhotoshop

写真素材素材【写真AC】

写真ACプロフィールページ

目白庭園の紅葉

ご覧頂きまして、誠にありがとうございます。
写真スライドショーが作れる動画編集ソフトを使って、YouTubeTikTokThreadsにUPしてます。

目白庭園の紅葉は、和の癒し。
入場料は300円ですが、その分じっくりと綺麗なもみじの写真が撮れました。

※ 音量注意 ※

●YouTube

● TikTok

今日も見て下さって、ありがとうございました (=^x^=)

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

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

インスタ再開しました。

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

■ 関連記事 ■

自己紹介


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

初めてのPhotoshop

写真素材素材【写真AC】

写真ACプロフィールページ

東京メガイルミ!大井競馬場

ご覧頂きまして、誠にありがとうございます。
写真スライドショーが作れる動画編集ソフトを使って、YouTubeTikTokThreadsにUPしてます。

競馬場ならではの迫力のイルミネーション!
噴水やレトロな街並みも。

※ 音量注意 ※

●YouTube

● TikTok

動画の中から写真を掲載致します。

大樹の広場

大樹と星。

オーロラ

日の丸の噴水

竹林

騎手の方のユニフォーム

懐かしのダイヤル式公衆電話!!

昭和レトロな雰囲気

噴水で締めます。

今日も見て下さって、ありがとうございました (=^x^=)

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

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

インスタ再開しました。

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

■ 関連記事 ■

自己紹介


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

初めてのPhotoshop

写真素材素材【写真AC】

写真ACプロフィールページ

恵比寿ガーデンプレイス、バカラのシャンデリア

ご覧頂きまして、誠にありがとうございます。
写真スライドショーが作れる動画編集ソフトを使って、YouTubeTikTokThreadsにUPしてます。

フランスのクリスタルメーカー、バカラのシャンデリアを見に、恵比寿まで行ってきました。

※ 音量注意 ※

●YouTube

● TikTok

動画の中から写真を掲載致します。

お、石造か!!

俺のBakery & Cafe

画質がイマイチだけど、AR体験も出来ました。

今日も見て下さって、ありがとうございました (=^x^=)

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

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

インスタ再開しました。

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

■ 関連記事 ■

自己紹介


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

初めてのPhotoshop

写真素材素材【写真AC】

写真ACプロフィールページ

お台場イルミネーション

ご覧頂きまして、誠にありがとうございます。
写真スライドショーが作れる動画編集ソフトを使って、YouTubeTikTokThreadsにUPしてます。

2021年、お台場のイルミネーションで、自由の女神、レインボーブリッジ、東京タワー、観覧車、ガンダム、フジテレビなどを撮影しました。

お台場はロケ地などにも使われていて、最近ですとチェリまほ(30歳まで童貞だと魔法使いになれるらしい)のエンディングにも使われていました。

赤楚衛二さん演じる安達清と、町田啓太さん演じる黒沢優一のデートシーンをイメージしながら撮影しました。

※ 音量注意 ※

●YouTube

● TikTok

動画の中から写真を掲載致します。

新橋からゆりかもめに乗って

お台場に到着。

ここの観覧車はチェリまほのエンディングにも出てきた!!

ガンダムが燃えている!!燃え上がれ〜〜

レインボーブリッジ

今日も見て下さって、ありがとうございました (=^x^=)

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

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

インスタ再開しました。

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

■ 関連記事 ■

自己紹介


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

初めてのPhotoshop

写真素材素材【写真AC】

写真ACプロフィールページ


paiza レベルアップ問題集 「STEP: 4 割り切れる数だけ出力」をPythonとGASで解いてみた

この記事を読むことで、「3で割り切れる数のみを出力する処理」を、PythonとGASの両方のコードでForループとIF文を使って習得することが可能です。

Pythonでは、基本的なループとIF分岐のコードの他にそれらを1行で書き表せる、
【内包表記】のコードも追記しております。

最初にPython、次にGASのコードを掲載します。

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

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

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

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

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

割り切れる数だけ出力 (paizaランク D 相当)

問題:
N個の整数 a_1, a_2, …, a_N が与えられます。
このN個の整数のうち、a_1 から順に「3で割り切れるか」判定し、割り切れる場合のみ改行区切りで出力してください。また、N個の整数には3で割り切れる数が少なくとも 1 つ含まれています。

この記事では入力例1の場合、N=6で6個の数値のリストに「1 2 3 4 5 6」が与えられたという条件で解いて行きます。

入力例1
6
1 2 3 4 5 6

出力例1
3
6

ではまず、Pythonで解いてみます。
今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。
(入力例1をそのままioにコピーしただけ。)

手順として、
1:標準入力でリストの個数を取得
2:標準入力でリストを取得
2:ForループとIFで剰余演算子「%」を使って「%3==0」を「3で割り切れる数」と判定して出力

まずは、基本的なForとIFを用いたコードです。

#リストの数値の個数を取得
N=int(input())

#リストを取得
array=list(map(int,input().rstrip().split(' ')))

#For文とIF文でリストの数値が3で割り切れる場合のみ出力する
for num in array:
    if num%3==0:
        print(num)

次に、上記のForとIFの箇所に【内包表記】を施したコードです。

#リストの数値の個数を取得
N=int(input())

#リストを取得
array=list(map(int,input().rstrip().split(' ')))

#【内包表記】For文とIF文でリストの数値が3で割り切れる場合のみ出力する
[print(num) for num in array if num%3==0]        

ioの出力結果です。

<<GASでの解き方>>

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

黄色いセルの所に「3で割り切れる数」を出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

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

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

2:スプレッドシートの緑色のセルから配列の個数を取得する

3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

4:ログで配列が取得できたことを確認

5:スプレッドシードに2次元配列として出力するarray2を宣言

6:ForループとIF文で剰余演算子「%」を使って「%3==0」を「3で割り切れる数」と判定して配列array2に追加。

7:スプレッドシート出力前に「3で割り切れる数」が格納された二次元配列array2のログ出力で確認する

8:スプレッドシートの黄色いセルに「3で割り切れる数」が格納された二次元配列array2を出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:スプレッドシートの緑色のセルから配列の個数を取得する

const N=ss.getRange(1,2).getValue();

手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

const array=ss.getRange(4,1,1,N).getValues();

手順4:ログで配列を取得できたことを確認

console.log(array);

手順5:スプレッドシードに2次元配列として出力するarray2を宣言

let array2=[]

手順6:ForループとIF文で剰余演算子「%」を使って「%3==0」を「3で割り切れる数」と判定して配列array2に追加。
スプレッドシートでは2次元配列で格納されているので、array[0][i]と記述して、配列の1行目をループで配列の中身が奇数かどうか確認しています。

//ForループとIF文で剰余演算子「%」を使って「%3==0」を「3で割り切れる数」と判定して配列array2に追加。
  for (let i = 0; i < N; i++) {
    if (array[0][i] % 3 == 0) {
      array2.push([array[0][i]]);
    }
  }

手順7:スプレッドシート出力前に「3で割り切れる数」が格納された二次元配列array2のログ出力で確認する

console.log(array2);

手順8:スプレッドシートの黄色いセルに「3で割り切れる数」が格納された二次元配列array2を出力する

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

(7,1,array2.length)は、スプレッドシートのセルA7からarray2の長さ分のセル範囲を確保して、「3で割り切れる数」が格納された配列のarray2を出力するように設定しています。

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

function loop2no4() {

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

  //スプレッドシートの緑色のセルから配列の個数を取得する
  const N = ss.getRange(1, 2).getValue();

  //配列arrayを宣言して、灰色のセルの範囲の配列を格納する
  const array = ss.getRange(4, 1, 1, N).getValues();

  //ログで配列が取得できたことを確認
  console.log(array);

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


  //ForループとIF文で剰余演算子「%」を使って「%3==0」を「3で割り切れる数」と判定して配列array2に追加。
  for (let i = 0; i < N; i++) {
    if (array[0][i] % 3 == 0) {
      array2.push([array[0][i]]);
    }
  }

  //スプレッドシート出力前に「3で割り切れる数」が格納された二次元配列array2のログ出力で確認する
  console.log(array2);


  //スプレッドシートの黄色いセルに「3で割り切れる数」が格納された二次元配列array2を出力する
  ss.getRange(7, 1, array2.length).setValues(array2);

}

宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。

バカラのシャンデリア(ピンク)

■ 参考文献の紹介■

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

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

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

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

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

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

paiza レベルアップ問題集 「STEP: 3 奇数だけ出力」をPythonとGASで解いてみた

この記事を読むことで、PythonとGASの両方のコードで、ForループとIF文を使った奇数のみの出力の仕方を学べます。Pythonのコードでは、基本的なFor文・IF文のコードの他に、【内包表記】を使ってそれらを1行で記述するコードも追記しております。
最初にPython、次にGASのコードを掲載します。

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

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

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

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

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

奇数だけ出力 (paizaランク D 相当)

問題:
N 個の整数 a_1, a_2, …, a_N が与えられます。
この N 個の整数のうち、a_1 から順に奇数か偶数か判定し、奇数の場合のみ改行区切りで出力してください。
また、N 個の整数には奇数が少なくとも 1 つ含まれています。

この記事では、入力例1でN=5の5個の数値のリストに「1 2 3 4 5」が与えられて、その中から奇数を出力するという条件で解いて行きます。

入力例1
5
1 2 3 4 5

出力例1
1
3
5

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

今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。
(入力例1をそのままioにコピーしただけ。)

手順として、
1:標準入力でリストの個数を取得
2:標準入力でリストを取得
2:ForループとIFで剰余演算子「%」を使って「%2==1」を奇数と判定して出力

まずは、基本的なForとIFを用いたコードです。

#数値の個数N
N=int(input())

#N個のリストarray
array=list(map(int,input().rstrip().split(' ')))

#ループで奇数の時だけ出力する
for num in array:
    if num%2==1:
        print(num)

次に、上記のForとIFに内包表記を施したコードです。

#数値の個数N
N=int(input())

#N個のリストarray
array=list(map(int,input().rstrip().split(' ')))

#【内包表記】ループで奇数の時だけ出力する
[print(num) for num in array if num%2==1]        

【内包表記】で、ループの部分が1行になっていることが確認出来ました。

Ioの出力結果です。

<<GASでの解き方>>

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

黄色いセルの所に奇数を出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

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

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

2:スプレッドシートの緑色のセルから配列の個数を取得する


3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する


4:ログで配列が取得できたことを確認


5:スプレッドシードに2次元配列として出力するarray2を宣言


6:ForループとIF文で剰余演算子「%」を使って「%2==1」を奇数と判定して配列array2に追加。


7:スプレッドシート出力前に奇数が格納された二次元配列array2のログ出力で確認する

8:スプレッドシートの黄色いセルに奇数が格納されたarray2を出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:スプレッドシートの緑色のセルから配列の個数を取得する

const N=ss.getRange(1,2).getValue();

手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

const array=ss.getRange(4,1,1,N).getValues();

手順4:ログで配列を取得できたことを確認

console.log(array);

手順5:スプレッドシードに2次元配列として出力するarray2を宣言

let array2=[]

手順6:ForループとIF文で剰余演算子「%」を使って「%2==1」を奇数と判定して配列array2に追加。

スプレッドシートでは2次元配列で格納されているので、array[0][i]と記述して、配列の1行目をループで配列の中身が奇数かどうか確認しています。

//ForループとIF文で剰余演算子「%」を使って「%2==1」を奇数と判定して配列array2に追加。
  for(let i=0;i<N;i++){
    if(array[0][i]%2==1){
      array2.push([array[0][i]]);
    }
  }

手順7:スプレッドシート出力前に奇数が格納された二次元配列array2のログ出力で確認する

console.log(array2);

手順8:スプレッドシートの黄色いセルに奇数が格納されたarray2を出力する

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

(7,1,array2.length)は、スプレッドシートのセルA7からarray2の長さ分(array2.length)のセル範囲を確保して、奇数が格納された配列のarray2を出力するように設定しています。

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

function loop2no3() {

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

  //スプレッドシートの緑色のセルから配列の個数を取得する
  const N = ss.getRange(1, 2).getValue();

  //配列arrayを宣言して、灰色のセルの範囲の配列を格納する
  const array = ss.getRange(4, 1, 1, N).getValues();

  //ログで配列が取得できたことを確認
  console.log(array);

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


  //ForループとIF文で剰余演算子「%」を使って「%2==1」を奇数と判定して配列array2に追加。
  for (let i = 0; i < N; i++) {
    if (array[0][i] % 2 == 1) {
      array2.push([array[0][i]]);
    }
  }

  //スプレッドシート出力前に奇数が格納された二次元配列array2のログ出力で確認する
  console.log(array2);


  //スプレッドシートの黄色いセルに奇数が格納されたarray2を出力する
  ss.getRange(7, 1, array2.length).setValues(array2);
}

宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。

目白庭園の紅葉

■ 参考文献の紹介■

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

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

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

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

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

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

paiza レベルアップ問題集 「STEP: 2 未知数個の文字列の受け取り」をPythonとGASで解いてみた

この記事を読むことで、PythonとGASの両方のコードで、whileとIF文を使った後判定のループの書き方を学べます。

ループ変数iの動きが分かるようにPythonとGASの両方共にトレースのコードも追記致しました。

Whileループでは、ループの前に必ず初期値を設定すること、無限ループにならないように変数のインクリメントをすることを確認しながらコードを書いて行きました。

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

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

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

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

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

未知数個の文字列の受け取り (paizaランク D 相当)

問題:
複数の文字列が入力されます。文字列の数はわかりません。
EOF が入力されるまで、受け取った文字列を改行区切りで出力してください。

この記事では、入力例1でリストに「abc def ghi jkl EOF」が与えられたという条件で解いて行きます。

入力例1
abc def ghi jkl EOF

出力例1
abc
def
ghi
jkl
EOF

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

今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。
https://paiza.io/ja/projects/new

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。
(入力例2をそのままioにコピーしただけ。)

手順として、
1:標準入力でリストを取得
2:whileループの前にループ変数iを0で初期化する
3:whileループでまずはリストの値を出力して、後判定でリストの値が「EOF」だったらループを抜ける
4:iをインクリメントして無限ループを防ぐ

では、ループ内の動きとiの値の変動のトレースをしたコードです。


#長さ不明の文字列を標準入力で受け取る
array=input().rstrip().split(' ')

#whileループの初期値を設定
i=0

print('<<<ループに入ります>>>')
while True:
    #処理前のiの値
    print('処理前のi:'+str(i))
    
    print(i,array[i])
    if array[i]=="EOF":
        break
    #無限ループにならないようにインクリメント
    i+=1

    #処理後のiの値
    print('処理後のi:'+str(i))
    print('--------------------------')

#ループを抜けた後のiの値
print('<<<ループを抜けました>>>')
print('ループを抜けた後のi:'+str(i))

このままですと、この問題の解答に対して冗長な部分があるので、トレースのコードを削除した提出用のコードに書き直しました。


#長さ不明の文字列を標準入力で受け取る
array=input().rstrip().split(' ')

#whileループの初期値を設定
i=0

while True:
    print(array[i])
    if array[i]=="EOF":
        break
    #無限ループにならないようにインクリメント
    i+=1

ioの出力確認をしてコードを提出。

<<GASでの解き方>>

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

黄色いセルの所に文字列を出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

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

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

2:配列の長さは最終列を取得して求める


3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

4:ログで配列が取得できたことを確認

5:スプレッドシードに2次元配列として出力するarray2を宣言

6:ループに入る前にiを0で初期化

7:whileとIF文で「EOF」までarray2に追加するループを作る

8:スプレッドシート出力前にarray2のログ出力で確認する

9:スプレッドシートの黄色いセルに文字列が格納されたarray2を出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:配列の長さは最終列を取得して求める

const N=ss.getLastColumn();

手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

const array = ss.getRange(2, 1, 1, N).getValues();

手順4:ログで配列を取得できたことを確認

console.log(array);

手順5:スプレッドシードに2次元配列として出力するarray2を宣言

let array2=[]

手順6:ループに入る前にiを0で初期化

let i=0;


手順7:whileとIF文で「EOF」までarray2に追加するループを作る

※無限ループにならないよう、i=0で初期化した上に、i++でインクリメントしています※

スプレッドシートでは2次元配列で格納されているので、array[0][i]と記述して、配列の1行目をループで配列の中身が-1以上かどうか確認しています。

トレースコードi=0

トレースコードi=1

トレースコードi=2

トレースコードi=3

トレースコードi=4

//whileとIF文で「EOF」までarray2に追加するループを作る
  while(true){
    console.log(`処理前のiの値:${i}`);
    array2.push([array[0][i]]);
    console.log(`iの値:${i}  array[0][i]の値:${array[0][i]}`);
    
    if(array[0][i]=='EOF'){
      break;
    }
    i++; //無限ループにならないようにインクリメントを忘れない!!
    console.log(`処理後のiの値:${i}`);
    console.log('--------------------------------');
  }

  console.log('<<<ループを抜けました。>>>');
  console.log(`ループを抜けた後のiの値: ${i}`);

手順7:スプレッドシート出力前にarray2のログ出力で確認する

console.log(array2);

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

ss.getRange(5,1,N).setValues(array2);

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

function loop2no2() {

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

  //配列の長さは最終列を取得して求める
  N = ss.getLastColumn();


  //配列arrayを宣言して、灰色のセルの範囲の配列を格納する
  const array = ss.getRange(2, 1, 1, N).getValues();

  //ログで配列が取得できたことを確認
  console.log(array);


  //スプレッドシードに2次元配列として出力するarray2を宣言
  let array2 = []

  //ループに入る前にiを0で初期化
  let i = 0;

  console.log('<<<ループに入ります!!>>>');

  //whileとIF文で「EOF」までarray2に追加するループを作る
  while (true) {
    console.log(`処理前のiの値:${i}`);
    array2.push([array[0][i]]);
    console.log(`iの値:${i}  array[0][i]の値:${array[0][i]}`);

    if (array[0][i] == 'EOF') {
      break;
    }
    i++; //無限ループにならないようにインクリメントを忘れない!!
    console.log(`処理後のiの値:${i}`);
    console.log('--------------------------------');
  }

  console.log('<<<ループを抜けました。>>>');
  console.log(`ループを抜けた後のiの値: ${i}`);

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


  //スプレッドシートの黄色いセルに文字列が格納されたarray2を出力する
  ss.getRange(5, 1, N).setValues(array2);
}

宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。

お台場の観覧車

■ 参考文献の紹介■

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

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

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

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

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

←前の問題へ          次の問題へ(準備中)→

paiza レベルアップ問題集 「STEP: 1 未知数個の数の受け取り」をPythonとGASで解いてみた

この記事を読むことで、PythonでのForループの基本的な書き方及び、内包表記によるループの書き方とGASのwhileを使ったループの書き方を学べます。

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

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

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

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

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

未知数個の数の受け取り (paizaランク D 相当)

問題:
長さがわからない数列 a が入力されます。
-1 が入力されるまで、受け取った数を改行区切りで出力してください。

この記事では、入力例2でリストに「10 2 5 13 5 20 1 5 6 -1」が与えられたという条件で解いて行きます。

入力例2
10 2 5 13 5 20 1 5 6 -1

出力例2
10
2
5
13
5
20
1
5
6
-1

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

今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。
(入力例2をそのままioにコピーしただけ。)

手順として、
1:標準入力でリストを取得
2:len関数でリストの長さを取得して変数Nに格納
3:ループで長さN分ループを回して出力

では、コードを見て行きます。

#未知数個の配列を受け取る
array=list(map(int,input().rstrip().split()))

#配列の長さ
N=len(array)


#ループで取得
for i in range(N):
    print(array[i])

ioの出力確認をしてコードを提出。

次は、ループの所を内包表記で書いたコードです。

#未知数個の配列を受け取る
array=list(map(int,input().rstrip().split()))

#配列の長さ
N=len(array)

#ループで取得
[print(array[i]) for i in range(N)]

<<GASでの解き方>>

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

黄色いセルの所に配列を出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

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

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

2:配列の長さは最終列を取得して求める

3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

4:ログで配列が取得できたことを確認

5:スプレッドシードに2次元配列として出力するarray2を宣言

6:whileループで配列の要素が「-1」以上ならarray2に追加する

7:スプレッドシート出力前にarray2のログ出力で確認する

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

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:配列の長さはgetLastColumnメソッドを使って最終列を取得して求める

const N=ss.getLastColumn();

手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

const array = ss.getRange(2, 1, 1, N).getValues();

手順4:ログで配列を取得できたことを確認

console.log(array);

手順5:スプレッドシードに2次元配列として出力するarray2を宣言

let array2=[]

手順6:whileループで配列の要素が「-1」以上ならarray2に追加する

※無限ループにならないよう、i=0で初期化した上に、i++でインクリメントしています※

問題文の条件に
すべてのテストケースにおいて、以下の条件をみたします。
・ 0 ≦ a_i ≦ 100 (1 ≦ i ≦ N)
とありますので、whileでi>=-1の時にループを繰り返す処理を施しました。

スプレッドシートでは2次元配列で格納されているので、array[0][i]と記述して、配列の1行目をループで配列の中身が-1以上かどうか確認しています。

  //whileループで配列の要素が「-1」以上ならarray2に追加する
  let i=0
  while(array[0][i]>=-1){
    array2.push([array[0][i]]);
    i++;
  }

手順7:スプレッドシート出力前にarray2のログ出力で確認する

console.log(array2);

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

ss.getRange(5,1,N).setValues(array2);

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

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

  //配列の長さは最終列を取得して求める
  const N = ss.getLastColumn();

  //配列arrayを宣言して、灰色のセルの範囲の配列を格納する
  const array = ss.getRange(2, 1, 1, N).getValues();

  //ログで配列が取得できたことを確認
  console.log(array);

  //スプレッドシードに2次元配列として出力するarray2を宣言
  let array2 = []

  //whileループで配列の要素が「-1」以上ならarray2に追加する
  let i = 0
  while (array[0][i] >= -1) {
    array2.push([array[0][i]]);
    i++;
  }

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

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

}

宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。

お台場のガンダム
燃え上がっています。

■ 参考文献の紹介■

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

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

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

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

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

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