🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

1回答

487閲覧

pythonでfor文の適切な使い方を教えてほしい。

spa

総合スコア52

Python

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

0グッド

0クリップ

投稿2021/03/25 02:51

編集2021/03/25 04:47

前提・実現したいこと

for文を使って値を取得したいのですがうまくいきません。

実現したいことは rを20回転して値を取得したあと、jに+1してから
またrを20回転し、それが終了したらjに+2してまたrを20回転する、
という処理をしたいです。

if文で条件を付けたりいろいろやったのですが、うまくいきませんでした。
アドバイスよろしくお願いします。(python初心者です)

該当のソースコード

python3

1ten_pips_result=[] 2counter_all = [] 3 4for j in range(10): 5 for r in range(20): 6 7 if df["close"][j+r] +0.01 < df["close"][j+(21-r)] : 8 kekka = 3 9 10 elif df["close"][j+r]-0.01 > df["close"][j+(21-r)] : 11 kekka = 4 12 13 else: 14 kekka = 5 15 16 ten_pips_result.append(kekka) 17 counter = Counter(ten_pips_result) 18counter_all.append(counter.most_common()[0][0])

### 現状のエラー
[5, 4, 4, 4, 4, 5, 5, 5, 3, 5, 5, 5, 5, 4, 5, 5, 5, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 4, 3, 5, 5, 5, 5, ・・・
といったような長い配列になってしまいます。
rはrange(20)なので20個づつ値を取りたいのですが、jのループ分もプラスされた数値を取得しているようです。

### 取得したい値
(ソースコードを少し変更しました。)

まずrを20回転させる。

kekkaの値を20個取得。[5,5,5,4,3,5,4,4,5,5,5,5,3,5,5,5,4,5,3,4]

kekkaの中で一番多い数値を取得。(ここでは5を取得)

この処理をjの値を+1づつしながら繰り返したい。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

y_waiwai

2021/03/25 03:13

現状のコードでどういう不具合があるんでしょうか
spa

2021/03/25 03:52

失礼しました。エラー内容を追記しました。
miyabi_takatsuk

2021/03/25 04:27

> jのループ分もプラスされた数値を取得しているようです > j+r としているので、当然そうなります。 どういったインデックスを取得したいのでしょうか? 取得したい値の概要を記載下さい。
spa

2021/03/25 04:48

取得したい値を追加しました。 うまく説明できていなかったらすみません。
miyabi_takatsuk

2021/03/25 04:53 編集

言い方悪かったですね、すみません。 「インデックスの値」はどのような値を取得したいのでしょうか? ってことを明示して下さい。 おそらくですが、 > df["close"] のリスト変数のレンジを、途中からオーバーしているのではないでしょうか?
spa

2021/03/25 04:58 編集

df["close"]の値は 0 143.572 1 143.581 2 143.620 3 143.582 4 143.585 といった感じです。という返答であってますか? 初心者なので用語があまりピンとこなくてすみません! それと、そもそもfor文の使い方が間違っていそう、というところまではわかるのですが、 どう修正したら理想通り動くのかが見当がつかない状況です。
guest

回答1

0

ベストアンサー

やりたいことが何かはわかりませんが、形式的に修正すると以下です。

pythyon

1counter_all = [] 2 3for j in range(10): 4 ten_pips_result=[] 5 for r in range(20): 6 if df["close"][j+r] +0.01 < df["close"][j+(21-r)] : 7 kekka = 3 8 elif df["close"][j+r]-0.01 > df["close"][j+(21-r)] : 9 kekka = 4 10 else: 11 kekka = 5 12 ten_pips_result.append(kekka) 13 counter = Counter(ten_pips_result) 14 counter_all.append(counter.most_common()[0][0])

ただし、3が7回、4が7回、5が6回のような場合、3が選ばれるか4が選ばれるかはあてになりません。

投稿2021/03/25 06:41

ppaul

総合スコア24670

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

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

spa

2021/03/25 06:56

ありがとうございます! やりたかった分類が実現しました。これで先へ進めます。 お世話になりました。 ほかに回答していただいた方々、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問