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

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

ただいまの
回答率

90.84%

  • Python

    5941questions

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

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

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 256

terak31

score 6

お世話になります。
初心者につき初歩的な質問で大変申し訳ございません。
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  
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • KojiDoi

    2018/06/01 15:40

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

    キャンセル

  • terak31

    2018/06/01 15:41

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

    キャンセル

  • 退会済みユーザー

    2018/06/01 16:27

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 2

+1

改善方法

ヒント:

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/01 17:37

    ありがとうございます。頂いたものを参考に実践させて頂きます。

    キャンセル

  • 2018/06/01 18:42

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

    キャンセル

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/01 19:06

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

    キャンセル

  • 2018/06/01 19:09

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

    キャンセル

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    5941questions

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