この記事を読むことで、PythonとGASでwhileループを使って、2で何回割ることが出来るのか回数を数える方法が学べます。
どちらのコードでも割り算の過程や変数の値の変化を追いやすい様に、トレースのコードを設けています。
ループの最初にIF文で割り切れない(余りが0ではない)場合はbreakでループを抜けるようにしています。
このコーナーでは、学習コンテンツpaizaラーニング レベルアップ問題集 
サイトマップはこちらから 
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る メインメニューに戻る Python自作サンプル GASサンプル 基本情報技術者試験 
paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。
2 で何回割れる? (paizaランク D 相当) 
問題: 
この記事では、下記の入力例3の場合にリストの個数N=10として10が2で何回で割れるかを求めます。
入力例3 
出力例3 
ではまず、Pythonで解いてみます。
今回は、paiza.io を使って解きます。paiza.ioの使い方はこちら 
■ Pythonでの解き方 ■ 
下準備として、paiza.ioにこの様に入力します。
手順として、
1:数値N「10」を取得する 3:whileループでNが2以上という条件を満たす間、ループを回します。 4:ループの最初にNが2で割り切れない場合は、breakでループを抜けるよう設定しています。 5:割り算を実行します。 6:countをインクリメントします。 7:countを表示します。 
で、行います。
まずは、プログラムの動きを追いやすいように、トレースのコードとトレースのio出力結果を添えます。
#整数Nを取得
N=int(input())
#何回で割れるかを求めるcount変数を0で初期化
count=0
print('<<<ループに入ります。>>>')
#ループで除算
while(N>=2):
    print('除算前のNの値:'+str(N))
    
    #2で割った時に余りが出る場合はループを抜ける
    if N%2!=0:
        break
    #除算実行
    N/=2
    print('除算後のNの値:'+str(N))
    
    #除算回数をカウントする
    count+=1
    print('割った回数は【'+str(count)+'】回です。')
    print('----------------------')
print('<<<ループを抜けました。>>>')
print(count)  
このままでは、出力結果である出力例3に対して冗長なコードが含まれているので、解答以外のprint文をコメントアウトします。
#整数Nを取得
N=int(input())
#何回で割れるかを求めるcount変数を0で初期化
count=0
#print('<<<ループに入ります。>>>')
#ループで除算
while(N>=2):
    #print('除算前のNの値:'+str(N))
    
    #2で割った時に余りが出る場合はループを抜ける
    if N%2!=0:
        break
    #除算実行
    N/=2
    #print('除算後のNの値:'+str(N))
    
    #除算回数をカウントする
    count+=1
    #print('割った回数は【'+str(count)+'】回です。')
    #print('----------------------')
#print('<<<ループを抜けました。>>>')
print(count)    スッキリするように、コメントアウトした部分を省いたコードです。
#整数Nを取得
N=int(input())
#何回で割れるかを求めるcount変数を0で初期化
count=0
#ループで除算
while(N>=2):
    #2で割った時に余りが出る場合はループを抜ける
    if N%2!=0:
        break
    #除算実行
    N/=2
    #print('除算後のNの値:'+str(N))
    
    #除算回数をカウントする
    count+=1
print(count)   ioの出力結果です。
■ GASでの解き方 ■ 
では、同じ問題をGASで解いてみます。
スプレッドシートの黄色いセルの所に「2で割り切れた回数」を出力します。
※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※ 
手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする 
手順1: スプレッドシートからアクティブシートをアクセスする
const ss=SpreadsheetApp.getActiveSheet(); 
ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
手順2: スプレッドシートの緑色のセルから整数N(この例では「10」)を取得する
let N=ss.getRange(1,2).getValue(); 
※Nを割っていくので、Nの値が変わる、すなわち変数なので定数のconstではなく変数のletで宣言をします※ 
手順3:割り切れた回数を格納する変数countを宣言する
let count=0; 
手順4:
文字と数値を同時に表示する場合は、console.logの中に「 ` 」(shift+@)で括り、数値は${}を使います。
console.log('<<<ループに入ります。>>>')
while(N>=2){
  console.log(`割り算を実行する前のNの値:${N}`);
  console.log(`割り算を実行する前のcountの値:【${count}回】`);
  if(N%2!=0){
    break;
  }
  N/=2;
  console.log(`割り算を実行した後のNの値:${N}`);
  //除算を実行して、割り切れた回数のcountをインクリメントする
  count++;
  console.log(`割り算を実行した後のcountの値:【${count}回】`);
  console.log('---------------------------------------');
}
console.log('<<<ループを抜けました。>>>');
手順5:スプレッドシートに出力する二次元配列配列count2を宣言する
let count2=[]; 
手順6:countをcount2に二次元配列として追加する
count2.push([count]); 
手順7:スプレッドシート出力前に二次元配列count2のログ出力で確認する
console.log(count2); 
手順8:スプレッドシートの黄色いセルに掛け算の計算結果が格納された二次元配列count2を出力する
GASでの全コードはこちらになります。
function loop2no8(){
//スプレッドシートからアクティブシートをアクセスする
const ss=SpreadsheetApp.getActiveSheet();
//スプレッドシートの緑色のセルから整数N(この例では「10」)を取得する
let N=ss.getRange(1,2).getValue();
//割り切れた回数を格納する変数countを宣言する
let count=0;
//whileループでNが2以上という条件を満たす時にループを回す。
//また、IF文でNを2で割り切れない(N%2が0では無い)時にループを抜ける。
console.log('<<<ループに入ります。>>>')
while(N>=2){
  console.log(`割り算を実行する前のNの値:${N}`);
  console.log(`割り算を実行する前のcountの値:【${count}回】`);
  if(N%2!=0){
    break;
  }
  N/=2;
  console.log(`割り算を実行した後のNの値:${N}`);
  //除算を実行して、割り切れた回数のcountをインクリメントする
  count++;
  console.log(`割り算を実行した後のcountの値:【${count}回】`);
  console.log('---------------------------------------');
}
console.log('<<<ループを抜けました。>>>');
//スプレッドシートに出力する二次元配列配列count2を宣言する
let count2=[];
//countをcount2に二次元配列として追加する
count2.push([count]);
//スプレッドシート出力前に二次元配列count2のログ出力で確認する
console.log(count2);
//スプレッドシートの黄色いセルに割り切れた回数が格納された二次元配列count2を出力する
ss.getRange(4,1).setValue(count2);
}宜しかったらコピペしてアレンジして見て下さい。
よみうりランドジュエルミネーション。
■ 参考文献の紹介■ 
じっくり丁寧にPythonを学びたい方向け。paizaラーニング 
初めてGASを学ぶ方向け。
GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。
サイトマップはこちらから 
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る メインメニューに戻る Python自作サンプル GASサンプル 基本情報技術者試験 
←前の問題へ 次の問題へ→