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

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

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

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

Q&A

解決済

2回答

927閲覧

if 文で invalid syntax !? (括弧の数に誤りはないし...)

iBETA

総合スコア43

Python 3.x

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

0グッド

0クリップ

投稿2020/05/27 01:49

前提・実現したいこと

昨晩、Python デビューしました ^_^/
過去は、PHP, Node.js にてシステム開発経験あり
インデントが大切!?
以下、IF 以降 で昨晩から頭を抱えています
どなたかご教授お願いできませんでしょうか
どうぞよろしくお願いします。

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

if (mode and code not in cls.__CODES) ^ SyntaxError: invalid syntax

該当のソースコード

Python

1#!/usr/local/bin/python3.8 2 3import re 4from typing import ClassVar 5 6import Country 7import Language 8 9 10class ModeLanguage(): 11 12 __CODES: ClassVar[tuple] = ( 13 'en', 14 'ja', 15 'zh-TW', 16 ) 17 __PATTERN: ClassVar[object] = re.compile(r'^[a-z]{2}(-[A-Z]{2})?$') 18 19 @classmethod 20 def includes(cls, code: str, mode: bool) -> bool: 21 status = False 22 while True: 23 if (mode and code not in cls.__CODES) 24 or (not mode and (not cls.__PATTERN.match(code) 25 or not Language.includes(code[:1]) 26 or (len(code) == 5 and not Country.includes(code[3:])))): 27 break 28 status = True 29 break 30 return status

試したこと

1行で全て記入した場合は特に問題なし
if (mode and code not in cls.__CODES) or (not mode and (not cls.__PATTERN.match(code) or not Language.includes(code[:1]) or (len(code) == 5 and not Country.includes(code[3:])))):

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

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

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

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

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

guest

回答2

0

ベストアンサー

条件全体を()で括ればOKでしょう。

py3

1if ((mode and code not in cls.__CODES) 2 or (not mode and (not cls.__PATTERN.match(code) 3 or not Language.includes(code[:1]) 4 or (len(code) == 5 and not Country.includes(code[3:]))))): 5 break 6

投稿2020/05/27 04:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

iBETA

2020/05/27 05:22

全体を括弧でくくる方法と バックスラッシュを角行最後に書く方法ですが PEP8!?的にはどちらを推奨してるのでしょうか 優柔不断な僕には決めかねてしまっていまして... よろしくお願いします。♪(´ε` )
退会済みユーザー

退会済みユーザー

2020/05/27 05:44

PEP8の推奨は知りませんが、個人的にはバックスラッシュはまず使わないです。書式の整形はPyCharmのようなIDEに任せてます。IDEの設定次第かもしれませんが、バックスラッシュがあると手作業で整形することになるでしょう。
iBETA

2020/05/27 07:38

なるほど... そういうことですね 正直、外側括弧がいいかもですね バックスラッシュなり括弧なりをつけないといけないのって なんか変な感じですね PHP や JavaScript, Java ではそんなことなかったのに... これが... Python か... 今後もどうかご指導の程よろしくお願いします!
退会済みユーザー

退会済みユーザー

2020/05/27 08:23

改行やインデントでブロックを表現する文法なので仕方がないですね。でもほとんどの場合カッコの数はC由来の構文の言語よりは少なくなるはずですよ。いったんPythonに目が慣れたら、他の言語の記号の多さに気づくと思います!
iBETA

2020/05/27 08:44

そういうものなのですね 実はサーバー間でのAPI関連をPythonで組もうと思っていまして しかしながらネットには、Pythonは遅いって書いてあり少し悩んでいます。 まあそんな話はさておき、僕もはやくPythonに慣れたい!^ - ^
guest

0

式の途中で改行したい場合は \ を入れて下さい。

Python

1if (mode and code not in cls.__CODES) \ 2 or (not mode and (not cls.__PATTERN.match(code) \ 3 or not Language.includes(code[:1]) \ 4 or (len(code) == 5 and not Country.includes(code[3:])))):

投稿2020/05/27 01:52

LouiS0616

総合スコア35668

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

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

iBETA

2020/05/27 01:56

そういうことなのですね というかこんなにはやく解答がいただけるとは 本当にびっくりです!! PEP8 は一応軽くは読んでみたのですが バックスラッシュに関しては書いてなかったような 少しは調べたのに。。。 少し恥ずかしいです( ^ω^ ) 本当にありがとうございました
LouiS0616

2020/05/27 01:59

PEP8はあくまでコーディング規約なので、文法についての説明は書いていない筈です。
iBETA

2020/05/27 02:00

or の前は4文字の空白を開けたのですが 3文字にして上の括弧のはじめに合わせるのは PEP8的にはいかがなものなのでしょうか!? やはり4文字にしたほうがいいのでしょうか!? それとバックスラッシュの位置ですが 最後のコロンの一文字前にそれえていますが 一般的にそうなのでしょうか!? 再度、ご教授ください!! よろしくお願いします!!(T ^ T)
LouiS0616

2020/05/27 02:01

ああ、でも72文字ルールのところでバックスラッシュについてはちょっと触れていますね。
LouiS0616

2020/05/27 02:04 編集

pycodestyleというモジュールがPyPIで公開されているので、これを使って検証してみると良いでしょう。 PEP8に準拠してコードを評価してくれます。 (かなり細かいところまで指摘してくるので、全部従う必要は無いですが)
iBETA

2020/05/27 02:47

超参考になりました!! ありがとうございました!! すぐに研究いたします!!( ^ω^ )
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問