【Python_円周率】円の面積、球体の体積、円周を計算する関数の使い方、二乗3乗などの累乗の計算の仕方、戻り値の小数点以下桁指定

この記事を読むことで、

・Pythonの二乗・3乗などの累乗の計算

・円周率を使った計算で円の面積を求める関数

・球の体積を求める関数

・円周を求める関数

・小数点以下を含めた桁の指定



の概要が掴めます。

用意する関数は、

・円の面積を求める関数area(引数:半径r)
・球の体積を関数globe(引数:半径r)
・円周を求めるcircle(引数:半径r)

です。

今回は引数の半径rは共通なので、それぞれの関数呼び出しの前に、ここでは半径rを5cmとしているので、

r=5

を記述しました。

それぞれの関数の呼び出しのコードです。
上から、円の面積、球の体積、円周の長さです。

#それぞれの関数の呼び出し
area_ans=(area(r))   #円
globe_ans=(globe(r)) #球
circle_ans=circle(r) #円周

上記の3つの関数を呼び出して、そこで計算した値(戻り値)をそれぞれ

area_ans(求めた円の面積)
globe_ans(求めた球の体積)
circle_ans(求めた円周の長さ)

に代入して、小数点以下も含めた桁指定をして、結果を表示します。

円周率を扱うのに、モジュールをインポートしています。

#円周率を扱うのに、インポートしている
import math

円の面積を計算するのに、事情はr**2で半径の二乗を求めています。
**の後を3にする球体や立方体など3次元の体積が求められます。

#円の面積を計算。**で二乗を使っている
def area(r):
    return r**2*math.pi

円周率はご存知の通り、3.14159265359…と桁数が膨大なので、戻り値の表示はここでは整数も含めた5桁で表示します。
コードはこの様になります。

#桁数を指定して表示
print('円の面積は'+'{:.5}'.format(area_ans)+'cm ^2です。')
print('球の体積は'+'{:.5}'.format(globe_ans)+'cm ^3です。')
print('円周は、'+'{:.5}'.format(circle_ans)+'cmです。')

では、まずは円の面積を求めます。
コードと実行結果です。

import math

#円の面積を計算。**で二乗を使っている
def area(r):
  return math.pi*r**2

#半径
r=5
area_ans=area(r)


#桁数を指定して表示
print('円の面積は'+'{:.5}'.format(area_ans)+'cm ^2です。')


次に球の体積を求めます。
公式は、

V=\frac{4}{3}πr^{3}

ですので、体積を計算する関数のコードは、

#球の体積を計算。**で3乗を使っている
def globe(r):
    return 4/3*math.pi*r**3

となります。

コードと実行結果です。

import math

#円の面積を計算。**で二乗を使っている
def area(r):
  return math.pi*r**2

#球の体積を計算。**で3乗を使っている
def globe(r):
    return 4/3*math.pi*r**3


#半径
r=5

#関数を呼び出し
area_ans=area(r)#円の面積
globe_ans=globe(r)#球の体積

print()

#桁数を指定して表示
print(' 円の面積は'+'{:.5}'.format(area_ans)+'cm ^2です。\n')
print(' 球の体積は'+'{:.5}'.format(globe_ans)+'cm ^3です。\n')

結果表示のprint文の最後の改行は、「\n」を使っています。
macをお使いの方は、[option]+[¥]で「バックスラッシュ」が表示されます。


最後に円周の長さを求めます。

#円周を求める
def circle(r):
    return 2*math.pi*r

コードと実行結果です。

import math

#円の面積を計算。**で二乗を使っている
def area(r):
  return math.pi*r**2

#球の体積を計算。**で3乗を使っている
def globe(r):
    return 4/3*math.pi*r**3

#円周を求める
def circle(r):
    return 2*math.pi*r


#半径
r=5

#関数を呼び出し
area_ans=area(r)#円の面積
globe_ans=globe(r)#球の体積
circle_ans=circle(r)#円周の長さ

print()

#桁数を指定して表示
print(' 円の面積は'+'{:.5}'.format(area_ans)+'cm ^2です。\n')
print(' 球の体積は'+'{:.5}'.format(globe_ans)+'cm ^3です。\n')
print(' 円周は、'+'{:.5}'.format(circle_ans)+'cmです。\n')


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

スカイツリーからの眺めです。

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

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

Python自作サンプル集へ戻る

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

paiza レベルアップ問題集 ループ1の2「STEP: 1 数列の和」 をPythonとGASの両方で解いてみた

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

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

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

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


数列の和 (paizaランク D 相当)

問題:1行目に整数Nが与えられ、2行目にN個の数列が与えら、その和を求める。

具体例として入力例3の、N=6,「8,1,3,8,1,3」で考えてみます。

入力例3
6
8 1 3 8 1 3

出力例3
24

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


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

<io初期>

手順として、
1.標準入力でNを読み込む
2.標準入力でリストとしてリストarrayを読み込む
3.sum関数で合計値を出力

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

手順1では、

N=int(input())

で、input()で標準入力を使ってintで整数として取り込んでいます。

手順2では、

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

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

手順3では、

print(sum(array))

で合計値を求めます。

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

<コード1>

N=int(input())
array=list(map(int,input().rstrip().split(' ')))
print(sum(array))

ただ、この問題、ループを使うんですよね。
なので、ループを使ってみると、合計を入れる用の変数ansを用意して、そこに0を代入して初期化しています。

ans=0

この後ループでansに加算します。

ans+=num

の所で加算しています。
ans=ans+numを略した形で書いています。

ループの部分コードです。

for num in array:
    ans+=num

ここまでのコードです。

<コード2>

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

#合計を入れる変数ansを用意する
ans=0

for num in array:
    ans+=num

print(ans)


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

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

<スプレッドシートビフォア>

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

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:スプレドシートの黄色いセルに出力するのに用いる空の配列をarrayを定義する
3:合計値ans=0と0で初期化する
4:ピンクのセルから配列の長さNに出力する数値(この問題の場合は「6」)を取得する。
5:空の配列cellを用意して、灰色の範囲から配列を取得する。
6:ループでN回(この場合はN=6)ansに加算する
7:ansの計算結果をログに出力して確認する
8:arrayに二次元配列としてansを追加する
9:arrayに追加されたことをログ出力で確認する
10:スプレッドシートの黄色い所にB4である(4,2)表示する。

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する

let array=[];

手順3:合計値ansを0で初期化する

ans=0;

手順4:スプレッドシートのピンクのセルから表示する数値(この場合6)を取得する。

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

手順5:スプレッドシートの灰色のセル範囲から配列(8,1,3,8,1,3)を取得する。

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

手順6:ループをN回(6回)回してansに加算する

ループ全体ではこのようになります。

//ループでN回(この場合はN=6)ansに加算する
  for (let i=0;i<N;i++){
    ans+=cell[0][i];
  }

手順7:ansの計算結果ををログとして出力する

console.log(ans);

ログの出力結果です。

手順8:計算結果ansを二次元配列になるようにarrayに追加する

array.push([ans]);

手順9:スプレッドシートに入力するのにansが二次元配列になっているのかをログで出力して確認する。

console.log(array);

ログの出力結果です。

手順10:計算結果が入った二次元配列arrayをスプレッドシートの黄色いセルに出力する。

ss.getRange(4,2).setValue(array);

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

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

function loop8(){

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

  //スプレドシートの黄色いセルに出力するのに用いる空の配列をarrayを定義する
  let array=[];

  //計算結果を格納する合計値ans=0と0で初期化する
  ans=0;

  //ピンクのセルから配列の長さNに出力する数値(この問題の場合は「6」)を取得する。
  let N=ss.getRange(1,2).getValue();

  //空の配列cellを用意して、灰色の範囲から配列を取得する。
  let cell=ss.getRange(2,2,1,N).getValues();

  //ループでN回(この場合はN=6)ansに加算する
  for (let i=0;i<N;i++){
    ans+=cell[0][i];
  }

  //ansの計算結果をログに出力して確認する
  console.log(ans);

  //arrayに二次元配列としてansを追加する
  array.push([ans]);

  //arrayに追加されたことをログ出力で確認する
  console.log(array);

  //スプレッドシートの黄色い所にB4である(4,2)表示する。
  ss.getRange(4,2).setValue(array);


}

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

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

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

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

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





OLYMPUS DIGITAL CAMERA

遊歩道の桜です。

← ループ1の1へ                         次の問題へ→

■ 関連記事 ■

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

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

【Pythonループ・内包表記】リストの並べ替え|V6の名曲を例にリストの昇順と降順の並べ替えをしてみました。

この記事を読むことで、

・Pythonのループの基礎

・内包表記


・ループを使ってリストに要素を追加する


・上記の内包表記と二乗


・リストの並べ替え(昇順・降順)

についての理解を深められます。

まず基本的な論点を学習してから、V6の名曲を例にリストにして、昇順、降順を行っています。


まずは、初歩的なループと内包表記の対応付けと言う、ごくごく基礎から入って行きます。

0から9まで表示するシンプルなループです。
range(10)となっているので10未満の数が表示されます。

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

結果はこの様になります。

このコードを内包表記を使うとたった1行で書ける様になります。
内包表記の書式はこの様になります。

[結果 for文]

それでは内包表記で書いていきます。

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

出力結果を改行せずに、リストとして表示したい場合を基礎的なfor文で書いたコードと実行結果です。

#空のリスト
array=[]

#基礎的なループで空のリストarrayに要素を追加する
for i in range(10):
  array.append(i)

#結果出力
print(array)

このコードをもっと短くした内包表記のコートとの対応です。
print文の中にリストの[ ]を使っています。

#内包表記でリストに要素を加えて表示する
[print([i for i in range(10)])]

次は内包表記を用いて計算を致します。
この配列の要素それぞれの二乗を求めます。

#内包表記でリストに二乗をした要素を加えて表示する
[print([i**2 for i in range(10)])]


内包表記に慣れてきた所で、計算用リストを使います。
計算用リストarrayの要素をそれぞれ二乗しています。

#計算用リスト
array=[1,3,5,7,9,11,13,15]

#[計算式 for in リスト]
print([i**2 for i in array])


リストを使った内包表記にも慣れて来た頃で、いよいよV6の名曲リストを作成します。

メンバーは
トニセン(年長3人):坂本昌行、長野博、井ノ原快彦
カミセン(年少3人):森田剛、三宅健、岡田准一
で、私はトニセンとカミセンの間の年齢なので、感慨深いものがあります。

リスト名は、そのまま「V6」にします。
ループの変数として、これまで「i」を使っていた箇所を「song」にします。

#V6の中で特に私が好きな曲
V6=['MUSIC FOR THE PEOPLE',
'愛なんだ',
'WAになっておどろう',
'Darling',
'CHANGE THE WORLD',
'Orange',
'BEAT YOUR HEART',
'MADE IN JAPAN',
'Believe Your Smile',
'Be Yourself!'
]

#[計算式 for in リスト]
[print(song) for song in V6]

結果を表示します。


曲名を昇順にしたい時は、

リスト名.sort()

を追記します。

#V6の中で特に私が好きな曲
V6=['MUSIC FOR THE PEOPLE',
'愛なんだ',
'WAになっておどろう',
'Darling',
'CHANGE THE WORLD',
'Orange',
'BEAT YOUR HEART',
'MADE IN JAPAN',
'Believe Your Smile',
'Be Yourself!'
]

#昇順
V6.sort()

#[計算式 for in リスト]
[print(song) for song in V6]

逆にリストを降順にしたい時は

リスト名.sort(reverse=True)

と改変します。

#V6の中で特に私が好きな曲
V6=['MUSIC FOR THE PEOPLE',
'愛なんだ',
'WAになっておどろう',
'Darling',
'CHANGE THE WORLD',
'Orange',
'BEAT YOUR HEART',
'MADE IN JAPAN',
'Believe Your Smile',
'Be Yourself!'
]

#降順に改変
V6.sort(reverse=True)

#[計算式 for in リスト]
[print(song) for song in V6]

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

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

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

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

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

Python自作サンプル集へ戻る

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

paiza レベルアップ問題集 ループ1の1「FINAL問題! a ~ z までを表示」をPythonとGASの両方で解いたコードの紹介

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

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

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

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

BOSS問題 a ~ z までを表示 (paizaランク D 相当)

問題:a ~ z のアルファベットを、改行区切りで出力してください

<<Pythonでの解き方>>

手順として、
1.aの文字コード(97)を求める
2.zの文字コード(122)を求める
3.ループで97〜122+1まで繰り返す
  123-97=26で、アルファベット26文字分の出力をします。
4.求めた文字コードを逆にアルファベットに変換して出力する。

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

手順1では、

a=ord(‘a’)

で、小文字’a’の文字コードを97と求めています。

手順2では、

z=ord(‘z’)

で、小文字’z’の文字コードを122と求めています。

手順1、2までのコードを出力するには、この様なコードを書きます。

a=ord('a')
z=ord('z')

print(a,z)

文字コードの出力結果です。

手順3では、ループを使って変数charにaからz+1まで、つまり97,98,99,100…122,123まで、ループ内のprint文の処理を施しています。
122ではなく123と1を加えているのは、rangeの中ではその数未満、つまり123未満になるからです。

for char in range(a,z+1):

手順4では、chr関数を使うことによって、文字コードを文字に変換して、それを出力しています。

print(chr(char))

手順3,4のループではこの様なコードになります。

for char in range(a,z+1):
    print(chr(char))

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

a=ord('a')
z=ord('z')

for char in range(a,z+1):
    print(chr(char))

内包表記を使ってみます。

a=ord('a')
z=ord('z')

[print(chr(char)) for char in range(a,z+1)]

内包表記で、コードを1行分を減らすことが出来ました。

<<GASでの解き方>>

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

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

アルファベット小文字のa〜zを黄色いセルに出力します。

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する
3:小文字の’a’の文字コードを求め、ログに出力する。
4:小文字の’z’の文字コードを求め、ログに出力する。
5:Kに数値を出力する回数(この問題の場合は「7」)を取得する。
5:ループでi=97,98…122まで文字コードからアルファベットに変換して空の配列に追加する
6:arrayに二次元配列としてアルファベットが追加されたことをログ出力で確認する
7:スプレッドシートに表示する。セルA1から8行分なので、getRange(1,1,K)でセルA4からK行分を確保してそこに配列を流し込むイメージ

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する

let array=[];

手順3:アルファベットの小文字’a’を文字コードに変換する

let a=’a’.charCodeAt();

ログに出力する

console.log(a);

手順4:アルファベットの小文字’z’を文字コードに変換する

let a=’z’.charCodeAt();

ログに出力する

console.log(z);

手順5:ループで97,98,…122まで文字コードからアルファベットに変更して出力用の配列arrayに追加する。

繰り返し回数の設定

for(let i=a;i<=z;i++)

アルファベットに変換して配列に追加する処理

array.push([String.fromCharCode(i)]);

手順5のループ全体のコードはこちらです。

for(let i=a;i<=z;i++){
    array.push([String.fromCharCode(i)]);
  }

手順6:arrayに二次元配列としてアルファベットが格納されたことをログで確認する。

console.log(array);

手順7:スプレッドシートの黄色い所にアルファベットを格納した二次元配列arrayを出力する

ss.getRange(1,1,26).setValues(array);

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

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

function loop7(){

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

  //黄色いセルに出力用の空の配列を用意する
  let array=[]

  //小文字'a'の文字コードを求めてログに出力
  let a='a'.charCodeAt();
  console.log(a);

  //小文字'z'の文字コードを求めてログに出力
  let z='z'.charCodeAt();
  console.log(z);

  //ループでi=97,98...122まで文字コードからアルファベットに変換して空の配列に追加する
  for(let i=a;i<=z;i++){
    array.push([String.fromCharCode(i)]);
  }

  //二次元配列としてアルファベットに追加されたことを確認する
  console.log(array);

  //スプレッドシートの黄色い所にアルファベットを出力する
  ss.getRange(1,1,26).setValues(array);

}

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

お疲れ様でした。

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

写真は、スカイツリーエレベーター「夏」の江戸切子です。
隅田川の花火をイメージして作られたそうです。

←前の問題へ                  ループ1の2へ→

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

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

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

■ 関連記事 ■

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

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

paiza レベルアップ問題集 ループ1の1「STEP: 6 ある数をある回数表示 2」 をPythonとGASの両方で解いたコードの紹介

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

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

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

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

ある数をある回数表示 2 (paizaランク D 相当)

問題:整数N,Kが与えられます。
NをK回、改行区切りで出力して下さい。

具体例として入力例3の、N=39,K=70で考えてみたい所ですが、70回も出力するのは大変なので、(私がブログで記録するには、という個人的な事情でごめんなさいm(_ _)m)、K=7で考えてみます。

この場合、「39」を7回出力します。

入力例3
39 7

出力例3
39
39
39
39
39
39
39

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

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

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。
今回はN=39,K=7なので、paiza.ioの左下の入力の所を下記のように記述します。

手順として、
1.標準入力でN,Kを読み込み、それぞれにN=39,K=7を代入する
2.ループでK回(7回)繰り返すように設定する
3.N(この例では39)を出力する

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

手順1では、

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

で、input()で標準入力を使ってintで整数として取り込んでいます。
mapを使うことで1行の複数の値を取り込めます。
rstrip()では、改行の影響を無効にしています。
split(‘ ‘)で空白区切りの文字を取り込んでいます。

手順2では、

for i in range(K):

で、ループを使って、0,1,2,…K-1まで、ループ内のprint文の処理を施しています。
この問題の場合K=7なので、0,1,2,3,4,5,6までの7回ループを回します。

print(N)

で、N(この場合39)を出力しています。
手順1,2と合わせて、39を7回出力出来ました。

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

N,K=map(int,input().rstrip().split(' '))
for i in range(K):
    print(N)

内包表記を使ってみます。

N,K=map(int,input().rstrip().split(' '))
[print(N) for i in range(K)]

コードを1行減らすことが出来ました。

<<GASでの解き方>>

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

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

なんか、鮭と卵みたいで美味しそうですね(=^x^=)
黄色い部分のA4からA10までに「39」を7回出力します。

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する
3:Nに出力する数値(この問題の場合は「39」)を取得する。
4:Kに数値を出力する回数(この問題の場合は「7」)を取得する。
5:ループでK回(この場合はK=7)配列array[]の中に[N](この場合は39)を格納する
6:arrayに二次元配列として39を7回格納出来たことをログ出力で確認する
7:スプレッドシートに表示する。セルA1から8行分なので、getRange(1,1,K)でセルA4からK行分を確保してそこに配列を流し込むイメージ

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する

let array=[];

手順3:スプレッドシートのピンクのセルから表示する数値(この場合39)を取得する。

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

手順4:スプレッドシートの灰色のセルから表示する回数(この場合7)を取得する。

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

手順5:ループをK回(7回)回して、push([N])を追加して二次元配列として扱えるようにする。

array.push([N]);

ループ全体ではこのようになります。

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

手順6:arrayに二次元配列として39を7回格納出来たことをログ出力で確認する

console.log(array);

実行結果です。

手順7:スプレッドシートに表示する。セルA4からK行分なので、getRange(4,1,1)でセルA4からK行分を確保してそこに配列を流し込むイメージ

ss.getRange(4,1,K).setValues(array);

スプレッドシートオブジェクトにgetRangeでセルA1からK行確保し、setValues(array)で出力しています。

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

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

<全コード>

function loop6(){

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

  //シートの黄色い部分に出力用の二次元配列を用意する
  let array=[];

  //表示する数値Nをピンクのセルから取得する
  let N=ss.getRange(1,2).getValue();

  //表示回数K回を灰色のセルから取得する
  let K=ss.getRange(2,2).getValue();

  //ループでK回、arrayに二次元配列としてarray.push([N])で格納する
  for(let i=1;i<=K;i++){
    array.push([N])
  }

  //arrayに二次元配列として取得出来たことをログ表示で確認する。
  console.log(array);

  //出力用の配列arrayを黄色いセルに出力する。
  ss.getRange(4,1,K).setValues(array); 

}

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

お疲れ様でした。

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

横浜ランドマークタワーの夕暮れ

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

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

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

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

■ 関連記事 ■

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

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

paiza レベルアップ問題集 ループ1の1「STEP: 5 ある数をある回数表示 1」 をPythonとGASの両方で解いたコードの紹介

この記事を読むことで、Pythonの基本的なループと内包表記、GASではループと二次元配列についての概要が掴めます。

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

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

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

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


ある数をある回数表示 1 (paizaランク D 相当)

問題:3 を 8 回、改行区切りで出力してください。

入力される値: 与えられていません

回答:期待する出力
3 を 8 回、改行区切りで出力してください。
出力の末尾には改行を入れてください。

3
3
3
3
3
3
3
3

ではまず、Pythonで解いて行きます。

以下の手順でコードを書いて行きます。

1.ループが8回繰り返すように設定する

2.「3」を出力する

 ・基本的なループ
 ・内包表記によるループ

手順1では、

for i in range(8):

で、ループを設定しています。
rangeを使っているので変数「i」には0,1,2,3,4,5,6,7が代入されて、8回繰り返す処理が設定されます。

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

このコードの実行結果はこちらになります。


手順2では、

print(3)

で、3を出力しています。

先ほどのprint(i)の「i」を「3」に変えて「3」を8回出力します。

for i in range(8):
    print(3)

実行結果です。


基本的なループの次にループをたった1行のコードで書ける内包表記について掲載致します。

[ print(3) for i in range(8) ]

コードはこちらで同様の出力結果を得られます。

#内包表記によるループのコード
[print(3) for i in range(8)]

Pythonは以上です。


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

まず、スプレッドシートにこの様に設定しました。
この黄色い部分に結果を出力していきます。

この黄色い部分のA1からA8までに「3」を8回出力します。

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

手順は以下の様になります。

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

2:スプレッドシートのA1(1,1)から始まる8行分の黄色いセルに出力用の空の配列arrayを定義する


3:ループ8回繰り返してその中でpushを用いてarray[]の中に[3]を格納して、二次元配列として格納出来たことをログ出力で確認する

4:スプレッドシートのセルA1(1,1)から8行分の黄色いセルに出力する


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

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

const ss=SpreadsheetApp.getActiveSheet();

GASのコードを関数「loop5」に書いて行きます。

function loop5() {

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

}

手順2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する

let array=[];

function loop5() {

  const ss=SpreadsheetApp.getActiveSheet();

  //スプレッドシートに出力用の配列を用意する
  const array=[];

}

手順3:ループを8回繰り返してその中でpushを用いて、空の配列arrayにpush([3])を追加して二次元配列として扱えるようにする

array.push([3]);

ループのコードと実行結果にログ出力です。

function loop5() {

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


  //ループで空の配列に二次元配列として「3」を8回格納する
  for(let i=1;i<=8;i++){
    array.push([3]);
  }

  //ログで二次元配列になっていることを確認する
  console.log(array);

}

配列arrayに二次元配列として格納されていることが確認出来ました。


手順4:スプレッドシートのセルA1から始まる8行分の黄色いセルに出力する

ss.getRange(1,1,8).setValues(array);

スプレッドシートオブジェクトにgetRangeでセルA1から8行確保し、setValues(array)で出力しています。

セルA1は(1,1)で、8行分で(1,1,8)、1列分ですので(1,1,8,1)となりますが、1列の場合は省略可能です。

また、配列arrayの要素は8個分と複数ですので、setValuessが付いて複数形になります。

コードの実行結果です。

スプレッドシートに無事に出力出来ました。


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

スカイツリーからの夜景です。

←前の問題                      次の問題→

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

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

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

■ 関連記事 ■

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

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

paiza レベルアップ問題集 ループ1の1「STEP: 4 数字の受け取り 2」 をPythonとGASの両方で解いたコードの紹介

この記事を読むことでループ文字列の分割、Pythonの標準入力、GASの二次元配列の扱いの概要が掴めます。

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

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

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

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


数字の受け取り 2 (paizaランク D 相当)

この問題では、最初の行にN個の数字が与えられます。
その下の2行目には具体的な数値が与えられます。

今回は入力例3を用います。

入力例3
8
8 1 3 8 1 3 8 1

出力例3
8
1
3
8
1
3
8
1

この入力例3の場合は、1行目に数値の個数8個と、2行目に具体的な8個の数値が与えられます。

ではまず、Pythonで解いて行きます。


paiza.ioに入力例3をそのままコピペします。

コードの手順として、

1. 1行目の数値の個数8を標準入力で変数Nに数値として取得

2. 2行目の8つの数をリスト(配列)として標準入力で取得

3. forループでリストの長さN個分を出力する

  ・基本的なループ
  ・リスト出力に便利なループ
  ・内包表記によるループ 

大まかにこの様な流れになります。

手順1: 1行目の数値の個数8を標準入力でNに数値として取得

N=int(input())

この様なコードで標準入力を数値として読み込み、Nを出力して確認します。

#数値の個数を標準入力でNに取得
N=int(input())

#取得出来たことを確認する
print(N)

Nの出力結果です。

無事、数値として標準入力で変数Nに取得出来ました。


手順2: 2行目の8つの数をリスト(配列)として標準入力で取得

2行目の数値8つの区切り文字は半角スペースで、リストarrayに標準入力を用いて取得します。
複数のメソッドなどが登場しているので、この例に沿って役割をまとめます。

input … 標準入力で文字や数値を取得する

rstrip… 文字列の末尾の文字を除去

split … 半角スペースなどの指定の区切り文字で分割して取得する

int … 上記で取得する対象が数値である

map … まとめて適用


list … リスト(配列)変換

こちらのコードでリストarrayに取得します。

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

取得した後、arrayを出力して確認します。

N=int(input())

#print(N) ← コメントアウト

#リスト形式でarrayに8つの数値を標準入力で取得する
array=list(map(int,input().rstrip().split(' ')))

#リストarrayを出力して確認
print(array)

この様に、標準入力を幾つかのメソッドと一緒に使って、arrayがリスト形式になりました。

長さ8のリストarray=[8 , 1 , 3 , 8 , 1 , 3 , 8 , 1]と取り込まれ、その添字ごとの要素は、

array[0]=8,
array[1]=1,
array[2]=3,
array[3]=8,
array[4]=1,
array[5]=3,
array[6]=8,
array[7]=1

です。

ループに入る前に一旦コードを整えます。
コメントアウトをした分を削ります。

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


手順3: forループでリストの長さN個分を出力する

今変数Nには、N=8と代入されています。
このNの値をループを用いて出力例3に合わせて縦に出力します。

リストarrayの添字は0から始まるので、i=0〜7までの数字を出すのにそのままrange(N)が使えます。

rangeでは、0からの括弧内の数値未満分カウンタ変数のiがループ内で変わります。

for i in range(N):

array[i]をループで回してiに0から7までの添字が入り、array[0]からarray[7]を出力します。

Pythonでの基本的なループのコードと出力結果はこちらになります。

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

#基本的なループ
for i in range(N):
    print(array[i])

次項からは、リストに適したループの便利な記述を掲載します。


リスト出力に適した中でも直感的に分かりやすい書き方は、

for リストの要素の変数名 in リスト名:

となりますので、数値を取り出すと分かりやすい様にリストの要素の数値に該当する変数としてnumを用います。

for num in array:

numを用いることによって、出力するのは数値だというのがコードを書く方も読む方も分かりやすいと思います。
基本的には何でも良いのですが、伝わりやすさから変数名をnumに致しました。

下記のコードで少しシンプルになった上に同様な出力結果が得られます。

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

#リストに適したループを用いる
for num in array:
    print(num)


上記のループでも十分にシンプルになりましたが、更にコード短くするには、ループをたった1行で表記する内包表記を用います。

[出力結果のprint文 for リストの要素の変数名 in リスト名]

今回の例ですと、

[print(num) for num in array]

と表記致します。

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

#内包表記を用いた1行のループ
[print(num) for num in array]    

Pythonは以上です。
次は、GASで解いて行きます。


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

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

paizaの問題集側で入力例3を2行分全てコピーして、スプレッドシート側で灰色のセルB1の所で[Ctrl] + [Shift] + [V] で値のみ貼り付けます。

すると、灰色のセルB1にN=「8」、緑色のセルB2に具体的な数値「8 1 3 8 1 3 8 1」が書式を崩さずにそのまま貼り付けられます。

これをD2から始まる8行の黄色いセルに出力します。

※ スプレッドシートに出力する場合は、二次元配列にして出力します ※

手順は以下の様になります。

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

2: 空の配列arrayを宣言して、数値の個数Nと8個の数値をまとめて、灰色のセルB1(1,2)から2行分arrayに取得する

3: 定数Nにarray[0][0]を代入する

4: splitを用いて残りの配列array[1][0]を半角スペースで分割する

5: スプレッドシート出力用に空の配列array2を宣言して、ループの中でpushを用いてarrayの要素をarray2に二次元配列になる様に追加する。


6: スプレッドシートのD2(2,4)から始まる黄色いセルに出力する

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

ss=SpreadsheetApp.getActiveSheet();

関数「loop4」にコードを書いて行きます。

function loop4() {

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


手順2: 空の配列arrayを宣言して、数値の個数Nと8個の数値をまとめて、灰色のセルB1(1,2)から2行分arrayに取得する

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

セルB1が(1,2)でそこから2行分で(1,2,2)となります。
列数の1列は省略可能です。

2つの数値を取得するので、getValuesと複数形のsが付きます。

function loop4() {

  const ss=SpreadsheetApp.getActiveSheet();

  //空の配列arrayを宣言する
  let array=[];

  //灰色のセルB1(1,2)から2行分取得して、配列arrayに格納する
  array=ss.getRange(1,2,2).getValues();

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

出力結果です。

この配列arrayは、array[0][0]が数値の個数「8」で、残りの8個の数値がarray[1][0]になります。

次の手順でarray[0][0]の8を定数Nに代入します。


手順3: 定数Nに配列array[0][0]を代入する

const N=array[0][0];

function loop4() {

  const ss=SpreadsheetApp.getActiveSheet();

  let array=[];
  array=ss.getRange(1,2,2).getValues();
  console.log(array);

  //個数をNに代入
  const N=array[0][0];
  
  //代入されたことをログで確認する
  console.log(N);
  
}

実行後の出力結果です。

この様に、定数Nに8が代入されたことが確認出来ました。
次の手順では、残りの配列array[1][0]を半角区切りの配列arrayにします。


手順4: 残りの配列array[1][0]を半角スペース区切りで数値ごとに分割する

array[1][0]をsplitで半角スペース区切りで分割します。

array=array[1][0].split(‘ ‘);

コードと実行結果です。

function loop4() {

  const ss=SpreadsheetApp.getActiveSheet();

  let array=[];
  array=ss.getRange(1,2,2).getValues();
  console.log(array);

  
  const N=array[0][0];
  console.log(N);

  //残りの数値をsplitで分割する
  array=array[1][0].split(' ');

  //arrayが半角区切りになっていることをログで確認する
  console.log(array);

}

これで、arrayの残りの分が半角スペース区切りで分割出来ました。


手順5:スプレッドシート出力用に空の配列array2を宣言して、ループの中でpushを用いてarrayの要素をarray2に二次元配列になる様に追加する。

for(let i=0;i<N;i++)

カウンタ変数iはループの中で代入される数が変わるのでletで宣言しています。

ループは数値の個数の8が代入されているNをそのまま利用します。
配列は添字が0から始まるので、i<Nとすることで、i=0,1,2,3,4,5,6,7の8回分ループを繰り返します。

array2.push([array[i]]);

スプレッドシート出力用のarray2が二次元配列になる様に、pushを用いて追加しています。

[array[i]]とarrayの全体を[ ]で括ることで二次元配列としての追加になります。

下記のコードの実行結果です。

function loop4() {

  const ss=SpreadsheetApp.getActiveSheet();

  let array=[];
  array=ss.getRange(1,2,2).getValues();
  console.log(array);

  
  const N=array[0][0];
  console.log(N);

  
  array=array[1][0].split(' ');
  console.log(array);

  //スプレッドシート出力用の空の配列array2を宣言
  const array2=[];

  //ループを用いてarrayの要素をarray2が二次元配列になる様に追加する
  for(let i=0;i<N;i++){
    array2.push([array[i]]);
  }

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

}


手順6: スプレッドシートのD2(2,4)から始まる黄色いセルに出力する

ss.getRange(2,4,N).setValues(array2);

セルD2が(2,4)でそこから8行分出力するので、Nをそのまま使います。
(2,4,N)で8行分で、1列ですので(2,4,N,1)になりますが、1列は省略可能です。

また、数値の数が8個で複数形ですので、setValuessが付きます。
コードとスプレッドシートの出力された実行結果です。

function loop4() {

  const ss=SpreadsheetApp.getActiveSheet();

  let array=[];
  array=ss.getRange(1,2,2).getValues();
  console.log(array);

  
  const N=array[0][0];
  console.log(N);

  
  array=array[1][0].split(' ');
  console.log(array);

  
  const array2=[];

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

  console.log(array2);

  //スプレッドシートのセルD2(2,4)から始まる黄色いセル8行に出力する
  ss.getRange(2,4,N).setValues(array2);

}

※ この記事の作成に参考になったサイトです ※
ありがとうございます。

Python mapの使い方
Python rstripの使い方


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

羽田空港第1ターミナルの展望台の夜景です。

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

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

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

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

■ 関連記事 ■

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

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

【Python関数でジャンケンゲーム】乱数の扱い方など

この記事を読むことで、

・乱数を使った簡単なじゃんけんゲームが作れる

・標準入力


・論理演算子 OR

IF文を使った勝敗分岐の復習

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

ルールとして、
1:グー 2:チョキ 3:パー で、変数youに半角数字で標準入力を使って入力をします。

コンピューターは、1〜3までの乱数を求めて変数pcに代入します。
乱数の算出と表示をするコードはこちらになります。

#乱数を使う為、ランダムモジュールをインポートする
import random

#乱数pcの範囲を1から3までとする
pc=random.randint(1, 3)
print(pc)

これで乱数が求まりました。

次に、あなたの手を標準入力します。

#標準入力で、あなたの出す手を決める
print("じゃんけんの手を半角数字で「1:グー  2:チョキ  3:パー」 >>>",end="")
you=int(input())

これで、半角で数値が入力出来るようになり、1から3までがそれぞれジャンケンの手に対応しています。

勝敗の判定をIF文で行っています。

#勝敗の判定
if you == pc:
    msg="あいこです。"
elif you == pc -1 or you == pc +2:
    msg="YOU WIN!!!!!!"
else:
    msg="YOU LOSE...."

print(msg)

まず、一番簡単なのが「あいこ」の時なので、最初に書きます。
次にあなたがコンピューターに勝つ場合は、

・グー(1) VS チョキ(2)…. youはpcより1小さい

・チョキ(2) VS パー(3)…. youはpcより1小さい

・パー(3) VS グー(1) …. youはpcより2大きい

の場合です。

つまり、youがpcよりも1小さいか、2大きい時にあなたの勝ちとなります。
または、に当たりますので、IF文の中でORを使っています。

ここまでのコードをまとめてみます。

#乱数を使う為、ランダムモジュールをインポートする
import random

#乱数pcの範囲を1から3までとする
pc=random.randint(1, 3)
print(pc)

#標準入力で、あなたの出す手を決める
print("じゃんけんの手を半角数字で「1:グー  2:チョキ  3:パー」 >>>",end="")
you=int(input())


#勝敗の判定
if you == pc:
    msg="あいこです。"
elif you == pc -1 or you == pc +2:
    msg="YOU WIN!!!!!!"
else:
    msg="YOU LOSE...."

print(msg)

ここからは、このジャンケンの部分を関数にしていきます。
コンピュータが出す手の乱数とその手の表示、勝敗分岐まで関数に記述しました。

関数Comuter_Handの仮引数youは、標準入力であなたが入力した1〜3までの半角英数字が入ります。

#コンピューターの出す手の関数
def Computer_Hand(you):

  #乱数pcの範囲を1から3までとする
  pc=random.randint(1, 3)
  print(pc)

  #コンピューターの出した手
  if pc==1:
    print("PC:グー") 
  elif pc==2:
    print("PC:チョキ")
  else:
    print("PC:パー")

  #勝敗の判定
  if you == pc:
    msg="あいこです。"
  elif you == pc -1 or you == pc +2:
    msg="YOU WIN!!!!!!"
  else:
    msg="YOU LOSE...."
  return msg

この関数を呼び出すのは、あなたが標準入力でジャンケンの手を入れてからです。
戻り値として勝敗結果のmsgを呼び出し元に返します。

#標準入力で、あなたの出す手を決める
print("じゃんけんの手を半角数字で「1:グー  2:チョキ  3:パー」 >>>",end="")
you=int(input())

judge=Computer_Hand(you)

関数Computer _Handの引数をyouとして呼び出しています。
戻り値として帰ってきた勝敗結果がjudgeに代入されます。


ジャンケンコードの全体と実行結果です。

#乱数を使う為、ランダムモジュールをインポートする
import random

#コンピューターの出す手の関数
def Computer_Hand(you):

  #乱数pcの範囲を1から3までとする
  pc=random.randint(1, 3)
  print(pc)

  #コンピューターの出した手
  if pc==1:
    print("PC:グー") 
  elif pc==2:
    print("PC:チョキ")
  else:
    print("PC:パー")

  #勝敗の判定
  if you == pc:
    msg="あいこです。"
  elif you == pc -1 or you == pc +2:
    msg="YOU WIN!!!!!!"
  else:
    msg="YOU LOSE...."
  return msg


#標準入力で、あなたの出す手を決める
print(" じゃんけんの手を半角数字で「1:グー  2:チョキ  3:パー」 >>>",end="")
you=int(input())

judge=Computer_Hand(you)
print(judge)


いきなり負けました(笑)

今度こそは!!

やった、勝った♪

最後はあいこで。


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

東京モノレールです。
羽田空港第二ターミナルまで行きます。

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

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

Python自作サンプル集へ戻る

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

paiza レベルアップ問題集 ループ1の1「STEP: 3 数字の受け取り 1」 をPythonとGASの両方で解いたコードの紹介

この記事を読むことで、Pythonの基本的なループ・リスト(配列)出力に便利なループや、ループをたった1行のコードで記述する内包表記と、GASでの二次元配列とループの扱いについての概要が掴めます。

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

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

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

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


数字の受け取り 1 (paizaランク D 相当)

この問題では、標準入力で任意の数列が与えられ、それを改行区切りで出力します。

入力例1: 1 2 3 4 5 6 7 8 9 10

出力例1:
1
2
3
4
5
6
7
8
9
10

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


手順として、

1. リスト(配列)として標準入力を読み込み

2. リストの長さをループで使うのでlenで求める

3. forループでリストの長さ分を出力する

  ・基本的なループ
  ・リスト出力に便利なループ
  ・内包表記によるループ 

で行います。


手順1:リスト(配列)として標準入力で読み込む

paiza.ioの入力の所に、問題の入力例1をそのままコピペで貼り付けます。

区切り文字は半角スペースで、リストarrayに標準入力を用いて取得します。
複数のメソッドなどが登場しているので、この例に沿って役割をまとめます。

input … 標準入力で文字や数値を取得する

rstrip… 文字列の末尾の文字を除去

split … 半角スペースなどの指定の区切り文字で分割して取得する

int … 上記で取得する対象が数値である

map … まとめて適用


list … リスト(配列)変換

を使用して、標準入力を用いてリストに変換します。

コードと実行結果です。

#標準入力で数値をリストarrayに取り込む
array=list(map(int,input().rstrip().split(' ')))

#取り込まれたリストarrayを確認する
print(array)

この様に、標準入力を幾つかのメソッドと一緒に使って、arrayがリスト形式になりました。

配列array=[1,2,3,4,5,6,7,8,9,10]と取り込まれ、その添字ごとの要素は、

array[0]=1,
array[1]=2,
array[2]=3,
array[3]=4,
array[4]=5,
array[5]=6,
array[6]=7,
array[7]=8,
array[8]=9,
array[9]=10

です。
長さは10であり、次の項目で求めて出力します。


手順2: リストの長さをループで使うのでlenで求める

次にループの回数では、リストarrayの長さを利用しますので、len(array)を用いて、リストarrayの長さ(この場合は10)が求められていることを確認します。

コードと実行結果です。

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

#ループの長さを求める
print(len(array))



手順3: forループでarrayの長さを出力する

まずは基本的なループで出力します。
その前に確認用に出力したコードをコメントアウトします。

array=list(map(int,input().rstrip().split(' ')))
#print(array) ← コメントアウト

#ループの長さを求める
#print(len(array)) ← コメントアウト

これで実行しても何も出力されないことが確認出来ましたので、コメントアウトのコード削除してスッキリさせます。

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

今、この状態です。
このリストarrayにループを用いて出力例1に合わせて縦に出力します。

len(array)にはリストarrayの長さ「10」が入っています。
リストarrayの添字は0から始まるので、i=0〜9までの数字を出すのにそのままrange(len(array))が使えます。

rangeでは、0からの括弧内の数値未満分カウンタ変数のiがループ内で変わります。

for i in range(len(array)):

array[i]をループで回してiに0から9までの添字が入り、array[0]からarray[9]を出力します。

Pythonでの基本的なループのコードと出力結果はこちらになります。

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

#リストarrayを基本的なループで出力する
for i in range(len(array)):
    print(array[i])

出力結果です。

次項からは、リストに適したループの便利な記述を掲載します。


リスト出力に適した中でも直感的に分かりやすい書き方は、

for リストの要素の変数名 in リスト名:

となりますので、数値を取り出すと分かりやすい様にリストの要素の数値に該当する変数としてnumを用います。

for num in array:

numを用いることによって、出力するのは数値だというのがコードを書く方も読む方も分かりやすいと思います。
何でも良いのですが、伝わりやすさからnumにしました。

下記のコードで少しシンプルになった上に同様な出力結果が得られます。

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

#リストに適したループを用いる
for num in array:
    print(num)


上記のループでも十分にシンプルになりましたが、更にコード短くするには、ループをたった1行で表記する内包表記を用います。

[出力結果のprint文 for リストの要素の変数名 in リスト名]

今回の例ですと、

[print(num) for num in array]

と表記致します。

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

#内包表記を用いた1行のループ
[print(num) for num in array]

Pythonは以上です。
次は、GASで解いて行きます。


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

緑色のセルA2にpaizaの問題集側の入力例1をコピーして、ショートカットキー
[Ctrl] + [Shift] + [V] で値のみ貼り付けます。

このショートカットキーを使うと、書式を崩さずにそのまま貼り付けられます。

緑色のセルA2(2,1)に1〜10までの数が半角スペース区切りで入力されています。
これをC2(2,3)から始まる黄色いセルに出力します。

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

手順は下記の様になります。

1: スプレッドシートから階層を辿って現在のアクティブシートをアクセスする

2: 空の配列arrayを宣言して、緑のセルA2を配列としてarrayに半角スペース区切りで取得する


3: 空の配列array2を宣言
して、ループを使ってarray2が二次元配列になる様にarrayの要素を追加する

4: スプレッドシートのC2から始まる黄色いセルに出力する

手順1 スプレッドシートから階層を辿って現在のアクティブシートをアクセスする

関数「loop3」にコードを書いていきます。

function loop3() {
  
  //スプレッドシートの階層を辿ってアクティブシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

}

手順2 空の配列arrayを宣言して、緑のセルA2を配列としてarrayに半角スペース区切りで取得する

まずは、配列arrayを宣言します。
代入後に値が変わるのでletを用います。

let array=[];

また、緑のセルA2から取得するのに

array=ss.getRange(2,1).getValue().split(‘ ‘);

を用います。
このsplitで引数に半角スペースを指定することで、区切って配列に要素を入れられます。

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

  //セルA2を取得する空の配列array
  let array=[];

  //arrayにセルA2(2,1)の値を配列として半角スペース区切りで取得する
  array=ss.getRange(2,1).getValue().split(' ');

  //配列として取得出来たことをログ出力で確認する
  console.log(array);

}

このコードの実行結果として、セルA2の値がarrayに一次元配列として取得できたことが確認されました。


手順3 空の配列array2を宣言して、ループを使ってarray2が二次元配列になる様にarrayの要素を追加する

まず、配列の長さですが、これは10になっています。

console.log(array.length);

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

  let array=[];
  array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  //配列arrayの長さを確認する
  console.log(array.length);

}

実行結果です。

この10であるarray.lengthをループで用います。

for (let i=0;i<array.length;i++)

このループでカウンタ変数iが0,1,2,3,4,5,6,7,8,9とループの中で10回変わり、スプレッドシートに出力用の二次元配列array2に追加して行きます。

array2.push([array[i]]);

pushを使うことで配列を追加し、[array[i]]と[ ]で括ることによって二次元配列として追加します。

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

  let array=[];
  array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  console.log(array.length);

  //空の配列array2を宣言して後に二次元配列にする
  array2=[];

  //ループの中でpushを使って二次元配列として配列arrayの要素を追加する
  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }

  //スプレッドシートに出力する前にarray2が二次元配列として要素が追加されたことを確認する
  console.log(array2);

}

コードと実行結果です。


手順4 スプレッドシートのC2(2,3)から始まる黄色いセルに出力する

ss.getRange(2,3,array.length).setValues(array2);

C2は(2,3)で、10行分の10はarray.lengthです。
1列分も含めると、(2,3,array.length,1)になりますが、1列分は省略出来ます。

また、setValuessが付く複数形になっているのは、出力する配列array2が10個の数を持っている複数形になるからです。

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

  let array=[];
  array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  console.log(array.length);  
  array2=[];

  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }

  console.log(array2);

  //スプレッドシートのC2(2,3)から始まる黄色いセルに出力する
  ss.getRange(2,3,array.length).setValues(array2);

}

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


入力例2で行うとこの様になります。

※ この記事の作成に参考になったサイトです ※
ありがとうございます。

Python mapの使い方
Python rstripの使い方


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

都庁前の紫の光の噴水です。

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

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

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

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

■ 関連記事 ■

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

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

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

この記事を読むことで、ループの基本と内包表記の概要を掴めます。

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

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

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。その使い方は、この記事で問題の解き方を通して図解で解説しております。

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


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

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

今回は入力例2で解きます。

入力例2
5


出力例2
1
2
3
4
5


paiza.io を開きます。

※ 下記の図解は2026年7月4日時点のものです ※

右下の緑色の「コード作成を試してみる(無料)」を選択します。

登録無しで無料、日本語対応です。

右上の言語から「Python3」を選びます。

paizaの問題集の入力例2の「5」を、画面の左下の「入力」の下にコピペします。

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

手順として、

1. 標準入力を使ってループを回す回数の5を数値形式で読み込む

2. ループで1から5までを出力する

3. 基本的なループと内包表記の解説

で問題を解いて行きます。


手順1: 標準入力を使ってループを回す回数の5を数値形式で読み込む

今回は入力例2を用いるので、ループを回す回数の5を変数Nに代入します。
また、無事に代入出来たことをprint文で確認として出力します。

画面の状態とコードです。
[Ctrl]+[Enter] で実行出来ます。

#ループを回す回数を標準入力で取得する
N=int(input())

#取得出来たことを確認する
print(N)

手順2: ループで1から5までを出力する

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

現在Nには5が代入されています。

N+1と指定したのは、rangeでの(1,N+1)では、range(最初の数, 最後の数未満)、すなわちrange(1,6)で「1から5まで」となります。

悩まれた場合は、range(1,N)とループの設定をしてその挙動を見て、コードを書きながら掴んで行くと迷いにくいです。

N=int(input())

#print(N) ← コメントアウト

#ループでrangeの中を1からNまでに設定
for i in range(1,N):
    print(i)

この場合は、最後の5が出力されませんでした。

では、正しいコードに書き直します。
コメントアウトしたコードは削除しました。

N=int(input())

#ループでrangeの中を1から「N+1」までに設定
for i in range(1,N+1):
    print(i)

実行結果です。

次に、ループをたった1行で書く内包表記を用いて動かしてみます。
このコードの例ですと、[ ] の中に最初に出力したいprint文、その後にfor文が続きます。

[print(i) for i in range(1,N+1)]

コードはこの様にシンプルになりました。

N=int(input())

#ループの内包表記
[print(i) for i in range(1,N+1)]    

Pythonは以上になります。


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

Nの値は緑のセルA2に5と入力してあり、その値を取得してループの回数に致します。
C列のC2(2,3)から始まる5行分の黄色いセルに1からNまでを出力します。

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

手順は以下の様になります。

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

2: 空の配列arrayを宣言する

3: ループの回数Nを緑のセルA2(2,1)から読み込む

4: ループで1からNまでの数を配列arrayが二次元配列になるようにarrayに追加する

5: 配列arrayが二次元配列になっていることを、スプレッドシートに出力する前にログに出力して確認する

6: スプレッドシートのC2から始まる黄色いセルにN=5行分出力する

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

関数loop2の中に書いて行きます。

function loop2() {

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

}


手順2: 空の配列arrayを宣言する

スプレッドシートに出力用の空の配列arrayを宣言します。

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

  //スプレッドシート出力用の空の配列arrayを宣言する
  const array=[];

}

手順3: ループの回数Nを緑のセルA2(2,1)から読み込む

Nが入力されているセルA2が(2,1)になり、その値をgetValueで取得しています。
また、無事に取得されてことをログで出力して確認しています。

ss.getRange(2,1).getValue();

function loop2() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=[];

  //セルA2からN=5を取得する
  const N=ss.getRange(2,1).getValue();

  //Nが取得出来たことをログで確認する
  console.log(N);
  
}

手順4: ループで1からNまでの数を配列arrayが二次元配列になるようにarrayに追加する

まず、ループの条件部分ですが、

for(let i=1;i<=N;i++)

このように、ループの中でiが1からN(=5)まで変わることにより、変数ですのでletを用いて宣言しています。

i<=Nで、ループを回す回数を指定して、i++でiの値を一つずつ増やすインクリメントをしています。

また、配列arrayに二次元配列として数値を追加するのに、pushメソッドを使っています。

array.push([i]);

この時[i]と表記することで、配列arrayに二次元で数値が追加されます。

function loop2() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=[];
  
  const N=ss.getRange(2,1).getValue();
  console.log(N);

  //ループを用いてarrayが二次元配列になる様に1からN=5までを追加する
  for(let i=1;i<=N;i++){
    array.push([i]);
  }

}

手順5: 配列arrayが二次元配列になっていることを、スプレッドシートに出力する前にログに出力して確認する

コードと実行した出力結果のログ画像です。

function loop2() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=[];
  
  const N=ss.getRange(2,1).getValue();
  console.log(N);

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

  //スプレッドシート出力前に配列arrayが二次元配列になっていることをログで確認
  console.log(array);

}

arrayが二次元配列として取得出来たことが確認されました。


手順6: スプレッドシートのC2から始まる黄色いセルにN=5行分出力する

下記の書式でスプレッドシートに出力します。

ss.getValue(2,3,N).setValues(array);

スプレッドシートの黄色いセルの始まりのC2は(2,3)で5行分指定するのに(2,3,N)となります。

1列分ですので、(2,3,N,1)と指定することも出来ますが、1列の場合は省略可能です。
コードとスプレッドシートの実行結果です。

function loop2() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=[];
  
  const N=ss.getRange(2,1).getValue();
  console.log(N);

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

  console.log(array);

  //スプレッドシートのC2(2,3)から始まる黄色いセル5行分の出力結果
  ss.getRange(2,3,N).setValues(array);

}


おまけですが、緑のセルA2のNの値を例えばpaiza問題集の入力例3の「28」に変更して実行すると、ログ出力とスプレッドシートの実行結果はこの様になります。


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

千葉県の房総半島、外房「御宿(おんじゅく)海です。

ここの海は透明度がとても高くて、綺麗な海を関東地方で見たい方にはお勧めのスポットです。交通の便があまり宜しくない分、美しい海をじっくりと堪能出来ます。

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

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

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

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

■ 関連記事 ■

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

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

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