先日上げた「最大値を探そうpython」の修正verです。以前のコードの悪い点と変更点は以下の通りです。
##悪い点
・リストの要素がすべて負の時、最大値が0になってしまう
・処理速度が遅い
##変更点
・最大値候補の初期値をリストの適当な要素に設定
・while文からfor文にする
悪い点の二点を踏まえてリファクタリングをしてみました
num = int(input("何個数値を代入しますか?"))
value_list = [] #数値を格納する配列を用意する
for i in range(num):
value = int(input("数値を代入して下さい"))
value_list.append(value) #用意したリストに値を追加していく
max_value = value_list[0] #リストの要素で初期化
for i in range(num):
if value_list[i] > max_value:
max_value = value_list[i]
print(max_value) #最大値を出力
##変更した部分
代入(変更前)
while i < num:
value = int(input("数値を代入して下さい"))
value_list.append(value) #用意したリストに値を追加していく
i += 1
代入(変更後)
for i in range(num):
value = int(input("数値を代入して下さい"))
value_list.append(value) #用意したリストに値を追加していく
比較(変更前)
max_value = 0 #最大値を0で初期化
i = 0
while i < num:
if value_list[i] >= max_value: #格納した数値を順番に比較していく
max_value = value_list[i]
i += 1
比較(変更後)
max_value = value_list[0] #リストの要素で初期化
for i in range(num):
if value_list[i] > max_value:
max_value = value_list[i]
初期値を入力した要素に設定することで入力された要素がすべて負の時も正常に最大値が出るようになりました。
さらに、while文からfor文にしたことで無駄に初期化や加算処理をすることがなくなりました。
##max関数を使ってみた
pythonには与えられた要素を持つオブジェクトから最大値を求める関数があるとコメントで指摘してもらったので早速使ってみました。
num = int(input("何個数値を代入しますか?"))
value_list = [] #数値を格納する配列を用意する
for i in range(num):
value = int(input("数値を代入して下さい"))
value_list.append(value) #用意したリストに値を追加していく
print(max(value_list))
出力結果
何個数値を代入しますか? 3
数値を代入して下さい -3
数値を代入して下さい -2
数値を代入して下さい -5
-2
意見、ご指摘して下さったみなさんありがとうございました。