paiza レベルアップ問題集 「STEP: 1 各桁の和」をPythonとGASで解いてみた

この記事を読むことで、Python・GASで整数を標準入力で文字列として取得し、その長さを求め、ループで整数の変換しながら合計を求める方法で、特にループの所で変数の動きが分かりやすいようにトレースをしています。

整数の桁数を求める方法や、文字列を数値に変換する方法について、Python・GASの両方のコードで詳しく書いています。

以上がPythonとGASの両方のコードで習得することが可能になります。
最初に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 相当)

問題:
10 進数で表された整数 N が与えられます。
整数 N の各桁の和を計算し、出力してください。

この記事では、下記の入力例3の場合に整数をNとして「813」が与えられ、その各桁の和・8+1+3=12を求めるプログラミングの問題を解いて行きます。

入力例3
813

出力例3
12

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

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

■ Pythonでの解き方 ■

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

手順として、

1:標準入力で数値Nを「文字列として」取得

2:数値Nの桁数を求める


3:合計値ansを0で初期化


4:ForループとIFで格桁ごとに数値に変換して合計を求める


5:その合計を出力

で、行います。

まずは、プログラムの動きを見やすいように、トレースのコードとトレースのio出力結果を添えます。


#数値Nを文字列として取得
N=input()

#Nの桁数(文字列の長さ)を求める
length=len(N)

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

#この文字列をリストとして、各桁を数値に変換して足していく
for i in range(length):
    print('現在の合計値ans:【'+str(ans)+'】')
    num=int(N[i])#ここで数値に変換している
    print(str(i+1)+'桁目の数は「'+str(num)+'」です。')
    print('現在の合計値ansに「'+str(num)+'」を加えます')
    ans+=num#合計値を加算演算子で計算
    print('計算後のans:【'+str(ans)+'】')
    print('------------------------')
    
#合計値を出力する
print(ans)

トレースコードのログです。

このままでは、出力例3の合計値ans:12に対して冗長なコードが含まれているので、解答以外のprint文をコメントアウトします。


#数値Nを文字列として取得
N=input()

#Nの桁数(文字列の長さ)を求める
length=len(N)

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

#この文字列をリストとして、各桁を数値に変換して足していく
for i in range(length):
    #print('現在の合計値ans:【'+str(ans)+'】')
    num=int(N[i])#ここで数値に変換している
    #print(str(i+1)+'桁目の数は「'+str(num)+'」です。')
    #print('現在の合計値ansに「'+str(num)+'」を加えます')
    ans+=num#合計値を加算演算子で計算
    #print('計算後のans:【'+str(ans)+'】')
    #print('------------------------')
    
#合計値を出力する
print(ans)

スッキリするように、コメントアウトした部分を省いたコードです。

#数値Nを文字列として取得
N=input()

#Nの桁数(文字列の長さ)を求める
length=len(N)

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

#この文字列をリストとして、各桁を数値に変換して足していく
for i in range(length):
    num=int(N[i])#ここで数値に変換している
    ans+=num#合計値を加算演算子で計算
    
#合計値を出力する
print(ans)

ioの出力結果です。

■ GASでの解き方 ■

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

緑のセルに整数が入力されています。
黄色いセルの所に「各桁の合計値」を出力します。

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

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

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

2:スプレッドシートの緑色のセルから整数N(この例では「813」)を取得する


3:整数Nが取得できたことをログで確認


4:変数Lenに、整数Nの桁数を取得して代入する


5:桁数Lenが取得できたことをログで確認する


6:合計値として計算に使用する変数ansを0で初期化する


7:ForループとIF文でsliceメソッドを使って数字列Nから各桁を切り出して、数値に変換してansに加算演算子で加算する

8:ansの合計結果をログ出力で確認

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

10:ansをans2にpushメソッドで追加する

11:スプレッドシート出力前に二次元配列ans2のログ出力で確認する

12:スプレッドシートの黄色いセルに格桁の合計が格納された二次元配列ans2を出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2: スプレッドシートの緑色のセルから整数N(この例では「813」)を取得する

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

手順3:ログで整数Nが取得できたことをログで確認

console.log(N);

手順4:整数Nの桁数を取得して、変数Lenに代入する

const Len = N.toString().length;

toStringは、整数Nの桁数を調べる為に一旦文字列にしてからlengthを使って桁数を調べます。
これはSAMURAI ENGINEERさんのtoStringメソッドの使い方の記事が分かりやすいです。

手順5:桁数Lenが取得できたことをログで確認する

console.log(`この数字列の桁数は、【${Len}】桁です。`);

文字列と数値を一緒に表示させるには、Shiftキーと@を押して「`」で囲って、${}のなかに数値を入れます。

手順6:合計値として計算に使用する変数ansを0で初期化する

let ans = 0;

計算の合計に使う値に何か入っていると正確な計算が出来ないので、必ず0で初期化します。

手順7:ForループとIF文でsliceメソッドを使って数字列Nから各桁を切り出して、数値に変換してansに加算演算子で加算する。

sliceメソッドで文字列を切り出す場合、この場合は

let num = N.toString().slice(i, i + 1);

と書いています。

slice(開始位置,終了位置の手前)

になるので、終了位置に+1としています。

この説明も、SAMURAI ENGINEERさんの文字列の任意の範囲を切り抜く方法の記事が分かりやすいです。

切り取った文字を数値に変換させています。

num=Number(num);

今回は、iを0からLen(長さ3)未満の範囲、つまりi=0,1,2でループを回しましたので、そのトレースを行います。

i=0の時

let num = N.toString().slice(0,1);

で、numに0番目の文字「8」が入り、合計が【8】になりました。

i=1の時

let num = N.toString().slice(1,2);

で、numに1番目の文字「1」が入り、合計が【9】になりました。

i=2の時

let num = N.toString().slice(2,3);

で、numに2番目の文字「3」が入り、合計が【12】になりました。

では、ループの部分とその前後のコードです。

//ForループとIF文でsliceメソッドを使って数字列Nから各桁を切り出して、数値に変換してansに加算演算子で加算する
  console.log('<<<ループに入ります!!>>>');

  for (let i = 0; i < Len; i++) {
    let num = N.toString().slice(i, i + 1);
    console.log(`現在の合計値ans:【${ans}】`);
    num=Number(num);
    console.log(`文字列「${i}」番目は「${num}」です。`);
    ans += num;  //ここで加算演算子を使ってansに加えている
    console.log(`「${num}」を加えた合計ansは【${ans}】になりました`);
    console.log('---------------------------------');
  }

  console.log('<<<ループを抜けました。>>>');

手順8:ansの合計結果をログ出力で確認

console.log(ans);

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

ans2=[];

手順10:ansをans2にpushメソッドで追加する

ans2.push([ans]);

手順11:スプレッドシート出力前に二次元配列ans2のログ出力で確認する

console.log(ans2);

手順12:スプレッドシートの黄色いセルに格桁の合計が格納された二次元配列ans2を出力する

ss.getRange(3,2).setValue(ans2);

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

function loop2no6() {

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

  //スプレッドシートの緑色のセルから整数N(この例では「813」)を取得する
  const N = ss.getRange(1, 2).getValues();

  //整数Nが取得できたことをログで確認
  console.log(N);

  //変数Lenに、整数Nの桁数を取得して代入する
  const Len = N.toString().length;

  //桁数Lenが取得できたことをログで確認する
  console.log(`この数字列の桁数は、【${Len}】桁です。`);

  //合計値として計算に使用する変数ansを0で初期化する
  let ans = 0;


  //ForループとIF文でsliceメソッドを使って数字列Nから各桁を切り出して、数値に変換してansに加算演算子で加算する
  console.log('<<<ループに入ります!!>>>');

  for (let i = 0; i < Len; i++) {
    let num = N.toString().slice(i, i + 1);
    console.log(`現在の合計値ans:【${ans}】`);
    num = Number(num);
    console.log(`文字列「${i}」番目は「${num}」です。`);
    ans += num;  //ここで加算演算子を使ってansに加えている
    console.log(`「${num}」を加えた合計ansは【${ans}】になりました`);
    console.log('---------------------------------');
  }

  console.log('<<<ループを抜けました。>>>');


  //ansの合計結果をログ出力で確認
  console.log(ans);

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

  //ansをans2にpushメソッドで追加する
  ans2.push([ans]);


  //スプレッドシート出力前に二次元配列ans2のログ出力で確認する
  console.log(ans2);

  //スプレッドシートの黄色いセルに格桁の合計が格納された二次元配列ans2を出力する
  ss.getRange(3, 2).setValue(ans2);

}

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

石神井公園の桜。サイクルボートに乗って撮影しました。

■ 参考文献の紹介■

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

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

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

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

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

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

アニメの聖地、石神井公園で平成最後のお花見

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

この記事では、アニメの舞台になっている、練馬区にある石神井公園で平成最後のお花見をした動画と写真を再編集して掲載しています。

令和の今、コロナ禍でデルタ株やオミクロンなんて出てきて、中々写真を撮りに行けないので、平成の頃に沢山撮っておいて良かったです。

沢山のアニメ作品の聖地(舞台)になっている練馬区や石神井公園、私も「らんま1/2」で石神井公園のボートを見たことがあります。
他にも「四月は君の嘘」、「のだめカンタービレ」、「やがて君になる」などの作品で練馬区や石神井公園が登場します。

では、早速動画です。

※ 音量注意 ※

●YouTube

● TikTok

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

ボートに乗りながら撮影したので、かなり際どい桜が撮れました。
サイクルボートを漕ぎながらの撮影は、中々重労働でしたけれど、こうして写真におさめて動画にしておくと、とても良い思い出が作れたと思います。

もしもあなたがこの記事を見て、少しでも和んだり癒されたりしたら、撮影した者としてとても嬉しいです!

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

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

インスタ再開しました。

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

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

■ 関連記事 ■

自己紹介


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

初めてのPhotoshop

写真素材素材【写真AC】

paiza レベルアップ問題集 「FINAL問題 偶奇の判定」をPythonとGASで解いてみた

この記事を読むことで、整数やリストを標準入力で取得して、IF分岐とループを使って偶数・奇数の判定を出力する処理を、PythonとGASの両方のコードで習得することが可能になります。

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 から順に 奇数か偶数か判定し、奇数なら「odd」 、偶数なら「even」を改行区切りで出力してください。

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

入力例1
5
1 2 3 4 5

出力例1
odd
even
odd
even
odd

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

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

■ Pythonでの解き方 ■

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

手順として、

1:標準入力でリストの個数を取得

2:標準入力でリストを取得


2:ForループとIFで剰余演算子「%」を使って「%2==0」を「even(偶数)」、そうでないもの「odd(奇数)」を判定して出力

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

#リストの要素数を取得する
N=int(input())

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

#ループで偶奇の判定をする
for num in array:
    if num%2==0:
        print('even')
    else:
        print('odd')

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


#リストの要素数を取得する
N=int(input())

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


#【内包表記】ループで偶奇の判定をする
[print('even') if num%2==0 else print('odd') for num in array]        

ioの出力結果です。

■ GASでの解き方 ■

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

黄色いセルの所に「偶数・奇数の判定」を出力します。

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

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

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

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

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

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

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

6:ForループとIF文で剰余演算子「%」を使って「%2==0」を「even(偶数)」、そうでないものを「odd(奇数)」と判定して配列array2に追加。

7:スプレッドシート出力前に「even,odd(偶数・奇数)の判定」が格納された二次元配列array2のログ出力で確認する

8:スプレッドシートの黄色いセルに「even,odd」が格納された二次元配列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==0」を「even(偶数)」、そうでないものを「odd(奇数)」と判定して配列array2に追加。

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

array[o][i]としているのは、スプレッドシートは二次元配列で格納させるため、array[0]で最初の行目の0列目、1列目、2列目、3列目、4列目と走査していくからです。

手順7:スプレッドシート出力前に「even,odd(偶数・奇数)の判定」が格納された二次元配列array2のログ出力で確認する

console.log(array2);

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

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

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

function loop2no5() {

  //スプレッドシートからアクティブシートをアクセスする
  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==0」を「even(偶数)」、そうでないものを「odd(奇数)」と判定して配列array2に追加。
  for (let i = 0; i < N; i++) {
    if (array[0][i] % 2 == 0) {
      array2.push(['even']);
    } else {
      array2.push(['odd']);
    }
  }

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

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

}

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

六本木ヒルズのハロウィン、お化けカボチャ

■ 参考文献の紹介■

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

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

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

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

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

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

【Pythonクラスの継承とメソッドのオーバーライド】HiHiJet井上瑞稀さん美 少年 浮所飛貴さんのバク宙

この記事は、Pythonでクラスの継承と、メソッドのオーバーライドを学習中の方で、HiHiJetの井上瑞稀さん又は、美 少年の浮所飛貴さんを知っている(聞いたことがある〜大ファン)か、ジャニーズさんが好きな方を対象としています。
また、ループの【内包表記】についても触れています。

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

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

この動画では、美 少年の浮所さんの華麗なバク宙が見られます。
浮所さんが好きな方には、目の保養になるかもしれません。

https://youtu.be/pqZeG7gQpUA

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

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

Pythonの進捗状況(私のロードマップ)

さて、浮所さんが動画の冒頭で「井上瑞稀さんもバク宙していた」と言っていたので、Pythonでこのようなプログラムを作りました。

「親クラスPeople」では「山田太郎」さん、「鈴木花子」さん、「田中一郎さん」という名前を引数にして、それぞれ「yamada,suzuki,tanaka」というオブジェクトを作成しています。

また、「子クラスJohnnys」では「井上瑞稀」さん、「浮所飛貴」さんという名前を引数にして、それぞれ「inoue,ukisho」というオブジェクトを作成しています。

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

#親クラス「People」でコンストラクタと一般人の動きを掲載
class People:
    def __init__(self,name):
        self.name=name

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

小クラスでは、「self.nameさんはバク宙をした!!」という動きをプリント文で作ります。

#子クラス「Johnnys」でジャニーズバク宙の動きを掲載
class Johnnys(People):
    def action(self):
        print('【'+self.name+'】さんは「バク宙」をした!!')

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

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

山田太郎さん、鈴木花子さん、田中一郎さん、井上瑞稀さん、浮所飛貴さんのオブジェクトを生成するコードです。

#一般人とジャニーズのオブジェクトを作成
yamada=People('山田太郎')
suzuki=People('鈴木花子')
tanaka=People('田中一郎')
inoue=Johnnys('井上瑞稀')
ukisho=Johnnys('浮所飛貴')

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

#オブジェクトを配列に格納
array=[yamada,suzuki,tanaka,inoue,ukisho]

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

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

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

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

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

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

#親クラス「People」でコンストラクタと一般人の動きを掲載
class People:
    def __init__(self,name):
        self.name=name

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


#子クラス「Johnnys」でジャニーズバク宙の動きを掲載
class Johnnys(People):
    def action(self):
        print('【'+self.name+'】さんは「バク宙」をした!!')


#一般人とジャニーズのオブジェクトを生成
yamada=People('山田太郎')
suzuki=People('鈴木花子')
tanaka=People('田中一郎')
inoue=Johnnys('井上瑞稀')
ukisho=Johnnys('浮所飛貴')


#オブジェクトを配列に格納
array=[yamada,suzuki,tanaka,inoue,ukisho]


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

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

(通常のループか、内包表記のどちらかをコメントアウトしないと、2回出力されてしまいます。)

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

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

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

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

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

Pythonの進捗状況(私のロードマップ)

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

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

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

※ 音量注意 ※

●YouTube

● TikTok

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

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

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

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

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

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

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

インスタ再開しました。

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

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

■ 関連記事 ■

自己紹介


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

初めてのPhotoshop

写真素材素材【写真AC】

目白庭園の紅葉

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

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

※ 音量注意 ※

●YouTube

● TikTok

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

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

インスタ再開しました。

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

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

■ 関連記事 ■

自己紹介


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

初めてのPhotoshop

写真素材素材【写真AC】

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

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

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

※ 音量注意 ※

●YouTube

● TikTok

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

大樹の広場

大樹と星。

オーロラ

日の丸の噴水

竹林

騎手の方のユニフォーム

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

昭和レトロな雰囲気

噴水で締めます。

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

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

インスタ再開しました。

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

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

■ 関連記事 ■

自己紹介


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

初めてのPhotoshop

写真素材素材【写真AC】

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

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

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

※ 音量注意 ※

●YouTube

● TikTok

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

お、石造か!!

俺のBakery & Cafe

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

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

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

インスタ再開しました。

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

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

■ 関連記事 ■

自己紹介


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

初めてのPhotoshop

写真素材素材【写真AC】

お台場イルミネーション

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

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

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

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

※ 音量注意 ※

●YouTube

● TikTok

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

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

お台場に到着。

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

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

レインボーブリッジ

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

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

インスタ再開しました。

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

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

■ 関連記事 ■

自己紹介


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

初めてのPhotoshop

写真素材素材【写真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サンプル
基本情報技術者試験

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