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

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

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

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

Q&A

解決済

4回答

326閲覧

indentエラーの解決法

osatouw

総合スコア8

Python 3.x

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

0グッド

0クリップ

投稿2018/01/26 05:26

編集2018/01/26 05:31

下記のプログラムにて、'def write'以降のif文からindentエラーが発生し実行できません。プログラムはこちらのサイトからコピペしたものです。
エラー内容は把握してますが始めたばかりで無知な部分が多いのでどこを直すといいか教えていただけるとうれしいです。よろしくお願いします。

Python

1import webiopi 2 3webiopi.setDebug() 4 5GPIO = webiopi.GPIO 6 7class DCMotor: 8 _pin1 = 0 9 _pin2 = 0 10 11 def __init__(self, pin1, pin2): 12 self._pin1 = pin1 13 self._pin2 = pin2 14 GPIO.setFunction( self._pin1, GPIO.PWM ) 15 GPIO.setFunction( self._pin2, GPIO.PWM ) 16 17 def __del__(self): 18 self.write(0.0) # stop 19 20 def write(self, ratio): 21  if 1.0 < ratio: # saturation 22 ratio = 1.0 23 if -1.0 > ratio: # saturation 24 ratio = -1.0 25 if 0.01 > ratio and -0.01 < ratio: # stop 26 GPIO.pwmWrite(self._pin1, 0.0) 27 GPIO.pwmWrite(self._pin2, 0.0) 28 elif 0 < ratio: # Normal rotation 29 GPIO.pwmWrite(self._pin1, ratio) 30 GPIO.pwmWrite(self._pin2, 0.0) 31 else: # Reverse rotation 32 GPIO.pwmWrite(self._pin1, 0.0) 33 GPIO.pwmWrite(self._pin2, -ratio) 34 35g_motorL = DCMotor( 5, 6 ) # Left motor 36g_motorR = DCMotor( 13, 19 ) # Right motor 37 38g_strMode = "0" # Drive mode. GUI default mode = "0"(stop) 39g_fRatio = int("5") * 0.05 # PWM Ratio. GUI default level = "5" 40 41@webiopi.macro 42def ChangeDriveMode( strMode ): 43 webiopi.debug("ChangeDriveMode( %s )" % (strMode)) 44 global g_strMode 45 g_strMode = strMode 46 iMode = int(strMode) 47 if 0 == iMode: 48 webiopi.debug("Mode : Stop") 49 g_motorL.write(0.0) 50 g_motorR.write(0.0) 51 elif 1 == iMode: 52 webiopi.debug("Mode : Forward") 53 g_motorL.write(g_fRatio) 54 g_motorR.write(g_fRatio) 55 elif 2 == iMode: 56 webiopi.debug("Mode : Backward") 57 g_motorL.write(-g_fRatio) 58 g_motorR.write(-g_fRatio) 59 elif 3 == iMode: 60 webiopi.debug("Mode : CW") 61 g_motorL.write( g_fRatio) 62 g_motorR.write(-g_fRatio) 63 elif 4 == iMode: 64 webiopi.debug("Mode : CCW") 65 g_motorL.write(-g_fRatio) 66 g_motorR.write( g_fRatio) 67 68@webiopi.macro 69def ChangeVoltageLevel( strLevel ): 70 webiopi.debug("ChangeVoltageLevel( %s )" % (strLevel)) 71 global g_fRatio 72 g_fRatio = int(strLevel) * 0.05 73 # ratio = level * 0.05 : level=10 -> ratio=0.5 -> InputVoltage=2.5[V](When VM=5[V]). 74 webiopi.debug("Ratio : %f" % (g_fRatio)) 75 ChangeDriveMode( g_strMode )

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

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

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

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

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

Udomomo

2018/01/26 05:29

def errorというのはどこにありますか?
osatouw

2018/01/26 05:31

失礼しました。編集致しました。
guest

回答4

0

def write(self, ratio):の次の行にあるifが、後の行のifよりもずれているうえ、全角スペースが混ざっているようです。
この部分のインデントを、半角スペースのみにして後の行と揃えてみてください。

コーディング用のエディタを使うと、こういったエラーをあらかじめチェックできたりもします。

投稿2018/01/26 05:39

Udomomo

総合スコア1524

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

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

0

ベストアンサー

python

1 def write(self, ratio): 2  if 1.0 < ratio: # saturation 3 ratio = 1.0

ここの if の行の先頭が全角スペースです。

投稿2018/01/26 05:37

mattn

総合スコア5030

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

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

osatouw

2018/01/26 05:43

もしよければ修正したコードを貼っていただいてもよろしいでしょうか。度々申し訳ありません。
osatouw

2018/01/26 05:47

ありがとうございました。エラーが消えました。
guest

0

二つのif文の頭がずれてませんか?

Python

def write(self, ratio):

  if 1.0 < ratio: # saturation
ratio = 1.0
if -1.0 > ratio: # saturation
ratio = -1.0

その他気になったこと

  • 排他的な条件について

writeメソッドにいくつかif文がありますが、条件が排他的なときはelifを適宜用いてください。
読みやすくなるだけでなく、比較回数が減って実行速度が向上します。

  • 複合的な条件について

Pythonの比較式は非常に柔軟で、『ナントカ以上ナントカ未満』などを簡潔に書けます。
具体的には 0.01 > ratio and -0.01 < ratio-0.01 < ratio < 0.01

  • ヨーダ記法について

条件式について、必ず左側に定数を置くスタイルをヨーダ記法といいます。
これは === と誤るのを防ぐテクニックなのですが、Pythonでは不要です。
Pythonの代入は式でなく文であり、その誤りがエラーとなるからです。

投稿2018/01/26 05:33

編集2018/01/26 06:43
LouiS0616

総合スコア35660

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

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

0

全角空白が入っています。

Python

1 def write(self, ratio): 2if 1.0 < ratio: # saturation 3 ratio = 1.0

投稿2018/01/26 05:41

Orlofsky

総合スコア16415

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問