【paiza レベルアップ問題集 】「標準入力その1 STEP: 1 1 行の入力」PythonとGASの両方で解いたコード紹介

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

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

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

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


1 行の入力 (paizaランク D 相当)

問題:
文字列 s が 1 行で与えられるので s をそのまま出力してください。

この記事では、下記の入力例1の場合を例にして、文字列の出力を行います。

入力例1
paiza

出力例1
paiza

ではまず、Pythonでのコードを掲載致します。


■ Pythonでの解き方 ■

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

手順として、

1:標準入力で最初の単語wordを読み込む

2:print文でwordを出力する

で、行います。
コードはこちらになります。

#標準入力で文字列を読み込む
word=input()

#その文字列を出力する
print(word)

この手順で作成したプログラムを実行した出力結果です。


■ GASでの解き方 ■

では、同じ問題をGASで解いてみます。
まず、スプレッドシートに下記の様に入力及びセルの塗り潰しを致しました。

スプレッドシートの緑のセルに文字列「paiza」を入力しました。
これを黄色いセルにそのままま文字列を出力します。

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

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

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

2:緑のセルから文字列を取得する

3:文字列が出力出来たことをログ出力で確認する

4:文字列をスプレッドシートに二次元配列として取得する配列word2を宣言する

5:word2が二次元配列になる様に、wordを追加する

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

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

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

const ss=SpreadsheetApp.getActiveSheet();

関数「standardInput1」の中にコードを書いていきます。
standard input は、標準入力のことです。

function standardInput1() {

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

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

手順2:緑のセルから文字列を取得する

const word=ss.getRange(1,1).getValue();

緑のセルはA1であり、(1,1)と表記出来ます。

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();

  //緑のセルA1から文字列を取得する
  const word=ss.getRange(1,1).getValue();

}

手順3:文字列が出力出来たことをログ出力で確認する

console.log(word);

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const word=ss.getRange(1,1).getValue();

  //文字列が出力出来たことをログ出力で確認する
  console.log(word);

}

手順4:文字列をスプレッドシートに二次元配列として取得する配列word2を宣言する

let word2=[];

スプレッドシートは縦×横の二次元ですので、二次元配列として出力する準備を行います。

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const word=ss.getRange(1,1).getValue();
  console.log(word);

  //文字列をスプレッドシートに二次元配列として取得する配列word2を宣言する
  let word2=[];

}

手順5:word2が二次元配列になる様に、wordを追加する

word2.push([word]);

pushメソッドを使って、[ ]の中にwordを入れて二次元配列にしています。

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const word=ss.getRange(1,1).getValue();
  console.log(word);


  let word2=[];

  //word2が二次元配列になる様に、pushメソッドを使ってwordを追加する
  word2.push([word]);

}

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

console.log(word2);

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const word=ss.getRange(1,1).getValue();
  console.log(word);


  let word2=[];
  word2.push([word]);

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

}

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

ss.getRange(3,1).setValue(word2);

黄色いセルはセルA3ですので、3行目1列目で(3,1)と表記します。

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const word=ss.getRange(1,1).getValue();
  console.log(word);


  let word2=[];
  word2.push([word]);
  console.log(word2);

  //スプレッドシートの黄色いセルに出力する
  ss.getRange(3,1).setValue(word2);

}

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


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

ここは本当に、東京23区ですか??と驚く様な、世田谷区の等々力渓谷で水と森林にたっぷりと癒されました。

次の問題へ→

■ 関連記事 ■

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

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

【paiza レベルアップ問題集】 「STEINS;GATE FINAL 正則表現のエントリーポイント」をPythonとGASの両方で解いたコードの紹介

この記事を読むことで、

・Pythonの標準入力で文字列を取得する方法

・GASでは二次元配列として文字列を取得する方法

・Python・GASで文字列を連結して出力する方法

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

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

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

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

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

正則表現のエントリーポイント (paizaランク D 相当)

問題:
あなたはプログラミングの課題を解いています。
2 つの単語が改行区切りで入力されるので「;」区切りで出力してください。

この記事では、下記の入力例1の場合を例にして、標準入力で2つの単語を取得して「;」を用いて文字列の連結をして出力します。

入力例1
STEINS
GATE

出力例1
STEINS;GATE

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

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

手順として、

1:標準入力で最初の単語a(今回はSTEINS)を読み込む

2:標準入力で最初の単語b (GATE)を読み込む


3:「;」を使って2つの文字列を連結して出力する

で、行います。

この手順で作成したプログラムを実行した出力結果です。

コードはこちらになります。

#標準入力で最初の文字と次の文字を読み込む
a=input()
b=input()

#「;」を用いて文字を連結して出力する
print(a+';'+b)

Pythonでの解き方は以上になります。


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

スプレッドシートの緑のセルに最初の文字「STEINS」を入力しました。
スプレッドシートの灰色のセルに次の文字「GATE」を入力しました。

上記のセル2つはarrayという二次元配列として一度に取得します。そうすることによって、SpreadSheetAppから階層を辿って現在のシートにアクセスするという手間を減らすことが出来ます。

黄色いセルには、二次元配列arrayから2つの文字列を取得し「;」で連結した文字列を出力します。

※スプレッドシートに表示するには、二次元配列に文字列を追加をしております※

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

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

2:スプレッドシートの緑のセルに入力された「STEINS」と、灰色のセルに入力された「GATE」の部分を二次元配列arrayとして取得する


3:二次元配列arrayが無事取得出来たことをログで出力して確認する

4:二次元配列array[0][0]とarray[1][0]を「;」も用いて連結して定数strに代入する

5:文字列の連結が出来たことをstrをログ出力して確認する

6:スプレッドシートに二次元配列として取得する配列str2を宣言する

7:str2が二次元配列になるようにstrを追加する

8:str2をスプレッドシートに出力する前にログ出力して確認する

9:スプレッドシートの黄色い所に二次元配列str2を出力する

少々長くなってしまって恐縮ですが、それでは手順ごとにコードを掲載致します。

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

const ss=SpreadsheetApp.getActiveSheet();

function steinsGate() {

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

関数steinsGateの中に、まずはSpreadsheetAppから階層を辿ってアクティブシートにアクセスして定数ssに代入しています。

手順2:2つの文字列を二次元配列として取得

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

セルA1から2行分1列分の二次元配列として取得しています。

function steinsGate() {

  const ss=SpreadsheetApp.getActiveSheet();

  //2つの文字列を二次元配列として取得
  const array=ss.getRange(1,1,2).getValues();

}

手順3:取得した二次元配列をログ出力で確認する
2行1列の二次元配列として取得出来たことをログで出力して確認します。

console.log(array);

function steinsGate() {

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

  //取得した二次元配列をログ出力で確認する
  console.log(array);

}

手順4:文字列を連結させる

const str=array[0][0]+”;”+array[1][0];

文字列は二次元配列で、最初の行の0番目のarray[0][0]と、次の行の0番目のarray[1][0]を「;」で文字列を連結させて定数strに代入しています。

function steinsGate() {

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

  //文字列を連結させる
  const str=array[0][0]+";"+array[1][0];
}

手順5:文字列の連結をログ出力で確認する

console.log(str);

function steinsGate() {

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

  const str=array[0][0]+";"+array[1][0];
  
  //文字列の連結をログ出力で確認する
  console.log(str);

}

手順6:連結させた文字列を二次元配列として格納させる配列str2を宣言

let str2=[];

スプレッドシートは縦横の二次元配列なので、それに対応した、新たに出力用の配列を作成します。

function steinsGate() {

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

  const str=array[0][0]+";"+array[1][0];
  console.log(str);

  //連結させた文字列を二次元配列として格納させる配列str2を宣言
  let str2=[];
 
}

手順7:str2が二次元配列になる様に、strを追加する

str2.push([str]);

配列に追加するpushメソッドを使う際、[str]を入れることで二次元配列にしてスプレッドシートに出力出来る準備をするので、[ ]を必ず入力します。

function steinsGate() {

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

  const str=array[0][0]+";"+array[1][0];
  console.log(str);

  let str2=[];

  //str2が二次元配列になる様に、strを追加する
  str2.push([str]);

}

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

console.log(str2);

function steinsGate() {

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

  const str=array[0][0]+";"+array[1][0];
  console.log(str);

  let str2=[];
  str2.push([str]);

  //スプレッドシートに出力する前に確認する
  console.log(str2);

}

二次元配列になっていますね。
これでスプレッドシートに出力する準備が整いました。

手順8:スプレッドシートの黄色いセルA4に連結した文字列を出力する

ss.getRange(4,1).setValue(str2);

セルA4は4行1列ですので、(4,1)と書き表せます。

function steinsGate() {

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

  const str=array[0][0]+";"+array[1][0];
  console.log(str);

  let str2=[];
  str2.push([str]);
  console.log(str2);

  //スプレッドシートの黄色いセルに連結した文字列を出力する
  ss.getRange(4,1).setValue(str2);

}

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


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

お台場自由の女神とレインボーブリッジと、レインボーブリッジの右端から1cmの所の東京タワーです。

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

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

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

■ 関連記事 ■

paizaレベルアップ問題集_PythonとGASのコード紹介トップに戻る
初めてのGASに戻る


自己紹介

【Python二次元リスト】IF文と論理積and、論理和orで、「市松模様」のドット絵を作成

この記事を読むことによって、

内包表記の二重ループ

・論理演算子のandとorの使い所

・上記によってPythonで市松模様のドット絵を描画

の概要を掴めます。

主に、Pythonの二重ループを学習中で、規則的で簡単なドット絵を描きたい方を対象にしています。

題材は、1つおきに色が塗りつぶされている市松模様です。
Excelで完成形を作成致しました。

この図を見ての通り、2で割り切れる行 and 2で割り切れる列の所に色が塗りつぶされています。
また、2で割り切れない行 and 2で割り切れない列の所に色が塗り潰されています。

これをPythonで作って行きます。
まずは、この様な枠線のみを作成致します。

ここでは最初に内包表記を使ってリスト(配列)の全ての要素に「□」で埋めます。
10行10列の□を取り出すには、リストarrayを行ごとに取り出す変数line、lineからドットごとに取り出す変数dotを使った二重ループで、内ループの所で改行することによって、次の行に行く前に改行をしています。

#市松模様の二次元リストを内包表記で作成
array=[['□' for i in range(10)] for j in range(10)]

#ドット絵の取り出し
for line in array:
  for dot in line:
    print(dot,end='')
  print()

実行結果です。

では、これを一つ置きに「■」に置き換えて行きます。

リストは0行0列から始まります。
このリストarrryは1番最初がarray[0][0]、1番最後がarray[9][9]です。
そこで、一つ置きになるように、IF文の中で論理演算子のand と or を使い、
「2で割り切れる行 and 2で割り切れる列」 or
「2で割ると1余る行 and 2で割ると1余る列」を「■」にします。

#市松模様の二次元リストを内包表記で作成
array=[['□' for i in range(10)] for j in range(10)]

#市松模様の1つ置きに■を格納(i,j共に偶数・i,j共に奇数の時に■)
for i in range(len(array)):
  for j in range(len(array[0])):
    if(i%2==0 and j%2==0) or (i%2==1 and j%2==1):
      array[i][j] = '■'

#ドット絵の取り出し
for line in array:
  for dot in line:
    print(dot,end='')
  print()  

実行結果です。

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

柏市にある、あけぼの山農業公園のひまわりです。

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

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

Python自作サンプル集へ戻る

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

【Pythonループ】ループとIF文の中の論理演算子「or」で、「3時のヒロイン」さん登場!!

この記事は、Pythonのループで、「3時のヒロイン」さん(郷ひろみさんと一緒に「にしたんクリニック」のCMに出演している、吉本興業所属の芸人さん)を例に、

・ループの中でIF文と論理演算子or(または)を使う

・3時 or 15時の時にメッセージを表示する


・strで数字を文字列と一緒に表示する

・「\n」で改行する

とったコードを掲載して、解説しております。

3時のヒロインさんのプロフィールです。

このCMですね。
「♪ た〜ん、たん、にしたん、たんたんた〜ん」
タンバリンを持って踊っている所が可愛いです。


そこで、Pythonでループを使って、3時と15時の時に3時のヒロインさんに登場して頂きます。

このループでは、range(24)で0時から23時まで表示させます。
ループ内の変数はhourを用います。

論理演算子のorを使って、hourが3時 or 15時の時にprint文に3時のヒロインさんを登場させるといった、シンプルなループになっています。

#3時と15時に「3時のヒロイン」さん登場!!
for hour in range(24):
  if hour==3 or hour==15:
    print("<<<【"+str(hour)+"時】のヒロインさん登場>>>\n")
  else:
    print(str(hour)+"時")

実行結果です。


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

スカイツリーと河津桜のコラボです。
このライティングは日向坂46の楽曲、『JOYFUL LOVE』の虹色のカラーです。
3時のヒロインさんは、日向坂46四期生の冠歌番組「ひなパレ」のMCを務めました。

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

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

Python自作サンプル集へ戻る

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

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

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