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

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

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

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

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

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

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

今回はpaiza.ioを使って解きます。
この記事では、paiza.ioの使い方を図を用いて解説しております。

まず、Pythonで解いてみます。
この例では言語を「Python3」に選択してあります。

■ Pythonでの解き方 ■

この画面の左下の「入力」の下に「5」など任意の数を入力します。

コードを書いていきます。

動作が確認できたので、paiza問題集の提出用コード入力の所に、コピペして提出します。

正解しました。

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

手順として、

1.N=int(input())で標準入力を読み込み

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

3.print文で表示

となります。
コードを詳しく見てみましょう。

手順1でN+1となっているのは、rangeでは(1,N+1)と指定した場合、(1,N+1)未満、すなわち(1からNまで)となるからです。

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

N=int(input())
for i in range(1,N+1):
    print(i)

■ GASでの解き方 ■

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

この黄色いセルに1からNまで表示します。
Nは灰色のセルの横に入力しています。
スプレッドシートに表示する場合は、二次元配列を作成します。

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

1:配列arrayを定義する

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

3:NをセルB2から読み込む

4:ループで1からNまでの数をarray.push[i]で付け加える。
(array.push(i)だと1次元配列になり、二次元配列のスプレッドシートには読み込めないため。)

5:ログに表示

6:スプレッドシートに表示する。セルB3からN行分なので、getRange(3,2,N)でセルB3からN行確保してそこに配列を流し込むイメージ

実行結果です。

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

function loop2(){

let array=[];
ss=SpreadsheetApp.getActiveSheet();
N=ss.getRange(1,2,1).getValue();

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

console.log(array);
ss.getRange(3,2,N).setValues(array);

}

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

おまけですが、Nの値を例えば28にすると、こうなります。
これはスプレッドシートのB1の値を変更しただけです。

お疲れ様でした。

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

千葉県房総半島、外房御宿の水平線

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

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

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

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

■ 関連記事 ■

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

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

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

この記事を読むことで、1〜10までの数をループで出力すること、PythonとGASの両方のコードでループの指定方法が異なることが掴めます。

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

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

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

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


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

入力
与えられません。

出力
1
2

9
10


この問題では、1から10までの数を出力します。

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


手順として、

1. for文を10回繰り返して値を1から10までと増やしていく

2.ループの中でprintを使って表示する

で行います。


手順1: ループの書き方ですが、

for i in range(1,11):

と記述すると、rangeの中で(最初の値,最後の値未満)になります。
最後が11となっているのは、rangeでは(1,11)と指定した場合、(1,11未満)となるからです。

10までならrange(1,10)だ!と私も最初思いましたので、一度それでコード書いて出力してみます。

まず、range(10)のみの場合の出力結果です。
この場合、iはi=0,i=1 … i=9の10回の出力を繰り返します。

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

次に、range(1,10)と指定します。
この場合、i=1,2,… i=9になります。

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

実行結果です。

この書き方では10は出力されませんでした。

1から10までを表示したかったらrange(1,11)と書く。そうすると、1から11未満、1から10まで出力出来ると、納得行くまで検証致しました。

では、正解のコードとその実行結果はこちらになります。

#rangeではその数未満の値が出力される
for i in range(1,11):
    print(i)

Pythonは以上です。


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

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

この黄色いセルに1から10まで表示します。
スプレッドシートに表示する場合は、二次元配列を作成します。

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

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

2: 空の配列arrayを定義する

3:ループで1から10までの数をarray.push([i])で付け加える

4: スプレッドシートに出力前にログに表示してarrayを確認

5:スプレッドシートのセルA1(1,1)から始まる黄色いセルに1から10までの数を出力する

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

下記のコードを関数「loop1」に書いて行きます。

function loop1() {

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


手順2: 空の配列arrayを定義する

function loop1() {

  const ss=SpreadsheetApp.getActiveSheet();
  
  //空の配列arrayを定義する
  const array=[];

}


手順3: ループで1から10までの数をarray.push[i]で付け加える

GASでのループの書式は、

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

になります。

iは変数ですので、ループの中でletで宣言して、i<=10でiが1,2, … , 10と増えて行きます。

また、このままですとarrayは一次元配列になり、二次元配列のスプレッドシートには読み込めないので、ループの中で

array.push([i]);

と、pushを使って追加する際に、[i]と二次元配列になるように追加しています。

function loop1() {

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

  //ループで配列arrayに二次元配列として1から10までの数値を格納する
  for(let i=1;i<=10;i++){
    array.push([i]);
  }
}


手順4: スプレッドシートに出力前にログに表示してarrayを確認

スプレッドシートに出力する際、配列arrayが二次元配列になっているとスムーズに出力出来ます。

ログ出力で確認をします。

function loop1() {

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

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

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

}

実行結果です。

無事にarrayが二次元配列として出力されたことが確認出来ました。


手順5: スプレッドシートのセルA1(1,1)から始まる黄色いセルに1から10までの数を出力する

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

スプレッドシートに出力する際、getRange(1,1,10)でセルA1から10行確保して、そこに配列arrayを押し込むイメージです。

1列分の1列も指定すると、getRangeの中身は(1,1,10,1)になりますが、1列の場合は省略可能です。

setValuesとsが付いているのは、出力する数字が10個と複数形になるからです。

コードと実行結果です。

function loop1() {

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

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

  console.log(array);

  //スプレッドシートのA1から始まる黄色いセルA1(1,1)から10行分出力する
  ss.getRange(1,1,10).setValues(array);

}

GASは以上です。


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

レゴブロックで作成した白バイです。

←ループ1の1メニューへ戻る               次の問題へ

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

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

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

■ 関連記事 ■

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

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

【paizaレベルアップ問題集】PythonとGAS両方で解いたコード紹介集トップページ

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

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

paizaでは、【スキルチェック】のブログ掲載は禁止されていますが、【レベルアップ問題集】のコードの公開、ユーザ同士で教え合うことや研修の教材に利用することは自由としていると書かれていました。
paizaレベルアップ問題集のリンク

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

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


■ STEINS ;GATE Dランクレベル ■

正則表現のエントリーポイント Python3編


■ 標準入力メニュー ■

標準入力その1

標準入力その2

標準入力その3

標準入力その4

標準入力その5

標準入力その6

標準入力その7


■ ループメニュー 1■

ループメニュー1の1

ループメニュー1の2

ループメニュー1の3

ループメニュー1の4


■ループメニュー1の2 ■

数列の和 Python3編

数列の A 番目から B 番目までの和

数列の値を全部 * 2 して出力 Python3編

FINAL問題 数列同士の引き算 Python3編


■ ループメニュー1の3 ■

数列の反転 Python3編

九九の表示 1 Python3編

九九の表示 2 Python3編

2 の累乗を表示 Python3編

FizzBuzz Python3編


■ ループメニュー1の4 ■ 

数列の最大値 Python3編

数列の最小値 Python3編

数列の何番目にある? Python3編

数列の中に何個ある? Python3編


■ ループメニュー2の1 ■

未知数個の数の受け取り Python3編

未知数個の文字列の受け取り Python3編

奇数だけ出力 Python3編


割り切れる数だけ出力 Python3編

偶奇の判定 Python3編


■ ループメニュー 2■

ループメニュー2の1

ループメニュー2の2


ループメニュー2の2 ■

各桁の和 Python3編

カウント変数を使った計算 Python3編

2 で何回割れる? Python3編

任意の数で何回割れる? Python3編

10 進数から 2 進数に変換 Python3編

10 進数から M 進数に変換 Python3編

N が M ずつ増えたときにいつ K を越える? Python3編

毎日増加するお金 Python3編

階乗の計算 Python3編

階乗の末尾に 0 はいくつ付く? Python3編

加算された数列の最大値 Python3編

加算された数列の最小値 Python3編

1 はどこにある? Python3編

約数の個数 Python3編

約数の列挙 Python3編

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

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

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

■ 関連記事 ■

初めてのGASへ
Python自作サンプル集へ


自己紹介

【Pythonリスト基礎】長さlenで国内旅行気分でランダムに!!

この記事を読むことによって、国内旅行を例に

・リスト(配列)の基礎

・リストの長さを調べるlen

・リストの要素を取り出し

・乱数と組み合わせて旅行先を表示する

Pythonのリストの初歩的な扱いが可能になります。

リストは団地に似ているのかも知れません。

[‘北海道’,’東京’,’名古屋’,’大阪’,’兵庫’,’沖縄’]

団地の0号室が北海道、1号室が東京・・・5号室が沖縄です。
この階の部屋の長さは0〜5号室までの6です。
ポイントは、最初の部屋は0号室だということです。

これは、リストが0から始まるからです。
このリストをtravelとして、早速コードを書いていきます。

travel=['北海道','東京','名古屋','大阪','兵庫','沖縄']
print(travel[0]) #先頭の「北海道」
print(travel[1]) #その次の「東京」
print(travel[5]) #最後の「沖縄」

実行結果です。

リストの番号を添字と言います。
この例で言うと、北海道の添字は0、沖縄の添字は5になり、先ほどの部屋が何号室かという例と対応しております。

次に、この配列の長さを求めるlenを使ってみます。

travel=['北海道','東京','名古屋','大阪','兵庫','沖縄']
print(travel[0]) 
print(travel[1]) 
print(travel[5]) 

#配列の長さを求めるlen
print(len(travel))

実行結果です。

では、リストの部屋番号(添字)をランダムにして、どこに旅行するのかくじ引き感覚でコードを書いて行きます。

リストの添字をランダムにして、変数indexに格納します。

#ランダムモジュール
import random

#国内旅行のリスト
travel=['北海道','東京','名古屋','大阪','兵庫','沖縄']

#添字indexをランダムにする
index=random.randrange(0,len(travel))

#結果表示
print("添字は"+str(index)+"なので【"+str(travel[index])+"】に行こう!!")

実行結果です。

この、乱数を求める部分のコードですが、

#添字indexをランダムにする
index=random.randrange(0,len(travel))

randrangeによって、0から6未満の乱数を求めています=長さが6
これをrandintにしてしまうと、0から6までになり=長さが7

乱数が6になった時にエラーが表示されます。

#ランダムモジュール
import random

#国内旅行のリスト
travel=['北海道','東京','名古屋','大阪','兵庫','沖縄']

#添字indexをランダムにする← ここをrandintにすることによりエラー発生
index=random.randint(0,len(travel))

#結果表示
print("添字は"+str(index)+"なので【"+str(travel[index])+"】に行こう!!")


このコードでも、乱数が5まででしたら先ほどのrandrangeの時と同じように旅先が表示されるのですが、6になるとこの様なエラーになりました。



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

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

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

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

Python自作サンプル集へ戻る

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

【Python で占いゲーム】今日の運勢は??randintで星座占い♪

この記事では、

・乱数を使って星座を占う

・randintで1から12までの乱数を生成する

・if、elif、elseの分岐


・改行「 \n 」の使い方

について学べます。

私は「おうし座」ですので、変数seizaのところに「おうし」と入れました。
ここにあなたの星座やお好きな星座を入れてみて下さい。

まずは、乱数を使った順位の結果のみのコードを掲載いたします。

import random

seiza="おうし"

#1から12までの変数を生成
num=random.randint(1,12)

print("今日の"+seiza+"座は"+str(num)+"位です")

実行結果です。

乱数なので、実行する度に順位が変わります。
最後のprint文のところで、文字列の中で数値である順位のnumを扱う場合には、str(num)としています。

randintと似たようなもので、randrangeがありますが、これはrandom.randrange(1,12)の様に書いた場合には、12「未満」になります。

次に、順位に応じてメッセージを表示する様に、if,elif,elseで分岐を行います。
メッセージは変数msgに格納します。

では、コードです。

import random

seiza="おうし"

#1から12までの変数を生成
num=random.randint(1,12)

print("今日の"+seiza+"座は"+str(num)+"位です")

if num==1:
  msg="超超超超超超超超超・・・おめでとう!!\n"
elif num<=3:
  msg="チョベリグ!\n"
elif num<=9:
  msg="ふつー\n"
elif num==11:
  msg="チョベリブ!\n"
else:
  msg="がび〜〜〜〜〜〜ん\nチョベリバ(涙)\n"

print(msg)

実行結果です。

演算子についてですが、
例えば「num==1」とイコールを2つ書くことによって、その順位(1位)と等しいということを表しています。
=と、一つだけだと代入になりますので。

elif文のnum<=3は3位以下(この場合、2位と3位)を表しています。
elseでそれ以外(この場合12位)です。

msgの中の「\n」バックスラッシュとnで、改行を表しております。

宜しかったら上記のコードをコピペしてアレンジしてみて下さい。


msgの所で「チョベリなんとか・・・」ってありますけれど、かつて「コギャル」と呼ばれた方が女子高生だった頃に流行った言葉です。

チョベリグ・・・超ベリーグッド
チョベリブ・・・超ベリーブルー
チョベリバ・・・超ベリーバッド

だったかな。懐かしいな。


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

千葉県柏市、あけぼの山農業公園のひまわりです。

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

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

Python自作サンプル集へ戻る

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

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