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

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

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

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

Q&A

2回答

1404閲覧

残高処理のIF文の長さをわかりやすくしたい!

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2018/06/01 06:17

編集2022/01/12 10:55

お世話になります。
初心者につき初歩的な質問で大変申し訳ございません。
aaa、bbb、取引所の中からJPYとBTCの残高関数を作成しました。しかしif文が長く、省略したいです

```ここに言語を入力 # アウトプットになる残高情報のDictを作成する balance_information = {"exchange_name": "", "balance": "", "currency": ""} #残高チェックフラグを初期化する balance_result_main_coin_aaa = 0 balance_result_alt_coin_aaa = 0 balance_result_main_coin_bbb = 0 balance_result_alt_coin_bbb = 0 balance_result_main_coin_ccc = 0 balance_result_alt_coin_ccc = 0 balance_result_main_coin_ddd = 0 balance_result_alt_coin_ddd = 0 i = 0 for exchange_name in exchange_list: # 取引所名称を出力 print("exchange_name :", exchange_name) # コンソールに全出力結果を出力 result = exchange[i].fetch_balance() # 全データの出力 データ構造を理解する際にめちゃくちゃ役にたちます。 # print(json.dumps(result, indent=True)) # もしaaaであれば if exchange_name == "aaa": n = 0 # 残高証明したい通貨を判定する為該当する取引所をループする for balance_data in result["info"]: # for文で利用するbalance_dataの構造を全て出力します # print("aaa:balance_data", balance_data) # サンプルデータ aaa:balance_data {"currency_code": "JPY", "amount": 6124.0, "available": 6124.0} # もし通貨残高情報がJPYであれば if balance_data["currency_code"] == "JPY": # 取引所名称、残高、対象通貨 をそれぞれ格納する balance_information["exchange_name"] = exchange_name balance_information["balance"] = result["info"][n]["amount"] balance_information["currency"] = result["info"][n]["currency_code"] print("balance_information", balance_information) # もし残高情報が取得されたら1を格納する balance_result_main_coin_aaa = 1 create_balance_csv(balance_information) # 対象通貨のCSVファイルを作成する # もし通貨残高情報がであれば if balance_data["currency_code"] == "BTC": # 取引所名称、残高、対象通貨 を格納する balance_information["exchange_name"] = exchange_name balance_information["balance"] = result["info"][n]["amount"] balance_information["currency"] = result["info"][n]["currency_code"] print("balance_information", balance_information) # もし残高情報が取得されたら1を格納する balance_result_alt_coin_aaa = 1 create_balance_csv(balance_information) # 対象通貨のCSVファイルを作成する # aaaの次の通貨をチェックする為カウントアップ n = n + 1

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

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

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

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

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

KojiDoi

2018/06/01 06:27

https://teratail.com/questions/129023 でもらった回答が活かされている様には見えません。それを活かすだけでもコードの長さは半分位にはできます。 まずは自分の頭で考えてみましょう。
退会済みユーザー

退会済みユーザー

2018/06/01 06:32

微妙に取引所ごとの処理が違うので一概に前回頂いた回答だけでは活かすことができないイメージです。ない頭で考えたコードで大変申し訳ありません。
KojiDoi

2018/06/01 06:40

微妙に取引所ごとの処理が違う、と言っても明らかに共通した処理が繰返されています。 ブロックの外側に出せる物は全部外に出して下さい。
退会済みユーザー

退会済みユーザー

2018/06/01 06:41

はい。ありがとうございました。
guest

回答2

0

改善方法

ヒント:

python

1# 辞書型のリストresult[info]から"currency_code"に'JPY'を持つ要素を抜き出す。 2balance_data = [ data for data in result['info'] if data["currency_code"] == 'JPY']
  • 残高チェックフラグはdictionaryでまとめて持つようにして、取得時にその都度成否を追加するようにするといいかもしれません。
balance_result = {"main_aaa":1,"alt_aaa":1,.....}

投稿2018/06/01 08:04

ponpu1601

総合スコア166

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

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

退会済みユーザー

退会済みユーザー

2018/06/01 08:37

ありがとうございます。頂いたものを参考に実践させて頂きます。
退会済みユーザー

退会済みユーザー

2018/06/01 09:42

うーん、なかなかうまくいかないな。ちょっと考えてもう一度本文に加えて書き直してみます。もう少し頑張らせてください。
guest

0

balance_informationを外で作って代入していくより、ifの中で辞書オブジェクトを作って使い捨てれば良いような気が・・・あと似たような変数をいくつも作るより、一つのコレクション型で済ませた方が余計な混乱がないです。

python

1if balance_data["currency_code"] == "JPY": 2 balance_information = {"exchange_name":exchange_name, 3 "balance":result["info"][n]["amount"], 4 "currency":result["info"][n]["currency_code"]} 5 print("balance_information", balance_information) 6 create_balance_csv(balance_information) 7 result_count["main_aaa"] = 1

投稿2018/06/01 10:04

hayataka2049

総合スコア30933

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

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

退会済みユーザー

退会済みユーザー

2018/06/01 10:06

いつもありがとうございます。hayataka2049さんの意見も取り入れて、ステップ書いてみます。新しく書いたらUpしますのでまたレビューしてください。ありがとう♡
hayataka2049

2018/06/01 10:09

書き直すならせめてインデントがまともに見えるようにしてくれませんか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問