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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3511閲覧

以下のプログラムのt0 = time.time() while time.time() - t0 < 0.35がわかりません

mercurian-teto

総合スコア75

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/07/09 08:17

編集2016/07/10 04:13

ev3ライントレースのプログラミングで
以下の部分が意味不明です。

t0 = time.time() while time.time() - t0 < 0.35

が特にわかりません。
タイムがリセットされるとか
0,35秒いないに更新されない場合次のプログラムに移行すると聞いたんですが、聞いたんですが、どこのことを言っているのかよくわかりません。

lang

1def line(): 2 t0 = time.time() 3 while time.time() - t0 < 0.35: 4 if cs.value () > 50 : 5 mr.run_forever(duty_cycle_sp=-30) 6 ml.run_forever(duty_cycle_sp=60) 7 t0 = time.time() 8 else: 9 mr.run_forever(duty_cycle_sp=60) 10 ml.run_forever(duty_cycle_sp=-30)

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

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

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

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

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

guest

回答1

0

ベストアンサー

t0に前回の時間が入っていて、
time.time()で現在の時間が得られるので、
time.time() - t0というのは今回と前回の時間の差になります。

ということで、
while time.time() - t0 < 0.35
「今回と前回の時間の差が0.35秒未満である間ループを継続する」
という意味になります。

投稿2016/07/09 08:34

argius

総合スコア9388

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

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

mercurian-teto

2016/07/09 08:58

たとえばなんですが、 (意味がわからなかったらごめんなさい) プログラムを開始してelse文が実行されて、 次にif文を実行して、 次にelse文を実行するとなったときに if文を実行した時間ー1回目のelse文を実行した時間 が0.35以上であったらループを終了して次のプログラムに移行するのでしょうか。
argius

2016/07/09 09:14

前回もお願いしましたが、 Pythonはインデントが無いと意味が変わってしまうor動作しない言語ですので、 コード部分を ``` ``` で囲んで記載いただけますようお願いいたします。 今回のコードであればおそらく間違いはないと思いますが、 場合によっては意味が変わってしまうので。 if文の最後に t0 = time.time() があってこれで時間がリセットされるので、 言い換えるなら、 現在の時間-(前回if文を実行した時間 または 開始した時間(先頭のt0 = time.time())) が0.35秒未満である間、が正しいです。 つまり、前回のif文からの経過時間になります。 > プログラムを開始してelse文が実行されて、 > 次にif文を実行して、 > 次にelse文を実行するとなったときに 2行目のif文が終わった時刻からの経過時間が 0.35秒以上になったら、 ループを抜けます。 このコードの場合はそこで関数が終了していますので、 関数を抜けることになります。
mercurian-teto

2016/07/09 14:57

すいません、新たな質問なんですが、 else文にt0time.timeがないんですけど、ほかのif文なんかとどう違うのでしょうか。
argius

2016/07/09 15:01

前回のコメントの件について言及が無いのですが、 ご理解いただけたということでよろしいのでしょうか? 今すぐでなくて良いので、対応を検討していただけませんか。
mercurian-teto

2016/07/09 16:02

すいません、ついさっきの新たな質問ですが、撤回します。 それで、前回のコメントの言及なんですが、 回答してくださったことを参考にして、実際にev3のライントレースをやってみたのですが、 要するにループを抜けるときは ループを抜ける瞬間の前のif文かelse文実行時間は0,35秒以内 と思ったのですが、そうでしょうか。
argius

2016/07/09 16:19

インデントの件もできればお願いします。 次回からでも構いませんから。 で、ご質問の件 > ループを抜けるときは > ループを抜ける瞬間の前のif文かelse文実行時間は0,35秒以内 は、結論から言うと、たぶん違うと思います。 正直、実際のev3の環境で確認しないことには はっきりしたことは言えません。 特に、run_forever()やcs.value()の処理時間によっては結論は変わります。 以下は、これらの処理にかかる時間がごくわずかであるという前提で続けます。 (少なくとも全部合わせて0.35秒より確実に短い想定) ifの方が選択され続ける限りはt0が毎回リセットされるので ループを抜けないのではないでしょうか。 なので、elseが選択され続けて (つまりずっとcs.value() > 50にならないで) 合計0.35秒を超えた時点でループが終了する、 というのが正しいと思います。 その場合、elseが何度繰り返されるのかは予想できません。
mercurian-teto

2016/07/10 03:39

<コード部分を ``` ``` で囲んで記載いただけますようお願いいたします。 コード部分とは具体的にどこからどこなんでしょうか。
mercurian-teto

2016/07/10 03:45

また、以下のエラーが起きたのですが、コード部分を ``` ``` で囲むに関係しますか。 Traceback (most recent call last): File "./lineline.py", line 25, in <module> ml.run_forever(duty_cycle_sp=40) File "/usr/lib/python2.7/dist-packages/ev3dev/core.py", line 686, in run_forever setattr(self, key, kwargs[key]) File "/usr/lib/python2.7/dist-packages/ev3dev/core.py", line 359, in duty_cycle_sp self.set_attr_int('duty_cycle_sp', value) File "/usr/lib/python2.7/dist-packages/ev3dev/core.py", line 210, in set_attr_int self._set_attribute(attribute, '{0:d}'.format(int(value))) File "/usr/lib/python2.7/dist-packages/ev3dev/core.py", line 204, in _set_attribute self._attribute_cache.write(abspath(self._path + '/' + attribute), value) AttributeError: 'LargeMotor' object has no attribute '_path' Exception AttributeError: "'LargeMotor' object has no attribute '_path'" in <bound method LargeMotor.__del__ of <ev3dev.core.LargeMotor object at 0xb678be10>> ignored
argius

2016/07/10 03:50

あ、コード部分は、というのは teratailの質問に貼るときの話です。 質問文に表示されているPythonコードはインデントされていませんよね? そのことを言っています。 コード部分は、今回の場合だと、 ```lang-python def line(): (略) ml.run_forever(duty_cycle_sp=-30) ``` のような感じです。 lang-pythonをつけると、Pythonのシンタックスハイライトが付きます。 インデントも実行したときのコードのものを維持するようにしてください。 こうすることで、格段に読みやすくなりますし、 Pythonの場合はインデントが正しく表示されるようになります。
mercurian-teto

2016/11/08 11:14

返事が大変遅れてしまいすいません。回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問