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

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

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

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

Q&A

2回答

1065閲覧

PYTHON while for文の作り方について

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2018/05/29 01:11

編集2018/05/29 01:14

お世話になります。
Python初心者につき初歩的な質問で大変申し訳ございません。

以下のようにif文を書いているのですが、while文かforにしたいです。
なんかとても無駄な文を書いている気がして恥ずかしいです。後続処理はexchange[0].だけ違うだけで
print("dummy")は全部一緒なので無駄な気がしています。
大変お手数とは存じますがWhile文かfor文の完成形を教えてください。

exchange = [ a({ "apiKey": "hoge", "secret": "hoge", }), b({ "apiKey": "hoge", "secret": "hoge", }), c({ "apiKey": "hoge", "secret": "hoge", }), d({ "apiKey": "hoge", "secret": "hoge", }) ] if bid_exchange == "a": limit_ordered_info_bid = exchange[0].order() print("dummy") if bid_exchange == "b": limit_ordered_info_bid = exchange[1].order() print("dummy") if bid_exchange == "c": limit_ordered_info_bid = exchange[2].order() print("dummy") if bid_exchange == "d": limit_ordered_info_bid = exchange[3].order() print("dummy")

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

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

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

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

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

guest

回答2

0

for/whileを使用する必要、ifさえ必要ありません。dictで以下のように書けます。

python

1indexes = {"a": 0, "b": 1, "c": 2, "d": 3} 2limit_ordered_info_bid = exchange[indexes[bid_exchange]].order() 3print("dummy")

投稿2018/05/29 01:29

YouheiSakurai

総合スコア6142

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

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

退会済みユーザー

退会済みユーザー

2018/05/29 01:33

丁寧にありがとうございます。今回は他のプログラムの影響範囲を考えてDICTの中身を変えないで、While文で対応したいのでWhileまたはfor文を教えて頂けますでしょうか?
退会済みユーザー

退会済みユーザー

2018/05/29 01:36

素晴らしいコードですね。exchange[indexes[bid_exchange]].order()が理解できませんでした。教えて頂けますでしょうか?初心者の為丁寧にお願いいたします。お手数をおかけいたします。
退会済みユーザー

退会済みユーザー

2018/05/29 01:37

また別の質問ですが、limit_ordered_info_bid の中には 配列で 格納されているのでしょうか?
退会済みユーザー

退会済みユーザー

2018/05/29 02:42

回答ありがとうございます。私もこのコードを使いたいのですが exchange[indexes[bid_exchange]].order() の中の exchange[indexes[bid_exchange]]が理解できません。 EXCHANGEにはA,B,C,Dが入ってますよね? INDEXESには、それを紐づけるindexes = {"a": 0, "b": 1, "c": 2, "d": 3}が入ってます。 なぜ exchange[indexes[bid_exchange]] とすると FOR文で回さなくても格納されるのでしょうか? 初心者で理解ができないのです。わかりやすく教えて頂けませんか?
hayataka2049

2018/05/29 03:19 編集

横からですが、 indexes = {"a": 0, "b": 1, "c": 2, "d": 3} という辞書なので、たとえば bid_exchange = "a" と事前に代入されていたなら indexes[bid_exchange] は0になりますし、そうするとexchange[indexes[bid_exchange]]は exchange[0] と等価になって用を達することが出来ます。 内側から値が決まっていくことを意識すれば読めるのではないでしょうか。
退会済みユーザー

退会済みユーザー

2018/05/29 03:47

ありがとうございます♡読むことができました。とても丁寧に書いてくれてありがとうございます♡
guest

0

私も YouheiSakuraiさんの方法が良いのではないかと思いますが、exchange の形式を変えたくないということであれば

Python

1exchange_dic = {k:v for k,v in zip(['a','b','c','d'], exchange)} 2limit_ordered_info_bid = exchange_dic[bid_exchange].order() 3print("dummy")

のように実装できるのではないでしょうか。

どうしてもfor文にて実装したいのであれば、

Python

1for i, name in enumerate(['a','b','c','d']): 2 if bid_exchange == name: 3 limit_ordered_info_bid = exchange[i].order() 4 print("dummy") 5 break

または

Python

1for name, exch in zip(['a','b','c','d'], exchange): 2 if bid_exchange == name: 3 limit_ordered_info_bid = exch.order() 4 print("dummy") 5 break

のようなコードになるかと思います。

投稿2018/05/29 02:15

magichan

総合スコア15898

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

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

退会済みユーザー

退会済みユーザー

2018/05/29 02:41 編集

>私も YouheiSakuraiさんの方法が良い 回答ありがとうございます。私もこのコードを使いたいのですが exchange[indexes[bid_exchange]].order() の中の exchange[indexes[bid_exchange]]が理解できません。 EXCHANGEにはA,B,C,Dが入ってますよね? INDEXESには、それを紐づけるindexes = {"a": 0, "b": 1, "c": 2, "d": 3}が入ってます。 なぜ exchange[indexes[bid_exchange]] とすると FOR文で回さなくても格納されるのでしょうか? 初心者で理解ができないのです。わかりやすく教えて頂けませんか?
退会済みユーザー

退会済みユーザー

2018/05/29 02:54

配列で入るってこと?
magichan

2018/05/29 03:19

改めて YouheiSakuraiさんのコード見ましたが、YouheiSakuraiさんのコードもexchange に変更を加えてませんね・・失礼しました。 で、もともとの質問にあるコードですが、 if文を使い、"bid_exchange" の値によって bid_exchangeが'a'の時: exchange[0].order() を実行 bid_exchangeが'b'の時: exchange[1].order() を実行 bid_exchangeが'c'の時: exchange[2].order() を実行 bid_exchangeが'd'の時: exchange[3].order() を実行 の処理別けを行って、その結果を"limit_ordered_info_bid"に入れております。 そこで indexes = {'a': 0, 'b': 1, 'c': 2, 'd': 3} というdictを用意することで、 indexes[bid_exchange] の値は bid_exchangeが'a'の時: 0 bid_exchangeが'b'の時: 1 bid_exchangeが'c'の時: 2 bid_exchangeが'd'の時: 3 となりますので、これを使って exchange[indexes[bid_exchange]].order() を実行して、その結果を"limit_ordered_info_bid"に入れると if文自体が要らなくなりますよ。というのがYouheiSakuraiさんの実装かと思います。 あと、"limit_ordered_info_bid"には"bid_exchange"の値に応じてexchange[0~3].order() の何れかの結果が入るだで、全ての結果がリストで格納されるわけではございません。
退会済みユーザー

退会済みユーザー

2018/05/29 03:23

丁寧にありがとうございます。 >あと、"limit_ordered_info_bid"には"bid_exchange"の値に応じてexchange[0~3].order() の何れか>の結果が入るだで、全ての結果がリストで格納されるわけではございません。 という事はIF文の結果と一緒になるという事ですか?逆?
magichan

2018/05/29 03:26

はい、その通りです。 IF文の結果と一緒になります。
退会済みユーザー

退会済みユーザー

2018/05/29 03:31

とても丁寧でありがとうございます。答えだけの回答より全然わかりやすい説明でしたし、私みたいな初心者にも優しい伝え方をしてくれたので大変助かりました。 ちょと実装してまた質問します。ありがとうございます。
退会済みユーザー

退会済みユーザー

2018/05/29 03:39

bbb = exchange[indexes[bid_exchange]].order() で実行しましたが NameError: name 'bid_exchange' is not defined とエラーが出ました。 しかしこのコードの前には print(bid_exchange)でエラーは出ていませんでした。 定義されていないというエラーだと思いますが、今まで表示されていたのに なぜエラーになるのでしょうか?
退会済みユーザー

退会済みユーザー

2018/05/29 03:59

不要な文があるだけでした。今実装でできました。とっても良く理解できました。内側からコードを読んでいけば、if文だけじゃなくwhileやFor文も不要になるのですね。コードが400ステップは削減できそうです。本当にありがとうございました♡
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問