課題02-1 乱数値100個の統計 #
難易度 ⭐
1以上,1,000以下の乱数を100個取得してください.
それらの合計値,最大値,最小値,平均を求めてください.
出力は,まず,合計,最大値,最小値,平均を1行で出力してください.
その次に,得られた乱数値を出力してください.
ただし,10個出力するごとに改行を入れてください.
ファイル名は,stats_values.py
としてください.
import random # 乱数を生成するためのライブラリ
randoms = []
max = # 最大値,
min = # 最小値,
sum = # 合計値の初期値を適切に設定しましょう.
for i in range(100): # 0〜99 まで繰り返す(100は含まない).
num = random.randint(1, 1000) # 1 以上 1,000 以下の乱数を生成する(1000を含む).
# randoms に num を追加する.
# 最大値,最小値,合計値を更新する.
# 統計値を出力する.
# randoms に格納された乱数値を順に出力する.
# enumerate 関数を使うと,インデックスを取得できる.
# インデックスを10で割ったときの余りが9のときに改行すると良い.
# 数値の右寄せは {:>4} で指定できる(4桁).
出力例 #
乱数ですので,必ずしもこの通りの結果にはなりません.
max: 1000, min: 10, sum: 44298, avg: 442.98
67 43 751 814 81 954 392 97 20 39
342 127 323 537 79 760 559 275 80 869
704 362 73 94 429 617 887 525 827 144
127 676 866 249 10 55 264 477 340 642
376 856 275 35 551 492 551000 764 389
560 556 755 71 464 986 294 957 403 297
273 784 21 671 642 425 464 312 629 838
308 154 892 82 773 21 55 332 404 667
59 560 675 158 580 443 826 732 180 445
824 144 862 907 742 328 493 279 134 467
フォーマット文字列で変数value
を出力するとき,
{value:>4}
とすると,value
に代入された値を右寄せ,4桁で表示できます.
左寄せは {value:<4}
,中央寄せは {value:^4}
です.
4
を修正すると,桁数が変わります.
課題02-2 約数の列挙 #
難易度 ⭐⭐
コマンドライン引数で与えられた数値それぞれの約数を調べ,その結果を出力してください.
ファイル名は,divisors.py
としてください.
import sys # コマンドライン引数を取得するためのライブラリ
for value in sys.argv[1:]: # コマンドライン引数を順に処理する.
num = int(value) # コマンドライン引数を整数に変換する.
divisors = [] # 約数を格納するリストを初期化する.
# 1からnum(を含む)範囲で繰り返す
# num が i で割り切れるとき divisors に i を追加する.
print(f"{num}: {divisors}") # num(数値)と divisors(約数一覧)を出力する.
出力例 #
python3 divisors.py 16 201 1045
16: [1, 2, 4, 8, 16]
201: [1, 3, 67, 201]
1045: [1, 5, 11, 19, 55, 95, 209, 1045]
課題02-3 素因数分解 #
難易度 ⭐⭐⭐
コマンドライン引数で与えられた数値それぞれを素因数分解し,その結果を出力してください.
ファイル名は,factorizers.py
としてください.
import sys
for v in sys.argv[1:]:
num = int(v) # コマンドライン引数を整数に変換する.
factors = [] # 素因数を格納するリストを初期化する.
value = num # 素因数分解する値を初期化する.
factor = 2 # 素因数
# factor が value より小さい間繰り返す.
# value が factor で割り切れたら
# factor を factors に追加する.
# value を factor で割り,value に再代入する.
# そうでなければ
# factor を 1 増加させてループを繰り返す.
# ループ後,value が 1 でない場合
# value を factors に追加する.
# 結果を出力する.num を 8桁右寄せで表示する.
# join は文字列を結合するメソッドで,リストの要素を文字列に変換して,"*" で結合する.
print(f"{num:>8}: {' * '.join(map(str, factors))}")
出力例 #
16: 2 * 2 * 2 * 2
25: 5 * 5
129: 3 * 43
401: 401
103019: 7 * 14717
121: 11 * 11
アルゴリズム 試し割り法 #
上記の素因数分解のアルゴリズムは,試し割り法と呼ばれるものです. 基本的な考え方は,素因数分解しようとする整数 \(n\) を小さい数値から割り切れるかを調べていく方法です.
詳細は,Wikipediaなどをご覧ください.