質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyCharm

エディター・開発ツール

Q&A

解決済

1回答

1258閲覧

Python3で要素数、要素の最小最大値入力方式のランダムリスト生成プログラムを作りました。コードレビューをお願いします。

HIROKIdesuga

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyCharm

エディター・開発ツール

0グッド

2クリップ

投稿2020/03/18 04:17

編集2020/03/18 04:52

前提・実現したいこと

作成したソースコードの構文ミスの指摘や、もっと汎用性のある書き方に添削していただきたいです。よろしくお願いします。

該当のソースコード

Python3

1from random import randint 2 3 4def get_user_input(): 5 val_min = 0 6 val_max = 1000000 7 val_error = "0以上の整数を入力してください。(上限1000000)\n" 8 print("要素数の個数、要素の最小、最大値を入力し、ランダムにリストを生成します。(半角数字で入力してください)") 9 while True: 10 n = -1 11 x = input("要素数:") 12 if x.isdecimal(): 13 n = int(x) 14 if val_min <= n <= val_max: 15 return n 16 print(val_error) 17 18def random_list(b): 19 range_error = "最小値<最大値となるような整数を入力してください。半角数字で入力してください\n" 20 while True: 21 range_min = input("要素の最小値:") 22 range_max = input("要素の最大値:") 23 if (range_min[0] == "-" and range_min[1:].isdecimal() or range_min.isdecimal()) and ( 24 range_max[0] == "-" and range_max[1:].isdecimal() or range_max.isdecimal()): 25 range_min = int(range_min) 26 range_max = int(range_max) 27 if range_min < range_max: 28 break 29 print(range_error) 30 x = [] 31 for i in range(b): 32 x.append(randint(range_min, range_max)) 33 return x 34 35 36def list_max(a): 37 if not a: 38 return "なし" 39 max_value = a[0] 40 for item in a: 41 if item > max_value: 42 max_value = item 43 return max_value 44 45 46def list_min(a): 47 if not a: 48 return "なし" 49 min_value = a[0] 50 for item in a: 51 if item < min_value: 52 min_value = item 53 return min_value 54 55 56def list_len(a): 57 return len(a) 58 59 60def list_sum(a): 61 val_sum = 0 62 for item in a: 63 val_sum += item 64 return val_sum 65 66 67def play(): 68 user_input = get_user_input() 69 l = random_list(user_input) 70 print(list(l)) 71 print("要素は{}個".format(list_len(l))) 72 print("合計は{}".format(list_sum(l))) 73 print("最大値は{}".format(list_max(l))) 74 print("最小値は{}".format(list_min(l))) 75 76 77def game(): 78 while True: 79 play() 80 get_user_request = input("もう一度生成しますか?y/n:") 81 while get_user_request not in "yn": 82 get_user_request = input("\nもう一度生成しますか?\nyかnを入力してください:") 83 continue 84 if get_user_request == "y": 85 print("\n" * 10) 86 else: 87 break 88 print("またのご利用をお待ちしております!") 89 90 91if __name__ == "__main__": 92 game()

試したこと

要素数、要素の最小最大値を入力方式にし、わかりやすくなるよう目的別に関数を分けました。

補足情報(FW/ツールのバージョンなど)

バージョン:Python3.7.7
エディタ:PyCharm CE

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

.isdecimal()は全角数字にもTrueを返しますので、int()で例外が発生する可能性があります。


最大値・最小値・合計は、ビルトイン関数があります。
max(iterable, *[, key, default]) | 組み込み関数 — Python 3.8.2 ドキュメント


python

1 x = [] 2 for i in range(b): 3 x.append(randint(range_min, range_max))

ここは、リスト内包表記で書けると思います。


python

1def list_len(a): 2 return len(a)

不要なのでは。

投稿2020/03/18 08:59

Lhankor_Mhy

総合スコア35869

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HIROKIdesuga

2020/03/18 22:25

Lhankor_Mhyさん、添削していただきありがとうございます。 .isdecimal()については、条件分岐により条件に当てはまるものだけint()に当てていますので、恐らく大丈夫かなと思っているのですが、もし例外がある場合はどのような入力でしょうか? そして、最大値最小値合計のビルド関数については知っていましたが、このプログラムでは、それらの本質的な動き方について書いてました。記載不足になってしまいすみません。 リスト内包表記とlen()についてはおっしゃる通りです、まだまだ見直しが足りなかったです。
Lhankor_Mhy

2020/03/19 00:25

>.isdecimal()については、条件分岐により条件に当てはまるものだけint()に当てています おっしゃるとおりでした、失礼しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問