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

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

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

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

Python

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

Q&A

解決済

1回答

1483閲覧

関数について。 (コードの短縮)

xRein

総合スコア6

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/06/07 12:02

前提・実現したいこと

関数を使ったコードの短縮。
pythonの学習を始めたのですが書いたコードを関数を使って短くしたいと思ってもどうやればいいのか検討がつきません。どこで関数を使ったらいいか、などアドバイスを頂けたら幸いです。また、どこか改善点があればそれも教えていただけたらと思います。

該当のソースコード

python3

1ソースコード 2```a=0 3b=0.05 4c=0.07 5d=0.12 6another = "y" 7 8taxa = 0 9taxb = 0 10taxc = 0 11taxd = 0 12 13totala = 0 14totalb = 0 15totalc = 0 16totald = 0 17stpt = 0 18while another == "y": 19 item_number = int(input("Please enter a Item Number:")) 20 q = int(input("Please enter quantity:")) 21 p = float(input("Please enter the price:")) 22 if item_number in range (100,200): 23 totala = totala + p*q 24 taxa = totala * a 25 total = totala + totalb + totalc + totald 26 tax = taxa + taxb + taxc + taxd 27 stpt = tax + total 28 print("Subtotal before Tax:$ %7.2f" %(total), 29 "Total tax:$ %7.2f" %(tax), 30 "Subtotal plus Tax:$ %7.2f" %(stpt)) 31 another = input('Do you have another item?' + '(Enter y for yes, n for end):') 32 elif item_number in range (200,300): 33 totalb = totalb + p*q 34 taxb = totalb * b 35 total = totala + totalb + totalc + totald 36 tax = taxa + taxb + taxc + taxd 37 stpt = tax + total 38 print("Subtotal before Tax:$ %7.2f" %(total), 39 "Total tax:$ %7.2f" %(tax), 40 "Subtotal plus Tax:$ %7.2f" %(stpt)) 41 another = input('Do you have another item?' + '(Enter y for yes, n for end):') 42 elif item_number in range (300,400): 43 totalc = totalc + p*q 44 taxc = totalc * c 45 total = totala + totalb + totalc + totald 46 tax = taxa + taxb + taxc + taxd 47 stpt = tax + total 48 print("Subtotal before Tax:$ %7.2f" %(total), 49 "Total tax:$ %7.2f" %(tax), 50 "Subtotal plus Tax:$ %7.2f" %(stpt)) 51 another = input('Do you have another item?' + '(Enter y for yes, n for end):') 52 elif item_number in range (400,500): 53 totald = totald + p*q 54 taxd = totald * d 55 total = totala + totalb + totalc + totald 56 tax = taxa + taxb + taxc + taxd 57 stpt = tax + total 58 print("Subtotal before Tax:$ %7.2f" %(total), 59 "Total tax:$ %7.2f" %(tax), 60 "Subtotal plus Tax:$ %7.2f" %(stpt)) 61 another = input('Do you have another item?' + '(Enter y for yes, n for end):') 62 else: 63 print("Invaild Item Number") 64 another = input('Do you have another item?' + '(Enter y for yes, n for end):') 65print ("Total before Tax:$ %7.2f" %(total), 66 "Total tax:$ %7.2f" %(tax), 67 "Total plus Tax:$ %7.2f" %(stpt)) 68print ('end')

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

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

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

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

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

hayataka2049

2018/06/07 12:04

とりあえず質問文の編集を開いて、<code>みたいなボタンを押して出てくるものでコードをくくってください(あと「ここに言語を入力」を「python」に書き換える)。今の表示だとインデントも見えないし、読めないです
guest

回答1

0

ベストアンサー

想像・補完…

python

1from collections import defaultdict 2labels = list('abcd') 3rates = {'a': 0, 'b': 0.05, 'c': 0.07, 'd':0.12} 4taxes = defaultdict(float) 5totals = defaultdict(float) 6 7def get_input(): 8 item = int(input('Number')) 9 q = int(input('Quantity')) 10 p = float(input('price')) 11 return item, p, q 12 13def get_label(item): 14 if 100 <= item < 200: 15 return 'a' 16 elif 200 <= item < 300: 17 return 'b' 18 elif 300 <= item < 400: 19 return 'c' 20 elif 400 <= item < 500: 21 return 'd' 22 else: 23 return None 24 25def get_total_tax(label, p, q): 26 total = p*q 27 tax = total*rates[label] 28 return total, tax 29 30def show(): 31 print(f'BeforeTax: {sum(totals.values())} Tax: {sum(taxes.values())}') 32 33while True: 34 item, p, q = get_input() 35 label = get_label(item) 36 if label is not None: 37 total, tax = get_total_tax(label, p, q) 38 taxes[label] += tax 39 totals[label] += total 40 else: 41 print('Invalid Input') 42 show() 43 if input('Continue?') != 'y': 44 break

コメント追加

python

1from collections import defaultdict 2 3#変数名では抽象化できないので、定石通りラベルを用意して辞書で処理する 4labels = list('abcd') 5rates = {'a': 0, 'b': 0.05, 'c': 0.07, 'd':0.12} 6 7# taxes = {k:0 for k in labels}と同じだが、気分でdefaultdictを使ってみた 8taxes = defaultdict(float) 9totals = defaultdict(float) 10 11def get_input(): 12 ''' 13 データ入力を受け付ける 14 3つの数字をゲットする 15 それぞれ、整数、整数、実数 16 例外処理があればこの中で処理する 17 ''' 18 item = int(input('Number')) 19 q = int(input('Quantity')) 20 p = float(input('price')) 21 return item, p, q 22 23def get_label(item): 24 ''' 25 商品IDを準備しておいたラベルに対応付ける 26 想定外のIDはNoneを返す 27 ''' 28 if 100 <= item < 200: 29 return 'a' 30 elif 200 <= item < 300: 31 return 'b' 32 elif 300 <= item < 400: 33 return 'c' 34 elif 400 <= item < 500: 35 return 'd' 36 else: 37 return None 38 39def get_total_tax(label, p, q): 40 ''' 41 入力分の総額と税(?)を計算する 42 レートはアイテムごとに異なるが、用意してあるものを引き出すためにラベルを使う 43 ''' 44 total = p*q 45 tax = total*rates[label] 46 return total, tax 47 48def show(): 49 ''' 50 出力はここにまとめる 51 他に税込みも出力できるし、ファイルに書き出すこともできる 52 ''' 53 print(f'BeforeTax: {sum(totals.values())} Tax: {sum(taxes.values())}') 54 55while True: 56 item, p, q = get_input() #入力ゲット 57 label = get_label(item) #ラベルゲット 58 if label is not None: #対応ラベルがある場合のみ総額と税を計算する 59 total, tax = get_total_tax(label, p, q) #総額と税の計算 60 taxes[label] += tax #総額を加算する 61 totals[label] += total #税を加算する 62 else: #対応するラベルがない場合はエラーと表示 63 print('Invalid Input') 64 show() #いずれにしろ暫定総額などを表示する 65 if input('Continue?') != 'y': #入力がy出ない限り打ち切り 66 break

投稿2018/06/07 12:59

編集2018/06/07 14:49
mkgrei

総合スコア8560

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

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

pepperleaf

2018/06/07 13:47

済みません。。。思わず、 + を付けてしまいました。 (久々です、こういうコード見たのは) 関数の意味、あるいは、用途の説明が必要な気がしますが、(自分には)難しい。
mkgrei

2018/06/07 14:54

コメントを追記しました。 コメントなしだとわかりにくい所があればシェアしていただけると幸いです。 改善案を模索します。
xRein

2018/06/07 19:34

該当のコードのみならずコメントまで丁寧にありがとうございます!少しづつ理解していこうと思います。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問