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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

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

Q&A

解決済

1回答

733閲覧

Python while True が動いてくれません

misokawa

総合スコア7

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

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

0グッド

1クリップ

投稿2017/11/09 02:16

編集2017/11/09 05:07

###前提・実現したいこと
プログラミング初心者です。Raspberry PiでGPIOの信号がonするとメールを携帯に送信し、プログラム実行1時間経過すると自動的にプログラムが終了するポスト通知のプログラムを作っています。
###発生している問題・エラーメッセージ

errorが表示されませんが、おそらくどこかで例外が発生して強制終了していると考えています

1エラーメッセージ 2```なし 3 4###該当のソースコード 5```python 6ここにご自身が実行したソースコードを書いてください 7#!/usr/bin/python 8# coding: utf-8 9# -*- coding: utf-8 -*- 10# Import smtplib for the actual sending function 11import smtplib 12import RPi.GPIO as GPIO 13import time 14import sys 15from email.mime.multipart import MIMEMultipart 16from email.mime.text import MIMEText 17 18num_lines = sum(1 for line in open('ren.py')) 19me = 'yyyy@gmail.com' 20you = 'xxxx@gmail.com' 21msg = MIMEMultipart('alternative') 22# 件名、宛先 23msg['Subject'] = '郵便です' 24msg['from'] = me 25msg['To'] = you 26# 検出部 27#変数の準備 28total = 0 29 30GPIO.setmode(GPIO.BOARD) 31GPIO.setup(40, GPIO.IN) 32#変数の準備 33total = 0 34 35#測定開始時間の記録 36A = time.time() 37 38#計算時間を図りたい計算過程 39def main(): 40 while True:#'検出’ 41 42 sensa = GPIO.input(40) 43 if (sensa == 1): 44 send() 45 time.sleep(0.5) 46 #測定終わりの時間を記録 47 B = time.time() 48 #計算にかかった秒数を表示 49 print("かかった時間は{0}秒です.".format(B-A)) 50 if ({0}> 10): 51 print ("プログラム終了") 52 sys.exit() 53 54GPIO.cleanup() 55 56def send(): #送信処理 57# メール 58 body_text = '寮のポストに郵便が届きました' 59 msg.attach(MIMEText(body_text, 'plain', 'utf-8')) 60# Send the message via our own SMTP server, but don't include the envelope head$ 61 s = smtplib.SMTP_SSL('smtp.gmail.com', 465) 62 s.login('xxx@gmail.com','pass') 63 s.sendmail( me, [you], msg.as_string() ) 64 s.close()

###試したこと
import pdb; pdb.set_trace()を使用して調べましたがどこが駄目か分かりませんでした

###補足情報(言語/FW/ツール等のバージョンなど)
python2.7.13で行っています。どうかお優しい方お願いいたします

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

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

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

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

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

misokawa

2017/11/09 02:38

やり方が分かっていなくすみませんでした。ありがとうございました
LouiS0616

2017/11/09 04:49

今からでも編集可能ですので、直してください。
misokawa

2017/11/09 05:07

編集しました
guest

回答1

0

ベストアンサー

main関数が呼ばれたとして回答します。

内部のif ({0} > 10):部分がつねにTrueとなるため終了してしまいます。
これはprint( {0} > 10) の結果がTrueになることで確かめられます。
理由については説明が難しいのと本質(やりたいこと)とは離れるため割愛します。

1時間経った場合に終了するという意図であれば、B-Aの戻り値は秒(float)なのでif (B - A) > 3600.0:となります。

以下検証コード(Python2.7)です。

Python

1import time 2print( {0} > 10) # True 3A = time.time() 4while( True): 5 print('loop') 6 B = time.time() 7 if (B-A) > 5.0: 8 break 9 time.sleep(1) 10print('end') # 5秒後に表示

投稿2017/11/09 05:29

編集2017/11/09 05:32
can110

総合スコア38266

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

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

misokawa

2017/11/09 06:05

回答ありがとうございます。教授してくださったことを試してみましたが、プログラムの挙動は変わりませんでした。これはmain関数が呼ばれていないからなのでしょうか?
can110

2017/11/09 06:14

質問欄に提示されているコード内には「main関数の定義」部分はありますが、「main関数を呼んでいる」部分はないことはご理解されていますか? つまり --- (略) A = time.time()の後 def main( (略) main() ← これが必要! GPIO.cleanup() (略) ---
misokawa

2017/11/09 06:45

二度も質問に回答していただきありがとうございます。最近始めたばかりで勉強不足でした。ご指摘頂いたところを修正したらプログラムが動いてくれました本当にありがとうございます。
can110

2017/11/09 06:52

動いてよかったです。 C/C++の感覚だと、main関数の定義を書くだけで呼ばれるのが自然なのですが、pythonはそうではないところがハマりどころでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問