キル数、ポータル獲得数の平均を求める関数型プログラムを作りました。
キル数とポータル獲得数の平均を求める関数を別に作っています。
そうすると、類似の処理が入った二組の関数があることに気付きました。
これらをまとめることはできませんでしょうか?
↓一組目の類似関数
python3
1def get_kill_count(): 2 while True: 3 try: 4 return int(input("キル数は: ")) 5 except ValueError: 6 print("整数値を入力してください") 7 8def get_key_count(): 9 while True: 10 try: 11 return int(input("ポータル獲得数は: ")) 12 except ValueError: 13 print("整数値を入力してください")
↓二組目の類似関数
python3
1def calc_kill_count_average(kill_records, num_kill): 2 return (sum(kill_records) + num_kill) / (len(kill_records) + 1) 3 4def show_kill_average(kill_records,num_kill): 5 print("平均キル数:{}".format(calc_kill_count_average(kill_records, num_kill))) 6 print("注意、記録は保持されません") 7 8 9def calc_key_count_average(key_records, num_key): 10 return (sum(key_records) + num_key) / (len(key_records) + 1) 11 12def show_key_average(key_records,num_key): 13 print("平均ポータル獲得数:{}".format(calc_key_count_average(key_records, num_key))) 14 print("注意、記録は保持されません")
↓全体コード
python3
1def get_kill_count(): 2 while True: 3 try: 4 return int(input("キル数は: ")) 5 except ValueError: 6 print("整数値を入力してください") 7 8def get_key_count(): 9 while True: 10 try: 11 return int(input("ポータル獲得数は: ")) 12 except ValueError: 13 print("整数値を入力してください") 14 15 16def ask_quit(): 17 while True: 18 YesNoWitch = input("終了しますか? Yes/No: ") 19 if YesNoWitch == "Yes": 20 print("") 21 return True 22 if YesNoWitch == "No": 23 print("") 24 return False 25 print("Yes/Noを選択して入力してください") 26 27 28def calc_kill_count_average(kill_records, num_kill): 29 return (sum(kill_records) + num_kill) / (len(kill_records) + 1) 30 31def show_kill_average(kill_records,num_kill): 32 print("平均キル数:{}".format(calc_kill_count_average(kill_records, num_kill))) 33 print("注意、記録は保持されません") 34 35 36def calc_key_count_average(key_records, num_key): 37 return (sum(key_records) + num_key) / (len(key_records) + 1) 38 39def show_key_average(key_records,num_key): 40 print("平均ポータル獲得数:{}".format(calc_key_count_average(key_records, num_key))) 41 print("注意、記録は保持されません") 42 43 44key_records=[1,2,1,3] 45kill_records=[1,2,5,6] 46while True: 47 show_kill_average(kill_records, get_kill_count()) 48 show_key_average(key_records, get_key_count()) 49 if ask_quit(): 50 break
追記
まとめられそうな所はまとめられました。
クラスについては、勉強していこうと思います。
新たな問題が発生しました。「変数killが見当たりません」とのことです。
でもkillはget_count関数の時に定義しているはずです。
なぜ見当たらないのでしょうか?
python3
1def get_count(): 2 while True: 3 try: 4 kill = int(input("キル数は: ")) 5 key = int(input("ポータル獲得数は: ")) 6 break 7 except ValueError: 8 print("整数値を入力してください") 9 10 11def ask_quit(): 12 while True: 13 YesNoWitch = input("終了しますか? Yes/No: ") 14 if YesNoWitch == "Yes": 15 print("") 16 return True 17 if YesNoWitch == "No": 18 print("") 19 return False 20 print("Yes/Noを選択して入力してください") 21 22 23def calc_kill_count_average(B, kill): 24 return (sum(B) + kill) / (len(B) + 1) 25 26def calc_key_count_average(A, key): 27 return (sum(A) + key) / (len(A) + 1) 28 29def show_average(B, kill, A, key): 30 print("平均キル数:{}".format(calc_kill_count_average(B, kill))) 31 print("平均ポータル獲得数:{}".format(calc_key_count_average(A, key))) 32 print("注意、記録は保持されません") 33 34 35A=key_records=[1,2,1,3] 36B=kill_records=[1,2,5,6] 37while True: 38 get_count() 39 show_average(B, kill, A, key) 40 if ask_quit(): 41 break