【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自作サンプル集へ戻る

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

【Pythonクラス爆速理解!!】「NiziU」のメンバーカラーでクラスを学習

この記事を読むことで、

・9人組ガールズグループ「NiziU」を通してPythonのクラスの初歩的なコードが書けるようになる

・改行の仕方の復習

・内包表記を使ったループの復習

の概要が掴めます。

クラス=設計図

インスタンス=クラスという設計図から作られた「具体的な」製品

と説明をすると、なんだか小難しい感じがするので、

クラス… NiziUの【名前】、【メンバーカラー】といったフォーマット

インスタンス… そのフォーマットから作った、MAKO; RIO; MAYA; RIKU; AYAKA; MAYUKA; RIMA; MIIHI; NINA
のメンバーごとの名前やメンバーカラーなど

と捉えると少し分かりやすくなるかもしれないです。

(ファンの愛称は、WithUという様です。)

クラスNiziUは、「名前」・「メンバーカラー」を持つ設計図です。
この設計図から作られた具体的なメンバーの、

「名前:MAKO , カラー:オレンジ」,
「名前:RIO , カラー:水色」,
「名前:MAYA , カラー:紫」,
「名前:RIKU , カラー:黄色」,
「名前:AYAKA , カラー:白」,
「名前:MAYUKA , カラー:薄緑」,
「名前:RIMA , カラー:赤」,
「名前:MIIHI , カラー:ピンク」,
「名前:NINA , カラー:青」

といった、クラスから作られた、「具体的なメンバーと担当カラー」をインスタンスとします。



まず、クラスのコードの説明をします。

initは、最初に自動的に呼ばれるメソッド(関数のこと。クラスでは関数をメソッドと呼びます)で、引数の「self」とは、MAKOさん、RIOさん、MAYAさん、RIKUさん、AYAKAさん、MAYUKAさん、RIMAさん、MIIHIさん、NINAさんといった、具体的なメンバー自身のことです。

initが呼ばれた後に、profile (プロフィール)というメソッドが呼び出され、ここで各メンバーの名前・担当カラーの紹介が出力されます。

class NiziU:
    def __init__(self,name,color):
        self.name=name
        self.color=color

    def profile(self):
        print('名前:【'+self.name+('】, カラー:【'+self.color+'】'))

次に、各メンバーを格納するリストmemberと、クラスNiziUからインスタンス化(実例化)した作られたオブジェクト(MAKOさん、RIOさん、MAYAさん、RIKUさん、AYAKAさん、MAYUKAさん、RIMAさん、MIIHIさん、NINAさん)をリストにappendを使って追加するコードです。

ここでは、memberというリストに追加しています

#メンバーリストの定義とインスタンス化
member=[]
member.append(NiziU('MAKO  ','オレンジ'))
member.append(NiziU('RIO   ','水色    '))
member.append(NiziU('MAYA  ','紫      '))
member.append(NiziU('RIKU  ','黄色    '))
member.append(NiziU('AYAKA ','白      '))
member.append(NiziU('MAYUKA','薄緑    '))
member.append(NiziU('RIMA  ','赤      '))
member.append(NiziU('MIIHI ','ピンク  '))
member.append(NiziU('NINA  ','青      '))

リストをループで取り出して、プロフィールメソッドを呼び出すコードです。

#基本的なループでメソッドを呼び出す
for oshi in member:
    oshi.profile()

この部分を内包表記で書くと、

#内包表記を使用
[oshi.profile() for oshi in member]

このように1行で書けます。

ここまでのコードと実行結果です。

class NiziU:
    def __init__(self,name,color):
        self.name=name
        self.color=color

    def profile(self):
        print('名前:【'+self.name+('】, カラー:【'+self.color+'】'))


#メンバーリストの定義とインスタンス化
member=[]
member.append(NiziU('MAKO  ','オレンジ'))
member.append(NiziU('RIO   ','水色    '))
member.append(NiziU('MAYA  ','紫      '))
member.append(NiziU('RIKU  ','黄色    '))
member.append(NiziU('AYAKA ','白      '))
member.append(NiziU('MAYUKA','薄緑    '))
member.append(NiziU('RIMA  ','赤      '))
member.append(NiziU('MIIHI ','ピンク  '))
member.append(NiziU('NINA  ','青      '))

#内包表記を使用
[oshi.profile() for oshi in member]

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

遊歩道の桜です。
それと、NiziUの曲2つです。

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

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

Python自作サンプル集へ戻る

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

【Pythonクラス爆速理解!!】「BE:FIRST」のメンバーのプロフィール(名前・出身地・身長・デビュー時年齢)でクラスを学習

この記事を読むことで、

・7人組ボーイズグループ「BE:FIRST」を通してPythonのクラスの初歩的なコードが書けるようになる

・改行の仕方の復習

・内包表記を使ったループの復習

の概要が掴めます。

クラス=設計図

インスタンス=クラスという設計図から作られた「具体的な」製品

と説明をすると、なんだか小難しい感じがするので、

クラス… メンバーの【名前】、【出身地】、【身長】、【デビュー時の年齢】といったフォーマット

インスタンス… そのフォーマットから作った、

「SOTA(ソウタ)・SHUNTO(シュント)・MANATO(マナト)・RYUHEI(リュウヘイ)・JUNON(ジュノン)・RYOKI(リョウキ)・LEO(レオ)」のメンバーごとの名前など

と捉えると少し分かりやすくなるかもしれないです。

まず、クラスBefirstのコードの説明をします。

initは、最初に自動的に呼ばれるメソッド(関数)で、引数のselfとは、SOTAさん、SHUNTOさん、MANATOさん、RYUHEIさん、JUNONさん、RYOKIさん、LEOさんといった、具体的なメンバー自身のことです。

initが呼ばれた後に、profile (プロフィール)というメソッドが呼び出され、ここで各メンバーの名前・出身地・身長・デビュー時年齢(2021年8月時点)の紹介が出力されます。

profileメソッドの身長とデビュー時の年齢は数値なのでstrで括っています。
また、結果が見やすいように【 】で括っています。

class Befirst:
    def __init__(self,name,place,height,age):
        self.name=name
        self.place=place
        self.height=height
        self.age=age  

    def profile(self):
        print(" 【"+self.name+"】:【"+self.place+"】:【"+str(self.height)+"】cm:【"+str(self.age)+"】歳")

次に、各メンバーを格納するリストmemberと、クラスBefirstからインスタンス化(実例化)して作られたオブジェクト(SOTAさん、SHUNTOさん、MANATOさん、RYUHEIさん、JUNONさん、RYOKIさん、LEOさん)をリストにappendを使って追加するコードです。

ここでは、memberというリストに追加しています

#メンバーのリストを作成
member=[]

#インスタンス化して作ったオブジェクトをリストに追加
member.append(Befirst("池亀樹音","東京都",183,23))
member.append(Befirst("上村礼王","埼玉県",179,22))
member.append(Befirst("三山凌輝","愛知県",177,22))
member.append(Befirst("島雄壮大","神奈川",174,20))
member.append(Befirst("廣瀬真人","福岡県",173,20))
member.append(Befirst("久保舜斗","愛知県",174,17))
member.append(Befirst("黒田竜平","愛知県",180,14))

メンバーを追加したリストmemberをループで取り出して、profileメソッドを呼び出すコードです。

#ループでプロフィールメソッドを呼び出す
for man in member:
    man.profile()

この部分を内包表記で書くと、

#ループで同様の処理を内包表記で書く処理
[man.profile() for man in member]

このように1行で書けます。

ここまでのコードと実行結果です。

class Befirst:
    def __init__(self,name,place,height,age):
        self.name=name
        self.place=place
        self.height=height
        self.age=age  

    def profile(self):
        print(" 【"+self.name+"】:【"+self.place+"】:【"+str(self.height)+"】cm:【"+str(self.age)+"】歳")


#メンバーのリストを作成
member=[]

#インスタンス化して作ったオブジェクトをリストに追加
member.append(Befirst("池亀樹音","東京都",183,23))
member.append(Befirst("上村礼王","埼玉県",179,22))
member.append(Befirst("三山凌輝","愛知県",177,22))
member.append(Befirst("島雄壮大","神奈川",174,20))
member.append(Befirst("廣瀬真人","福岡県",173,20))
member.append(Befirst("久保舜斗","愛知県",174,17))
member.append(Befirst("黒田竜平","愛知県",180,14))


#ループで同様の処理を内包表記で書く処理
[man.profile() for man in member]

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

しながわ花海道のコスモスです。

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

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

Python自作サンプル集へ戻る

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

【Python_立体図形】関数を使いこなして立体図形(立方体・直方体・円柱・三角錐・四角錐・円錐)の体積を求める

この記事を読むことで、

・関数で立体図形の体積を算出

・Pythonでの累乗(二乗、三乗)などの書き方

・ドリルの様に演習してPythonの関数に慣れる

についての概要が掴めます。


立方体についてですが、例えばサイコロも立方体です。
体積の求め方は、縦、横、高さをそのままかけた値です。

立方体は縦、横、高さの全てが同じ長さです。
今回は3cmの立方体の体積を求めます。

まず、辺の長さをここで定義しています。

side=3

次に関数を呼び出します。

volume=cube(side)

立方体の体積を求めるcube関数が引数にside(今回は3cm)で呼び出されました。

では、cube関数のコードです。

#立方体の体積を計算する関数
def cube(x):
    return x**3

このxの所に3が入って3乗の計算結果をreturnで返しています。
二乗でも考え方は同じですが、三乗ではこのように書いています。

x**3

それが戻り値としてvolumeに入ります。

volume=cube(side)

ここまでのコードと実行結果です。

#立方体の体積を計算する関数
def cube(x):
  return x**3

#辺の長さを定義
side=3

#関数を呼び出し
volume=cube(side)

#立方体の体積を表示
print('立方体の体積は【'+str(volume)+'】cm^3です。')


では次に、直方体の体積を求めます。

直方体の体積は、タテ×ヨコ×高さなので、この様にコードを書き換えました。
関数の名前を図形ごとに変えるのは手間ですので、これ以降「figure3d」という名称に致しました。

コードと実行結果です。

#直方体の体積を計算する関数
def figure3d(x,y,z):
  return x*y*z

#タテ、ヨコ、高さの辺の長さを定義
vertical=3
beside=5
height=7


#関数を呼び出し
volume=figure3d(vertical,beside,height)

#直方体の体積を表示
print('直方体の体積は【'+str(volume)+'】cm^3です。')

底面積である三角形の面積に高さをかけて3で割っています。

ここではタテ4cm、ヨコ5cm、高さ6cmとしています。
また、底面積が三角形であることと何々錐で3で割っているため、整数で求めています。
コードと実行結果です。

#三角錐の体積を計算する関数
def figure3d(x,y,z):
  return x*y/2*z/3

#タテ、ヨコ、高さを定義
vertical=4
beside=5
height=6


#関数を呼び出し
volume=figure3d(vertical,beside,height)

#三角錐の体積を表示
print('三角錐の体積は【'+str(int(volume))+'】cm^3です。')


次に四角錐(ピラミッド型)の体積を求めます。
こちらは、タテ5cm、ヨコ5cm、高さ6cmとしています。

#四角錐(ピラミッド)の体積を計算する関数
def figure3d(x,y,z):
  return x*y*z/3

#タテ、ヨコ、高さを定義
vertical=5
beside=5
height=6


#関数を呼び出し
volume=figure3d(vertical,beside,height)


#四角錐の体積を表示
print('四角錐(ピラミッド形)の体積は【'+str(int(volume))+'】cm^3です。')


円柱の体積は、円の面積に高さをかけて求めるので、円周率πを使うため、mathモジュールをインポートしました。
また、円周率は桁数が長いので、小数点以下3桁まで求める様にしました。

ここではこの記事に合わせて、円の半径を5cm、円柱の高さを10cmとしています。

#円周率πを使うため、mathモジュールをインポートする
import math

#円柱の体積を計算する関数
def figure3d(r,h):
  return math.pi*r**2*h

#半径と高さを定義
radius=5
height=10


#関数を呼び出し
volume=figure3d(radius,height)

#小数点以下3桁まで求める
volume=round(volume,3)

#円柱の体積を表示
print('円柱の体積は【'+str(volume)+'】cm^3です。')


最後に円錐(道路などにあるコーン)の体積を求めます。

底円の面積に高さをかけて3で割ると求められます。
円周率πを使うので、mathモジュールをインポートしています。
ここでは半径を4cm、高さを6cmとしています。

#円周率を使うため、mathモジュールをインポートする
import math


#円錐の体積を計算する関数
def figure3d(r,h):
  return math.pi*r**2*h/3

#半径と高さを定義
radius=4
height=6


#関数を呼び出し
volume=figure3d(radius,height)

#小数点以下3桁まで求める
volume=round(volume,3)

#円錐の体積を表示
print('円錐(コーン形)の体積は【'+str(volume)+'】cm^3です。')


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

稲村ヶ崎海岸です。江ノ電で行きました。

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

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

Python自作サンプル集へ戻る

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

【Python関数で長方形、三角形、台形】関数を「カレーライス」に例えて、平面図形の面積を求める

この記事を読むことで、

Pythonの関数をカレーライスを作る例を通して理解

簡単な平面図形の面積が求められる

についての概要が掴めます。

関数とは、ざっくり言って、「カレー鍋」です。
鍋に入れる「ジャガイモ、ニンジン」が引数、出てきた料理が戻り値です。

それでは、肩の力を抜いて、長方形、三角形、台形の面積を使いながら関数に慣れて行きましょう!


最初に、縦5cm、横3cmの長方形の面積を計算します。
コードと実行結果を載せます。

#長方形の面積を計算する関数
def rectangle(x,y):
  return x*y

#長方形の縦と横の長さを設定
vertical=5
beside=3

#長方形の面積を計算する関数を呼び出して戻り値をareaとする
area=rectangle(vertical,beside)

print('長方形の面積は【'+str(area)+'】cm^2+です。')

では、簡単ですが、このプログラムをトレースしてみます。
長方形面積は、「縦×横」ですね。

変数verticalに縦の長さをここでは「5」、変数besideに横の長さをここでは「3」とします。

長方形はrectangleなので、長方形を計算する関数をrectangleとしました。
ですので、カレー鍋がrectangleになります。

area=rectangle(vertical,beside)

これで、rectangleというカレー鍋に、ジャガイモのverticalと、ニンジンのbesideが入って煮込みます。

def rectangle(x,y): 
 return x*y

鍋に入れるときに、verticalはx、besideはyに入ります。

verticalやbesideが引数と呼ばれることに対し、x,yは仮引数と呼ばれます。

return x*y

で、出来上がったカレーライスがお手元に届けられます。

コードの縦verticalと横besideの値を変えると、当然求まってくる長方形の面積も変わりますので、コードを書き換えてみます。

縦8cm、横11cmにしてみます。

#長方形の面積を計算する関数
def rectangle(x,y):
  return x*y

#長方形の縦と横の長さを設定←ここの長さを変える
vertical=8
beside=11

#長方形の面積を計算する関数を呼び出して戻り値をareaとする
area=rectangle(vertical,beside)

print('長方形の面積は【'+str(area)+'】cm^2+です。')

ここで変数や関数名のことですが、基本的に英語にしますので、ローマ字でtate、yoko,chouhoukeiとは書かずに、縦(vertical)や横(beside)や長方形(rectangle)という名前にします。

英語が苦手でも今はGoogle翻訳なども使えるので、変数名を決める時の参考にしています。


今度は三角形を求められるようにコードを改変してみます。
関数の戻り値のところを2で割ると、お馴染みの公式、底辺×高さ÷2ですね。
割り算をしているので、int関数を使って整数値を求めています。

#三角形の面積を計算する関数
def triangle(x,y):
  return int(x*y/2)

#三角形の底辺と高さ
bottom=4
height=3

#三角形の面積を計算する関数を呼び出して戻り値をareaとする
area=triangle(bottom,height)

print('三角形の面積は【'+str(area)+'】cm^2+です。')

実行結果です。


最後に台形を求めるプログラムに変更致します。
台形(trapezoid)は、

(上底+下底)×高さ÷2

で求められます。

上底を5cm、下底を7cm、高さを4cmをします。
コードと実行結果です。

#台形の面積を計算する関数
def trapezoid(x,y,z):
  return int((x+y)*z/2)

#台形の上底と下底と高さ
top_side=5
bottom_side=7
height=4

#台形の面積を計算する関数を呼び出して戻り値をareaとする
area=trapezoid(top_side,bottom_side,height)

print('台形の面積は【'+str(area)+'】cm^2+です。')


関数って最初は面倒でしたが、慣れるととても便利です。
各機能が分かりやすくなって、コードも見やすくなります。

ざっとまとめると、関数がカレー鍋、引数がジャガイモやニンジン、戻り値が出来上がったカレーです。

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

しながわ花海道に咲いていた、アオイ科のムクゲです。

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

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

Python自作サンプル集へ戻る

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

【Pythonループと内包表記】「宜保愛子じゃない!!」でループの基礎と内包表記を対応付け

この記事を読むことで、

・ループの基本的なコードの書き方

・上記を内包表記ではどのように書くのかの対応付け

・標準入力の使い方

の理解出来ます。


特に内包表記は通常のループの表記と一つずつ対応付けて書きましたので、この記事を読に終わる頃には内包表記にある程度慣れてくると思います。

今回標準入力でキーボードから入力させる文字列は、ドラマ「不適切にもほどがある!」の中から選んだセリフ、「宜保愛子じゃない!!」です。

この記事の前編として、Pythonでループの基礎2つずつ増加と標準入力「同情すんなら金をくれ!」を掲載しました。

今回は、その記事の後編となります。

まずは基本的なループです。
0から4までの数を表示します。

for i in range(5):
  print(i)

このコードを内包表記で書くと、たったの1行で済みます。

[print(i) for i in range(5)]

実行結果です。

内包表記は、

[ 計算(表示)結果 いつものfor文 ]

という書式になります。
別の例として、この数列を2倍にすることも可能です。


<2倍の基本的な書き方>

for i in range(5):
  print(i*2)

<2倍の内包表記>

[print(i*2) for i in range(5)]

実行結果です。


では、30から-3ずつカウントダウンしていくコードです。

<基本的なコード>

for i in range(30,0,-3):
  print(i)

<内包表記>

[print(i) for i in range(30,0,-3)]

実行結果です。


それでは、いよいよ、ドラマ「不適切にも程がある(ふてほど)」「宜保愛子じゃない!!」を指定の回数だけ表示させる、基本のFor文のコードと、内包表記の解説に移ります。

標準入力でキーボードから「宜保愛子じゃない!!」を入力してループで指定の回数までを表示するコードです。

<基本的なループ>

#表示する回数
N=5

#名セリフを入力←標準入力
print("あなたの好きなセリフを入力して下さい--->>>",end="")
msg=input()

#基本的なループ
for i in range(N):
  print(str(i)+":"+msg)

<内包表記>

#表示する回数
N=5

#名セリフを入力←標準入力
print("あなたの好きなセリフを入力して下さい--->>>",end="")
msg=input()

#内包表記
[print(str(i)+":"+msg) for i in range(N)]

実行結果です。


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

いたばし花火大会2025です。

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

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

Python自作サンプル集へ戻る

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

【Pythonループ2つずつ増加・減少】ループで 家なき子「同情すんなら金をくれ!!!!」ドラマの名台詞を表示

この記事を読むことで、

・Python始めたばかりで、ループの書き方ってどうやるのか分からないんだけど・・・。

・Pythonのループで2ずつ増加(1個飛ばし)ってどうやるの?

・逆に減らすのは?

・好きな文字列をループで指定した回数分表示させたい

が理解出来、更に標準入力と組み合わせて学習出来ます。


まずは基本的なループです。
0から19までの数を表示します。

for i in range(20):
  print(i)

このようにrangeで指定する場合は、その数未満の数が対象になるので、0〜19までが表示の対象となります。実行結果です。


次に2つずつの増加のループに書き換えます。
rangeのカッコ内に

range(開始 , 終了(指定の数未満), 増加分)

と書きます。
以下が2つずつ増加するループのコードと実行結果です。

for i in range(0,20,2):
  print(i)


次に数を減らす場合は、

range(開始 , 終了(その数を含まない), 減らす分)

ここでは、30から1までを3ずつ減らすコードと実行結果を記載します。

for i in range(30,0,-3):
  print(i)

3つずつ減らされていることと、0は含まれていないことが確認できました。


では、今度は指定の数だけドラマの名台詞を表示させてみます。

好きな文字列表示に使う具体例は、ドラマの名台詞です。
「同情すんなら金をくれ!」
「僕は死にません!!」

の2つのセリフを使います。


平成の名ドラマ「家なき子」の安達祐実さんのセリフ、「同情すんなら金をくれ!」を、5回表示させます。
Nに表示回数の5、msgにセリフを入れてコードを書いて実行します。

#セリフを表示させる回数
N=5

#ドラマの名セリフ
msg="同情すんなら金をくれ!!"

for i in range(N):
  print(msg)

名セリフが5回出力されました。
あの頃の安達祐実さんの表情が蘇ります(涙)

それで、range(5)は5未満なのに、5回表示されるのは何故?
4回になるのでは・・・。と思われたアナタ、鋭いです!!

print文を下記の様に変更して、ループの変数「i」も同時に表示させてみます。
数値を文字列と一緒に表示する場合は、strを用います。
数字と文字列の間に「:」を「+」で連結しています。

print(str(i)+’:’+msg)

コードと実行結果です。

#セリフを表示させる回数
N=5

#ドラマの名セリフ
msg="同情すんなら金をくれ!!"

for i in range(N):
  print(str(i)+':'+msg)

セリフを変えるには、変数msgを変更します。

#セリフを表示させる回数
N=5

#ドラマの名セリフ ← ここを変更
msg="僕は死にません!!"

for i in range(N):
  print(str(i)+':'+msg)

武田鉄矢さんの金八先生とは全く異なるキャラで必死な愛を感じました。
ただ当時、どこかの中学生の男子が真似して車の運転手に怒られていたという話を噂程度に聞いたことがあります。


では、ドラマのセリフを標準入力を使って、都度変更させるコードにしてみます。

print('あなたが好きな名セリフを入力して下さい--->>',end='')

end=”で、改行しないで直後に入力できるようにしている。

標準入力はinput関数を使用して、msgに代入しています。

msg=input()

では、コードと実行結果です。

#表示する回数
N=5

#ドラマの名台詞←ここを標準入力に変更
print('あなたが好きな名セリフを入力して下さい--->>',end='')
msg=input()

for i in range(N):
    print(str(i)+':'+msg)

例えば、「不適切にもほどがある」の「宜保愛子じゃない!!」などを入力してみるのも面白いかも知れません。
宜保愛子さん、すっごく久しぶりに名前を聞きました。

(「愚か者」と「ギンギラギン」は、ブログで書いちゃっても良いのかな・・・?)

お若い方にとって、「宜保愛子って誰??」だと思われるかも知れませんので、簡単に書くと、「タレント、霊能力者、作家」です。

この記事の後半は、こちらで扱ったコードを中心に、基本のFor文コードと内包表記でのコードを対応付けていきます。
Pythonでループの基礎と内包表記を対応付けて解説「宜保愛子じゃない!!」

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

マクセルアクアパーク品川(水族館)の写真です。

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

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

Python自作サンプル集へ戻る

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

paiza レベルアップ問題集 ループ1の2「FINAL問題 数列同士の引き算」をPythonとGASで解いてみた

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

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

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

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


数列同士の引き算 Python3編

具体例として出力例1の、N=5 リスト「1,2,3,4,5」からリスト「5,4,3,2,1」で考えてみます。

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

出力例1
-4
-2
0
2
4

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



下準備として、paiza.ioにこの様に入力します。

手順として、

1.標準入力でリストの長さNを読み込む
2.標準入力でリストとしてリストarrayを読み込む
3.標準入力でリストarrayから減算するarray2を読み込む
4.リストarrayからarray2を減算した答えを格納する空のリスト、array_ansを定義する
5.ループで減算処理と減算結果の格納を同時に行う
6.答えが格納されたarray_ansをループで出力する

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

手順1では、

N=int(input())

で、標準入力でリストの個数Nを読み込めます。

手順2では、

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

で、リストとして複数の数を標準入力で読み込んでいます。
listを使ってリストとしています。
mapで複数の数を読み込めます。
intで整数として読み込んでいます。
rstripで改行による影響を受けない様にして、split(‘ ‘)でスペース区切りの数値を読み込みます。

手順3では、

array2=list(map(int,input().rstrip().split(‘ ‘)))

で、arrayから減算するarray2をリストとして読み込みます。

手順4では、array[i]からarray2[I]の減算結果を格納するリストarray_ansを定義しています。

array_ans=[]

手順5ではループで減算処理と減算結果の格納を同時に行っています。
内包表記を使いました。

内包表記の書式は、

[結果 for いつものfor文]

です。
今回の内包表記のコードは、

[array_ans.append(array[i]-array2[i]) for i in range(N)]

です。

これを通常表記で書くと、

#ループで減算処理と減算結果の格納を同時に行う
for i in range(N):
    array_ans.append(array[i]-array2[i])

に、なります。

手順6では、内包表記を使ってリストarray_ansをループで出力しています。

[print(num) for num in array_ans]

これを通常のループで書くとこうなります。

#答えが格納されたarray_ansをループで出力する
for num in array_ans:
    print(num)

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

#リストの長さNを取り込む
N=int(input())

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

#リストarray2を取り込む
array2=list(map(int,input().rstrip().split(' ')))

#リストarrayからarray2を減算した答えを格納する空のリスト、array_ansを定義する
array_ans=[]

#ループで減算処理と減算結果の格納を同時に行う
[array_ans.append(array[i]-array2[i]) for i in range(N)]
    
#答えが格納されたarray_ansをループで出力する
[print(num) for num in array_ans]

paiza.ioの出力結果です。


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

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

緑のセルにN=配列の要素数、薄い灰色の所に配列array、濃い灰色の所に配列array2、減算結果array_ansを黄色の所に求めます。

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:緑のセルから配列の長さNに出力する数値(この問題の場合は「5」)を取得する。
3:薄い灰色のセルから(この問題の場合は「1,2,3,4,5」)を読み込み、配列arrayとする
4:濃い灰色のセルから(この問題の場合は「5,4,3,2,1」)を読み込み、配列array2とする
5:N及び配列arrayとarray2をログ出力して正しく読み込めたことを確認する
6:減算結果を格納する配列array_ansを定義する
7:減算結果を格納したarray_ansをスプレッドシートに格納出来るようにする二次元配列array_printを定義する
8:ループでi=0からi<Nまでの間、array[0][i]-array2[0][i]の各要素の減算結果をarray_ansに追加する
9:計算結果が入ったarray_ansをスプレッドシートに出力できるように二次元配列として格納するためにarray_printに追加する
10:ログで配列array_ansとarray_printを確認する
11:スプレッドシートの黄色い所のB4である(5,2)から1行N列分にarrayを出力する

手順1: SpreadsheetAppから階層を辿ってアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

手順2:緑のセルから配列の長さNに出力する数値(この問題の場合は「5」)を取得する。

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

手順3:薄い灰色のセルから(この問題の場合は「1,2,3,4,5」)を読み込み、配列arrayとする

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

手順4:濃い灰色のセルから(この問題の場合は「5,4,3,2,1」)を読み込み、配列array2とする

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

手順5:N及び配列arrayとarray2をログ出力して正しく読み込めたことを確認する

console.log(N);
console.log(array);
console.log(array2);

ログの実行結果です。

手順6:減算結果を格納する配列array_ansを定義する

let array_ans=[];

手順7:減算結果を二次元配列としてスプレッドシートに出力する用の配列array_printを定義する

let array_print=[];

手順8:ループでarray_ansに減算結果を格納する

//ループでarray_ansに減算結果を格納する
  for(let i=0;i<N;i++){
    array_ans.push(array[0][i]-array2[0][i]);
  }

array[0][i]-array2[0][i]となっているのは、スプレッドシートから取得した配列arrayは1行5列の二次元配列なのでこの様にコードを書いて計算しています。

手順9:減算結果を格納したarray_ansをスプレッドシートに二次元配列として出力出来る様に配列array_printに追加する

array_print.push(array_ans);

手順10:array_ansの計算結果及びarray_printに二次元配列として格納できたことをログで確認する

console.log(array_ans);
console.log(array_print);

最後のarray_printが、「1行5列の二次元配列」として格納されています。
この「1行5列だからこそ!」今回の場合では、スプレッドシートの黄色いセル、横方向1行分に格納出来るのです。これは後で出てくるので、今はこの「1行5列」という所を頭の片隅において下さい。

手順11:スプレッドシートの黄色いセルに出力用のarray_ans_printを格納する

ss.getRange(5,2,1,N).setValues(array_print);

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

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

function loop11(){

  //SpreadsheetAppから階層を辿ってアクティブシートをアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

  //配列の長さNを取得する
  let N=ss.getRange(1,2).getValue();

  //arrayを配列として取得する
  let array=ss.getRange(2,2,1,N).getValues();

  //減算用のarray2を配列として取得する
  let array2=ss.getRange(3,2,1,N).getValues();

  //N,array,array2が取得できたことをログで確認する
  console.log(N);
  console.log(array);
  console.log(array2);

  //減算結果を格納する空の配列array_ansを定義する
  let array_ans=[];

  //減算結果を二次元配列としてスプレッドシートに出力する用の配列array_printを定義する
  let array_print=[];

  //ループでarray_ansに減算結果を格納する
  for(let i=0;i<N;i++){
    array_ans.push(array[0][i]-array2[0][i]);
  }


  //格納した減算結果をスプレッドシートに二次元配列として出力用の配列array_printに追加する
  array_print.push(array_ans);

  //array_ansの計算結果及びarray_printに二次元配列として格納できたことをログで確認する
  console.log(array_ans);
  console.log(array_print);

  //スプレッドシートの黄色いセルに出力用のarray_ans_printを格納する
  ss.getRange(5,2,1,N).setValues(array_print);

}

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

ちなみにarray_printを使わず、25行目をこのように書いて、計算結果array_ansを出力すると、([array[0][i]-arrray2[0][i]])と[]で括っています。)

array_ans.push([array[0][i]-array2[0][i]]);

このように、5行1列になってしまっているので、横方向の1行5列には格納できません。
下のエラー文をざっくり訳すと、

「行数が違っているよ。スプレッドシートの黄色い所は1行分なのに、5行ぶち込もうとしているから、スプレッドシートに出力できないよ」

Exception: The number of rows in the data does not match the number of rows in the range. The data has 5 but the range has 1.

ということになってしまいましたので、縦方向、横方向を確認してからスプレッドシートに格納することがGASでスプレッドシートを扱う上で、1番大事〜〜♪なんですね。

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

目白庭園の紅葉です。池袋から一駅の所にあります。

←前の問題                        ループ2の1 (準備中)→

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

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

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

■ 関連記事 ■

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

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

paiza レベルアップ問題集 ループ1の2「STEP: 3 数列の値を全部 * 2 して出力」をPythonとGASで解いてみた

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

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

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

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


数列の値を全部 * 2 して出力 (paizaランク D 相当)

問題:N個の数列を全て2倍にして改行区切りで出力する

具体例として出力例2の、N=5 リスト「0 1 50 99 100」で考えてみます。

出力例2
5
0 1 50 99 100

出力例2
0
2
100
198
200

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



下準備として、paiza.ioにこの様に入力します。

手順として、
1.標準入力でリストの長さNを読み込む
2.標準入力でリストとしてリストarrayを読み込む
3.arrayを2倍にする要素を格納するarray2を宣言する
4.ループを使ってarrayの各要素をarray2に追加する
5.array2を出力

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

手順1では、

N=int(input())

で、標準入力でリストの個数Nを読み込めます。

手順2では、

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

で、リストとして複数の数を標準入力で読み込んでいます。
listを使ってリストとしています。
mapで複数の数を読み込めます。
intで整数として読み込んでいます。
rstripで改行による影響を受けない様にして、split(‘ ‘)でスペース区切りの数値を読み込みます。

手順3では、

array2=[]

で、2倍にするリストを宣言して用意します。

手順4ではループを使って、arrayの各要素を2倍にして、appendでarray2に追加しています。

#ループで各要素を2倍にした結果を配列array2に格納する
for num in array:
    num*=2
    array2.append(num)

手順5でリストarray2を出力しています。

#ループでarray2を出力する
for num in array2:
    print(num)

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

#リストの個数Nを読み込む
N=int(input())

#リストを読み込む
array=list(map(int,input().rstrip().split(' ')))

#2倍にした要素を格納する配列array2を宣言する
array2=[]

#ループで各要素を2倍にした結果を配列array2に格納する
for num in array:
    num*=2
    array2.append(num)

#ループでarray2を出力する
for num in array2:
    print(num)

paiza.ioの出力結果です。

これでも正解しましたが、もっと短いコードで手順3から5を1つの手順にして、内包表記を使って出力することが可能です。
勿論、出力用の2倍にしたarray2を用意する必要もありません。

[print(num*2) for num in array]

この、たった1行で手順3から5をまとめています。
内包表記は、

[ 結果  for(いつものfor文) ]

という書式です。
内包表記を使ったコードはこちらになります。


#リストの個数Nを読み込む
N=int(input())

#リストを読み込む
array=list(map(int,input().rstrip().split(' ')))

#内包表記のループを使ってリストの各要素の値を2倍にして改行区切りで出力する
[print(num*2) for num in array]


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

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

ピンク色の所にN=配列の要素数、灰色の所に配列、黄色の所にその合計値を求めます。

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:緑のセルから配列の長さNに出力する数値(この問題の場合は「5」)を取得する。
3:灰色のセルから配列(この問題の場合は「0,1,50,99,100」)を読み込み、配列arrayとする
4:N及び配列arrayをログ出力して正しく読み込めたことを確認する
5:ループでi=0からi<Nまでの間、各要素を2倍にする
6:ログで配列arrayの要素が2倍になったことを確認する
7:スプレッドシートの黄色い所のB4である(4,2)にarrayを出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:緑のセルから配列の長さNに出力する数値(この問題の場合は「5」)を取得する。

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

手順3:灰色のセルから数列(この問題の場合は「0,1,50,99,100」)を読み込み、配列arrayとする

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

手順4:N及び配列arrayをログ出力して正しく読み込めたことを確認する

console.log(N);
console.log(array);

ログの実行結果です。

手順5:ループを使って配列arrayの各要素を2倍にする

  //ループを使って配列arrayの各要素を2倍にする
  for (let i=0;i<N;i++){
    array[0][i]*=2
  }

array[0][i]となっているのは、スプレッドシートから取得した配列arrayは1行5列の二次元配列なのでこの様にコードを書きました。
「*=2」は乗算代入演算子で、計算して2倍にしています。

手順6:arrayの各要素が2倍になったことをログで確認する

console.log(array);

乗算代入演算子でリストが2倍になりました。

手順7:スプレッドシートの黄色い所のB4である(4,2)に2倍の計算結果が格納された配列arrayを出力する

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

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

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

  //数列の長さNを取得する
  let N=ss.getRange(1,2).getValue();

  //配列として取得する
  let array=ss.getRange(2,2,1,N).getValues();

  //ログでNとarrayが正しく取得できたことを確認する
  console.log(N);
  console.log(array);

  //ループを使って配列arrayの各要素を2倍にする
  for (let i=0;i<N;i++){
    array[0][i]*=2
  }

  //arrayの各要素が2倍になったことをログで確認する
  console.log(array);

  //スプレッドシートに出力する
  ss.getRange(4,2,1,N).setValues(array);  

}

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

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

日の丸を現した噴水イルミネーション。東京メガイルミです。

←前の問題                      次の問題→

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

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

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

■ 関連記事 ■

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

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

paiza レベルアップ問題集 ループ1の2「STEP: 2 数列の A 番目から B 番目までの和」をPythonとGASで解いてみた

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

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

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

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


数列の A 番目から B 番目までの和 (paizaランク D 相当)

問題:N個の数列のA番目からB番目までの和を求める

具体例として入力例1の、N=5,A=1,B=3、リスト「1 2 3 4 5」で考えてみます。

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

出力例1
6

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


下準備として、paiza.ioにこの様に入力します。

手順として、
1.標準入力でN,A,Bを読み込む
2.標準入力でリストとしてリストarrayを読み込む
3.計算結果ansを0で初期化
4.ループとスライスを使ってans+=numを加算代入演算子で合計を求めている
5.計算結果を出力

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

手順1では、

N,A,B=map(int,input().rstrip().split(‘ ‘))

で、標準入力でリストの個数N,合計する最初のA番目,合計する最後のB番目を取り込んでいます。
mapで複数の数を読み込めます。

手順2では、

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

で、リストとして複数の数を標準入力で読み込んでいます。
listを使ってリストとしています。
mapで複数の数を読み込めます。
intで整数として読み込む形式を指定しています。
rstripで改行による影響を受けない様にして、split(‘ ‘)でスペース区切りの数値を読み込みます。

手順3では、

ans=0

計算結果の合計値を入れるansを0で初期化します。

手順4ではループとスライスを使って、A番目からB番目までの合計を求めています。
ここで注意すべき所は、リストの添字は0から始まることです。
つまり、ans=array[A-1]からarray[B-1]までの合計になります。

スライスを使う場合、array[最初:最後未満]なので、この場合は

array[A-1:B]

と指定します。

#ループとスライスを使って添字A-1からB-1までの合計を求める
for num in array[A-1:B]:
    ans+=num

手順5で計算結果を出力しています。

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

#配列の数、合計の最初と最後を読み込む
N,A,B=map(int,input().rstrip().split(' '))

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

#合計を0で初期化
ans=0

#ループとスライスを使って添字A-1からB-1までの合計を求める
for num in array[A-1:B]:
    ans+=num

#計算結果を出力
print(ans)    


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

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

ピンク色の所にN=配列の要素数、灰色の所に配列、黄色の所にその合計値を求めます。

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:ピンクのセルから配列の長さNに出力する数値(この問題の場合は「5」)を取得する。
3:緑のセルから配列の合計範囲の最初のA番目(この問題の場合は「1」)を取得する。
4:オレンジのセルから配列の合計範囲の最後のB番目(この問題の場合は「3」)を取得する。
5:灰色のセルから配列(この問題の場合は「1,2,3,4,5」)を読み込み、配列arrayとする
6:N,A,B,及び配列arrayをログ出力して正しく読み込めたことを確認する
7:合計値ans=0と0で初期化する
8:ループでA-1からBまでの間加算処理をする
9:計算結果をログ出力する
10:スプレッドシートに合計値を出力する配列calcを定義する
11:計算結果ansを出力用配列calcに二次元配列として追加する
12:配列calcに追加されたことをログ出力で確認する
13:スプレッドシートの黄色い所のB7である(7,2)に答えが格納された配列calcを出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:ピンクのセルから配列の長さNに出力する数値(この問題の場合は「5」)を取得する。

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

手順3:緑のセルから配列の合計範囲の最初のA番目(この問題の場合は「1」)を取得する。

let A=ss.getRange(2,2).getValue();

手順4:オレンジのセルから配列の合計範囲の最後のB番目(この問題の場合は「3」)を取得する。

let B=ss.getRange(3,2).getValue();

手順5:灰色のセルから配列(この問題の場合は「1,2,3,4,5」)を読み込み、配列arrayとする

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

手順6:N,A,B,及び配列arrayをログ出力して正しく読み込めたことを確認する

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

ログの実行結果です。

手順7:合計値ans=0と0で初期化する

let ans=0;

手順8:ループでA-1からBまでの間加算処理をする

加算代入演算子+=で、ansに合計しています。
スプレッドシートから取得した配列arrayは1行4列の二次元配列になっています。

ans+=array[0][i];

ループ全体のコードです。
配列の添字は0から始まるので、forの()内は下記の様になります。

  //ループでリストの指定された範囲の合計値を求める
  for(let i=A-1;i<B;i++){
    ans+=array[0][i]; 
  }

手順9:計算結果をログ出力する

console.log(ans);

手順10:スプレッドシートに合計値を出力する配列calcを定義する

let calc=[]

手順11:計算結果ansを出力用配列calcに二次元配列として追加する

calc.push([ans]);

手順12:配列calcに追加されたことをログ出力で確認する

console.log(calc);

手順13:スプレッドシートの黄色い所のB7である(7,2)に答えが格納された配列calcを出力する

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

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

<全コード>

function loop9(){

  //スプレッドシートからアクティブシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
  
  //リストの個数を読み込む
  let N=ss.getRange(1,2).getValue();

  //合計範囲の最初を読み込む
  let A=ss.getRange(2,2).getValue();

  //合計範囲の最後を読み込む
  let B=ss.getRange(3,2).getValue();

  //配列を読み込む
  let array=ss.getRange(5,2,1,N).getValues();

  //N,A,B,arrayが読み込めたことをそれぞれ確認する
  console.log(N);
  console.log(A);
  console.log(B);
  console.log(array);

  //合計値を初期化する
  let ans=0;

  //ループでリストの指定された範囲の合計値を求める
  for(let i=A-1;i<B;i++){
    ans+=array[0][i]; 
  }
  
  //合計値をログで確認する
  console.log(ans);

  //スプレッドシートに合計値を出力する配列calcを定義する
  let calc=[]

  //出力用配列calcに計算結果のansを二次元配列として追加する
  calc.push([ans]);

  //スプレッドシートに出力するcalcにansが格納されたことをログで確認する
  console.log(calc);

  //スプレッドシートの黄色いセルに計算結果を格納する
  ss.getRange(7,2).setValue(calc);

}

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

東京メガイルミの噴水です。

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

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

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

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

■ 関連記事 ■

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

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

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