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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python 3.x

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

Q&A

解決済

2回答

738閲覧

pythonでイコールの条件判定式でご教示下さい

FM_TOWNS

総合スコア59

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python 3.x

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

0グッド

0クリップ

投稿2023/03/21 14:50

編集2023/03/22 22:35

実現したいこと

for+if文で
①リスト内で2で割り切れる場合
②リスト内で2で割り切れない場合
で集計するプログラムを作りましたが、条件判定式で不明な点があり、お伺いします。

具体的には、下記、### 発生している問題・エラーメッセージを参照願います。

前提

アナコンダで勉強中です。
jupyter notebook  6.5.2
Python 3.10.9

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

冒頭①に対し、
if d%2==0: で条件判定、ヒットしたものは加算するfor文とし、これは問題なく稼働しました。
冒頭②に対し、当初は①を真似て、
if e%2!==0: で条件判定、同様に加算するfor文としましたが、==で、SyntaxError: invalid syntaxとなりました。

if e%2!==0:を、=を1つとする、 if e%2!=0:とすると、問題なく動きます。

具体的には、下記、「該当のソースコード」欄をご参照下さい。

ご教示いただきたいのは、①if d%2と、②if e%2!の違いは、①は0と等しいか、②は0と等しくないか(!で等しくない、という否定形は与えている)ですが、0との対比で言えば、いずれも==でいいのでは、と思え、SyntaxErrorとなる理由が当方には分かりませんでした。
①②いずれも、==0で、0とイコールを示しており、但し、②は!を入れることで、0と等しくない、という意味となると思われ、エラーになる理由は、これ以外にあるのでは、と想像しました。

お知恵をいただけますと、幸いです。

該当のソースコード

python

1 2#リスト作成 3list_2=list(range(5,20,3)) 4list_2 5[5, 8, 11, 14, 17] 6 7#①リスト内で2で割り切れる場合のみ加算する。 8y=0 9for d in list_2: 10 if d%2==0: 11 y=y+d 12 else: 13 pass 14print(y) 15# 返し22 16 17#②リスト内で2で割り切れない場合のみ加算する。 18z=0 19for e in list_2: 20 if e%2!==0: 21 z=z+e 22 else: 23 pass 24print(z) 25 26#if e%2!==0: に対し、SyntaxError: invalid syntax となります。 27 28#以下の通り、if文の=を1つにすると、問題は生じません。 29z=0 30for e in list_2: 31 if e%2!=0: 32 z=z+e 33 else: 34 pass 35print(z) 36#返し 33 37

試したこと

前記、以下の通り~内、if文のイコールを、==から=に変更。

補足情報

特にありません。

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

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

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

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

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

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

jbpb0

2023/03/22 00:29

pythonのコードの一番最初の行のすぐ上に ```python だけの行を追加してください また、pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください または、 https://teratail.storage.googleapis.com/uploads/contributed_images/56957fe805d9d7befa7dba6a98676d2b.gif を見て、そのようにしてみてください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
FM_TOWNS

2023/03/22 22:59

jbpb0様 コメント、ご鞭撻、ありがとうございました。 否定条件if文は、規則として!= と捉えました。!を使わないのであれば、not ==での対応ということで、問題ないことも確認しました。 初歩的な質問に丁寧にご対応いただき、ありがとうございました。   
guest

回答2

0

ベストアンサー

別の方向から

pythonでブール演算等の否定を表わすには「!」ではなく、「not」を使います。

python

1e%2 == 0 # eが2でわりきれれば true 2 3not (e%2==0) # eが2でわりきれれば false => eが2でわりきれなければ true 4 5e%2 not ==0 # ★ syntax error 間には入れられない 6 7e%2 ! == 0 # ★ syntax error 「!」が無意味な記号 8

投稿2023/03/22 01:34

TakaiY

総合スコア12975

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

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

FM_TOWNS

2023/03/22 22:25

TakaiY様 ご回答ありがとうございます。 ! == 自体は、意味を持たない点、理解しました。 not 使用の場合は、機能面で目的は達成しており、今後は、==で対応するのであれば、notで対応することとします。
guest

0

python の if 文は次のような構文になっています。

if 式: 処理

式の部分は今回、次のような形になっています。

左辺 == 右辺
左辺 != 右辺

今回の場合は、e%2 と 0 を比較する演算子が "==" であったり "!=" であったりするわけです。
つまり、「②if e%2!」 という見方が間違っているということになるかと思います。
参考になれば幸いです。

投稿2023/03/21 15:04

ga3

総合スコア23

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

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

FM_TOWNS

2023/03/21 17:14

ご回答、ありがとうございました。 ②ですが、 if not e%2==0: とすると、33と返します。 但し、ここを、if e%2!==0: とすると、当初質問に記した通り、SyntaxError: invalid syntaxとなります。 if e%2!=0:と、=を一つにすると、33を返し、質問分通り、ノーマルエンドとなります。 以上の通り、ノーマルエンド自体は既に解決済ですが、否定を意味する ! を入れると、何故、=は一つの時のみノーマルエンドとなるのか、当方には分からず、まことにお手数ですが、理屈をご教示いただけますと有り難い限りです。 よろしくお願いします。
ga3

2023/03/21 22:07

「否定を意味する ! 」という見方が間違っています。 演算子 "=" は代入を意味します。 演算子 "==" や演算子 "!=" は左右を比較し一致しているかを返します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問