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

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

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

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

Q&A

解決済

2回答

409閲覧

検索で要素番号が返らないのは何故か?

wakahide

総合スコア23

Python 3.x

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

0グッド

0クリップ

投稿2020/03/15 08:44

前提・実現したいこと

部分一致検索を利用して、文字列の位置を返したいです。
素人質問で恐縮ですが、ご助言の程宜しくお願い致します。

発生している問題・エラーメッセージ

codeに何を入力しても n = 0 となってしまいます。

該当のソースコード

python 3.7 A = "ABCDEF" #codeはinput("enter: ")で指定します。 #example code = C2 while A[n] in code == False: n = n + 1 print(n) ソースコード

試したこと

ループを使わず、
A[2] in code
を入力するとTrueになるのは確認してます。

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

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

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

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

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

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

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

guest

回答2

0

普通は、こう書きます。

Python

1while A[n] not in code:

== Falseとか== Trueは、普通書きません。そう書かざるを得ないケースもありますが。
while (x == 10) == False:
とか、変に思いませんか?

質問の、A[n] in code == Falseですが、in==は同一優先順位です。
このように同一優先順位の比較演算子を括弧を付けず複数書いた場合は、他の多くの言語では(A[n] in code) == Falseの意味となります。
inの代わりに、==と同一優先順位のその言語にある比較演算子が書いてあるとして)

ところが、Pythonだと(A[n] in code) and (code == False)とみなされているはずです。なので、この場合は常に偽です。
このあたり、リファレンスにちゃんと書いてありませんが、x < y <= zx < y and y <= zとみなされるという記述があるので、in==についても同じだと思います。

投稿2020/03/15 11:15

otn

総合スコア84798

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

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

otn

2020/03/15 11:22

"A" in "ABC" == "ABC" "A" in "ABC" in ["ABC"] などは、True ですね。 "A" in "ABC" and "ABC" == "ABC" "A" in "ABC" and "ABC" in ["ABC"] とみなされているということでしょう。
wakahide

2020/03/15 11:37

解説頂きありがとうございました。試してみると動きました。 学習を初めて1ヶ月で苦戦していたのですが、この様に丁寧にアドバイス頂き、1人でやっていた時と違って、大変勉強になります。ちゃんとしたコードを参考にしつつ、はやくビギナーの域を抜けたいと思います。
otn

2020/03/15 14:55 編集

この件は、私も今考えてみて初めて気づき、勉強になりました。 回答に書いたように == False とか書いたことないので、初めて遭遇。 1 < x < 10 のような書き方が出来るのは便利ですが、a in b == c は分かりにくい。
guest

0

ベストアンサー

※code = 'C2'、n = 0となっている前提で話をします。もし、違っていればコメントで指摘ください。

試してみたら、A[n] in code == Falseは常にFalseを返すようです。
たぶん、処理順序の問題で、code == Falseが先に実行されるからと思います。
実際、while (A[n] in code) == False: とすれば、n = 2になりました。

投稿2020/03/15 08:59

Matsui_hero

総合スコア346

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

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

wakahide

2020/03/15 09:04

()でくくるとうまくいきました。for でも試しており、同様の症状だったのですが、同じく()でくくるとうまくいきました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問