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

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

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

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

Q&A

解決済

1回答

330閲覧

PythonでifのsyntaxError: invalid systaxから抜け出せない

maoguri

総合スコア10

Python 3.x

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

0グッド

0クリップ

投稿2022/05/03 08:07

編集2022/05/03 08:53

超初心者です。
Amazonで以下を購入して、Githubのサンプルコードで動かそうとしています。
https://www.amazon.de/gp/product/B07D8S617X/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&th=1
https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code/tree/legacy/Adafruit_BMP085

Adafruit_BMP085_example.pyを実行し、エラーが出るたびに修正しています。
プログラム内で呼び出された、Adafruit_BMP085.pyの修正で行き詰りました。

Adafruit_BMP085.pyの150行目で、

Python

1# Read raw temp before aligning it with the calibration values 2UT = self.readRawTemp() 3X1 = ((UT - self._cal_AC6) * self._cal_AC5) >> 15 4X2 = (self._cal_MC << 11) / (X1 + self._cal_MD) 5B5 = X1 + X2 6temp = ((B5 + 8) >> 4 / 10.0) #ここで「TypeError: unsupported operand type(s) for >>: 'float' and 'int'」 7if (self.debug): #ここで「SyntaxError: invalid syntax」 8 print("DBG: Calibrated temperature = %f C" % temp) #上の:を消すと、ここで「SyntaxError: invalid syntax」 9return temp

ifがあるので、:は要ると思っていますが、入れても解消しません。
そもそもその上のtempのところで、floatとintを揃えろ、とのエラーが出て、
あれこれしているうちに出なくなったので、ここのせい?とも疑っています。

よろしくお願いいたします。

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

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

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

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

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

melian

2022/05/03 08:21

閉じ括弧が足りません。 temp = ((B5 + 8) >> 4 / 10.0
maoguri

2022/05/03 08:33

ありがとうございます。 閉じかっこ追記しました。 ifのsyntaxerrorが出てきます...。
melian

2022/05/03 08:42 編集

>> よりも / の方が演算の優先順位が高いので、((B5 + 8) >> 4 / 10.0) でエラーになるはずです。実際には ((B5 + 8) >> 4) / 10.0 とするのではないでしょうか?
y_waiwai

2022/05/03 08:50

エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、よけいな省略翻訳しないで出たそのママをコピペで提示してください
maoguri

2022/05/03 08:50

ありがとうございます。 temp = ((B5 + 8) >> 4) / 10.0 にしたところ、 TypeError: unsupported operand type(s) for >>: 'float' and 'int' になりました。先に出ていたエラーです。
melian

2022/05/03 08:54

なるほど、B5 が float 型なのですね。そうなりますと、(B5 + 8) >> 4 の式自体がおかしい、という事になります。
melian

2022/05/03 09:02

GitHub のコードをみて判りました。元のコードは Python2 で書かれています。なので、 X2 = (self._cal_MC << 11) / (X1 + self._cal_MD) の X2 は int になりますが、Python3 では float になります。// とすることで X2 が整数になります。 X2 = (self._cal_MC << 11) // (X1 + self._cal_MD)
guest

回答1

0

自己解決

ご回答いただきありがとうございます。

割り算のエラーをたどって、/から//に修正していったところ、最後まで走らせることができました。
非常に助かりました、ありがとうございます。

投稿2022/05/03 09:18

maoguri

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問