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

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

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

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

Q&A

2回答

961閲覧

関数を使ったコードの簡略化

terosiestal

総合スコア2

Python

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

0グッド

0クリップ

投稿2021/08/22 17:57

import random def decision(): number1 = int(input("Enter in a 3 digit password (numbers only): ")) number2 = int(input("Enter in a 4 digit password (numbers only): ")) number3 = int(input("Enter in a 5 digit password (numbers only): ")) number4 = int(input("Enter in a 6 digit password (numbers only): ")) numax = int(input("Enter in max iterations: ")) leng1= len(str(number1)) leng2= len(str(number2)) leng3= len(str(number3)) leng4= len(str(number4)) counts1 = [] for i in range(10): guess1 = 0 count1 = 0 while (guess1 != number1): guess1 = random.randint(10**(leng1-1),(10**leng1-1)) count1 += 1 if count1 == numax: break counts1.append(count1) counts2 = [] for i in range(10): guess2 = 0 count2= 0 while (guess2 != number2): guess2 = random.randint(10**(leng2-1),(10**leng2-1)) count2 += 1 if count2 == numax: break counts2.append(count2) counts3 = [] for i in range(10): guess3 = 0 count3 = 0 while (guess3 != number3): guess3 = random.randint(10**(leng3-1),(10**leng3-1)) count3 += 1 if count3 == numax: break counts3.append(count3) counts4 = [] for i in range(10): guess4 = 0 count4 = 0 while (guess4 != number4): guess4 = random.randint(10**(leng4-1),(10**leng4-1)) count4 += 1 if count4 == numax: break counts4.append(count4) result1 = sum(counts1)/len(counts1) result2 = sum(counts2)/len(counts2) result3 = sum(counts3)/len(counts3) result4 = sum(counts4)/len(counts4) counts1 = [] counts2 = [] counts3 = [] counts4 = [] print("FOR 10 TESTS, the average number of iterations to find password are: ") print("3 DIGIT PASSWORD: " + str(result1) + " iterations") print("4 DIGIT PASSWORD: " + str(result2) + " iterations") print("5 DIGIT PASSWORD: " + str(result3) + " iterations") print("6 DIGIT PASSWORD: " + str(result4) + " iterations")

簡単な質問ですいません。明日提出の課題なのでできればサンプルコードを見せていただけるとありがたいです。functionを使ってコードを短く簡略化したいのですが、どのようにすればよいでしょうか?

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

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

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

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

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

hoshi-takanori

2021/08/22 18:50

同じパターンが繰り返し現れるところを関数にすればいいと思いますが、課題は自分でやらないと意味がありませんよ。
gentaro

2021/08/22 21:43

ルール確認して出直してこよう https://teratail.com/help/avoid-asking コードをください・デバッグしてください等の丸投げの質問 何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。
meg_

2021/08/23 05:35

課題とのことですが、正しく動作するのであれば多少冗長でも良いのではないですか? また、コードの内容を簡単には説明すべきではないでしょうか?
kazuma-s

2021/08/23 12:43

質問のコードに与えるテストデータをいくつか提示してもらえませんか?
BeatStar

2021/08/24 00:52 編集

(問題発言のため、削除)
guest

回答2

0

関数を使った簡略化ではなく、リストと for文を使って簡略化してみました。

Python

1import random 2 3def decision(): 4 data = [] 5 for i in range(4): 6 data.append(input("Enter in a " + str(i+3) + " digit password (numbers only): ")) 7 8 numax = int(input("Enter in max iterations: ")) 9 10 result = [] 11 for s in data: 12 number = int(s) 13 leng = len(s) 14 counts = [] 15 for i in range(10): 16 guess = count = 0 17 while guess != number: 18 guess = random.randint(10**(leng-1),(10**leng-1)) 19 count += 1 20 if count == numax: 21 break 22 counts.append(count) 23 result.append(sum(counts)/len(counts)) 24 25 print("FOR 10 TESTS, the average number of iterations to find password are: ") 26 for i in range(4): 27 print(str(i+3) + " DIGIT PASSWORD: " + str(result[i]) + " iterations") 28 29decision() 30

希望通りの簡略化でなくてすみませんが、このコードについてコメントをお願いします。

投稿2021/08/23 13:05

編集2021/08/23 13:14
kazuma-s

総合スコア8224

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

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

0

  1. 繰り返しでてくる部分を関数にする

python

1 counts1 = [] 2 for i in range(10): 3 guess1 = 0 4 count1 = 0 5 while (guess1 != number1): 6 guess1 = random.randint(10**(leng1-1),(10**leng1-1)) 7 count1 += 1 8 if count1 == numax: 9 break 10 counts1.append(count1)

関数の引数はここで変数になっているもの。 guessとかですね。
返り値はcounts1でしょう。

  1. number1、number2...などの番号付き変数になっているところはリストや辞書にする。 リストだと、number[1]、 number[2] などになる。

  2. decision関数を作りかえ

  • 3,4,5,6について入力を求める処理。 forループ。 リストnumberに格納

  • max iterations を問い合わせ

  • for文でnumberを回して1で作った関数を呼ぶ 返り値をリストcountsに格納

  • for文でcountsを回して、resultsを作成

  • for文でresultsを回して、結果を表示

こんな感じでしょうね。

投稿2021/08/23 10:22

TakaiY

総合スコア12765

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問